定时自动备份mysql数据库

Linux自动备份mysql数据库(含docker部署的)

此处以docker部署的mysql为例

创建备份脚本

脚本内容

首先使用bash命令创建一个sh脚本文件并赋予执行权限

touch Auto_backup.sh && chmod +x Auto_backup.sh

使用编辑器打开这个脚本,并添加以下内容:

#!/bin/bash
# 自动备份docker mysql数据库

# 定义备份路径
backup_dir=/Users/zdy/Desktop/mysql

# 定义备份时间
backup_time=`date +%Y_%m_%d_%H时%M分%S秒`

# 使用进入mysql容器执行mysqldump命令并备份数据库并将文件名更改为当前时间,此处--databases参数为备份多个数据库,若只有一个数据库备份,可以省略改参数
docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz

# 非docker部署时使用
# mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz

# 删除7天前的备份
find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f
# 备用删除命令
# find $backup_dir -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;

# 如果不需要压缩使用(直接备份为SQL文件)
# docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo  > $backup_dir/backup_$backup_time.sql
# find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f

此时这个脚本就手动运行可以进行数据备份了,此处会提示在命令行界面上使用密码可能不安全。请注意哦!不过我一般使用RSA秘钥免密码连接,通常不存在泄露问题

定时自动备份mysql数据库

定时自动备份mysql数据库

备份效果

参数解释

–all-databases, -A: 备份所有数据库
–databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。

–force, -f:即使发现sql错误,仍然继续备份
–host=host_name, -h host_name:备份主机名,默认为localhost
–no-data, -d:只导出表结构
–password[=password], -p[password]:密码
–port=port_num, -P port_num:制定TCP/IP连接时的端口号
–quick, -q:快速导出
–tables:覆盖 –databases or -B选项,后面所跟参数被视作表名
–user=user_name, -u user_name:用户名
–xml, -X:导出为xml文件

添加定时器

定时任务命令

这时候我们再添加一个定时任务,在每天凌晨2时自动对数据库进行一次备份,这里会用到Linux的crontab 命令了

# 查看定时任务
crontab -l

定时自动备份mysql数据库

定时自动备份mysql数据库

定时任务

# 修改定时任务,第一次运行会提示使用哪一个编辑器,我选择2使用vim
crontab -e

定时自动备份mysql数据库

定时自动备份mysql数据库

编辑定时任务

参数解释:

* * * * * commad
分 时 日 月 周 命令

1列表示分钟 1~59, 每分钟用 * 或者 */1表示
2列表示小时 1~23 (0表示0点)
3列表示日期 1~31
4列表示月份 1~12
5列表示星期 0~6 (0表示星期日)
6列是要运行的命令

还原数据库命令

# 使用 mysql 命令还原数据库格式如下:
mysql -u用户名 -p 数据库名 < 数据库名.sql

扩展操作

备份到远程服务器

将数据库备份文件再备份到另一台服务器上,如果这一台服务器出现问题,文件丢失,另一台服务器还有备份

此处主要用到scp命令

# 将当前备份文件复制到远程服务器
scp $backup_dir/backup_$backup_time.sql 用户名@远程服务器:路径/backup_$backup_time.sql

完整配置

#!/bin/bash
# 自动备份docker mysql数据库

# 定义备份路径
backup_dir=/Users/zdy/Desktop/mysql

# 定义备份时间
backup_time=`date +%Y_%m_%d_%H时%M分%S秒`

# 使用进入mysql容器执行mysqldump命令并备份数据库并将文件名更改为当前时间,此处--databases参数为备份多个数据库,若只有一个数据库备份,可以省略改参数
docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz

# 非docker部署时使用
# mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo | gzip > $backup_dir/backup_$backup_time.sql.gz

# 删除7天前的备份
find /www/mysql_backup -name "*.sql.gz" -mtime +7 | xargs rm -f
# 备用删除命令
# find $backup_dir -mtime +7 -name "*.sql.gz" -exec rm -rf {} \;

# 如果不需要压缩使用(直接备份为SQL文件)
# docker exec mysql mysqldump -u数据库用户名 -p数据库密码 --databases waline matomo  > $backup_dir/backup_$backup_time.sql
# find /www/mysql_backup -name "*.sql" -mtime +7 | xargs rm -f

# 拷贝到远程服务器
scp $backup_dir/backup_$backup_time.sql 用户名@远程服务器:路径/backup_$backup_time.sql

© 版权声明
THE END
喜欢就支持一下吧
点赞13赞赏 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容