centos7下实现mysql异地自动定时全量备份
工作中需要对mysql进行异地的自动全量备份,mysql版本为5.7,centos版本为7.0,实现的主要思路是通过局域网中的其他电脑,利用crontab自动定时执行mysqldump以此来达到异地自动定时备份的要求。
这里我要在服务器192.168.1.2上对192.168.1.3的mysql进行异地备份。
crontab命令
crontab -e
:通过文本编辑器来设置定时任务指令,输入后会到一个vi界面,我们在此处输入时间字符串和要执行的命令或者脚本文件,例如每天的 23:59 分执行脚本a.sh,我们需要输入 59 23 * * * /data/a.sh
即可。
crontab -l
:列出目前的定时任务列表。
crontab -r
:删除目前的定时任务。
crontab时间字符串
格式:f1 f2 f3 f4 f5 program
- 其中 f1 是表示分钟,f2 表示小时,f3 表示一个月份中的第几日,f4 表示月份,f5 表示一个星期中的第几天。program 表示要执行的程序。
- 当 f1 为 * 时表示每分钟都要执行 program,f2 为 * 时表示每小时都要执行程序,其馀类推
- 当 f1 为 a-b 时表示从第 a 分钟到第 b 分钟这段时间内要执行,f2 为 a-b 时表示从第 a 到第 b 小时都要执行,其馀类推
- 当 f1 为 */n 时表示每 n 分钟个时间间隔执行一次,f2 为 */n 表示每 n 小时个时间间隔执行一次,其馀类推
- 当 f1 为 a, b, c,... 时表示第 a, b, c,... 分钟要执行,f2 为 a, b, c,... 时表示第 a, b, c...个小时要执行,其馀类推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期几 (0 - 6) (星期天 为0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一个月中的第几天 (1 - 31)
| +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
字段 | 是否必填 | 允许值 | 允许特殊字符 | 备注 |
---|---|---|---|---|
Seconds|秒 | 是 | 0–59 | *,- | 标准实现不支持此字段。 |
Minutes|分钟 | 是 | 0–59 | *,- | |
Hours|小时 | 是 | 0–23 | *,- | |
Day of month|一月中的第几天 | 是 | 1–31 | *,-?LW | ?LW 只有部分软件实现了 |
Month|月份 | 是 | 1–12 or JAN–DEC | *,- | |
Day of week|星期中的星期几 | 是 | 0–7 or SUN–SAT | *,-?L# | ?L# 只有部分软件实现了 Linux和Spring的允许值为0-7,0和7为周日 Quartz的允许值为1-7,1为周日 |
Year|年 | 否 | 1970–2099 | *,- | 标准实现不支持此字段。 |
安装mysql
我们要使用mysqldumb命令,首先需要在192.168.1.2
安装mysql客户端,这里为了方便我把服务端和客户端一起装了,安装方法可见《记录在centos7上安装的mysql5.7》。
编写脚本
注意以下操作都是在192.168.1.2
上进行的。
创建备份目录
mkdir /data/mysqlbackup
mysqldunp
使用mysqldunp命令测试数据库备份
mysqldump -uroot --single-transaction -h192.168.1.3 -pyourpassword databaseName > /data/mysqlbackup/backup_test.sql
-u
:要备份的mysql的用户名-h
:要备份的mysql的主机ip-p
:要备份的mysql的密码databaseName
:要备份的数据库名字--single-transaction
:不会锁表,也确保数据的一致性
执行后,请确认是否生成了 /data/mysqlbackup/backup_test.sql
文件,并且文件的大小要大于0kb。
创建备份脚本
创建/data/mysqlbackup.sh
文件,并写入如下内容:
export mysqldump_date=$(date +%Y%m%d_%H%M%S) && \
mysqldump -uroot --single-transaction -h192.168.1.3 -pyourpassword databaseName > /data/mysqlbackup/backup_$mysqldump_date.sql && \
gzip /data/mysqlbackup/backup_$mysqldump_date.sql
find /data/mysqlbackup/ -name "*.sql.gz" -mtime +15 -exec rm -f {} \;
export
在系统中自定义了个变量mysqldump_date,给备份和压缩命令使用gzip
为压缩命令,默认压缩了之后会把源文件删除,压缩成.gz
文件find ...
这行命令的意思为,查询/data/mysqlbackup/
目录下,创建时间15天之前(-mtime +15
),文件名后缀为.sql.gz
的所有文件 执行删除命令-exec rm -f {} \;
。总的意思就是:mysql的备份文件只保留15天之内的。15天之前的都删除掉。
保存之后,我们验证一下这个脚本:
sh /data/mysqlbackup.sh
然后确认/data/mysqlbackup/
路径下是否生成了 backup_xxx.sql.gz
,并且大小大于0kb。
定时自动执行
注意以下操作都是在192.168.1.2
上进行的。
输入 crontab -e
后回车,在接下来的vi编辑器中输入 59 23 * * * /data/mysqlbackup.sh
,然后保存。使用crontab -l
确认是否添加好定时任务:
[root@ecs-4e09-0001 ~]# crontab -l
59 23 * * * /data/mysqlbackup.sh
注意,你可以设置一个时间间隔比较短的定时任务来确定是否正常,例如每5分钟自动备份一次:*/5 * * * * /data/mysqlbackup.sh
。
版权声明:
作者:Miigua
链接:https://www.miigua.com/article/340.html
来源:米瓜的博客
文章版权归作者所有,未经允许请勿转载。
全部评论