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
来源:米瓜的博客
文章版权归作者所有,未经允许请勿转载。

THE END
二维码
打赏
请在后台主题设置处设置打赏图片
< <上一篇
下一篇>>