背景
日常工作中需要对低频网站进行维护,数据安全是网站的基础。人为备份低效又耗精力,自动备份便成了很受关注的基本诉求。下面给提供的方案只适用于低频少数据量的网站,复杂交互或存在大量换算的企业级项目不建议启用此方案。
原理
此方案用最简单粗暴的方式进行备份,原理是使用crontab命令定时运行mysqldump实现自动备份工作。mysqldump部分数据时会对所有表进行锁定,只能读不能写。基于这种限制下,建议自动备份的时间设置在凌晨3点后,并且在网站上设置相应的提示,如存在调用写入接口时返回“系统维护中…”的提示。
准备
首先得清楚crontab与mysqldump怎样用,下面先简单说明一下。
mysqldump
crontab一般情况下是linux系统下都有的,而mysqldump则需要安装mysql-client:
1 | $ yum -y install mysql-client |
然后是验证一下mysqldump使用的方法:
用法
1 | mysqldump |
例子
备份所有数据库:
1 | mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db |
备份指定数据库:
1 | mysqldump -uroot -p test > /backup/mysqldump/test.db |
备份指定数据库指定表(多个表以空格间隔)
1 | mysqldump -uroot -p mysql db event > /backup/mysqldump/2table.db |
备份指定数据库排除某些表
1 | mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db |
crontab
用法
crontab 是用来让使用者在固定时间或固定间隔执行程序之用,换句话说,也就是类似使用者的时程表。
-u user 是指设定指定 user 的时程表,这个前提是你必须要有其权限(比如说是 root)才能够指定他人的时程表。如果不使用 -u user 的话,就是表示设定自己的时程表。
参数说明:
- -e : 执行文字编辑器来设定时程表,内定的文字编辑器是 VI,如果你想用别的文字编辑器,则请先设定 VISUAL 环境变数来指定使用那个文字编辑器(比如说 setenv VISUAL joe)
- -r : 删除目前的时程表
- -l : 列出目前的时程表
时程表中的格式
1 | # 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…个小时要执行,其馀类推
例子
下面再看看几个具体的例子:
1 | 0 */2 * * * /sbin/service httpd restart #意思是每两个小时重启一次apache |
到这步对crontab与mysqldump已经有了大致理解,下面进行具体方案说明。
具体方案
思路
- 在shell脚本中调用mysqldump生成备份文件(这个工具可以生成sql文件到磁盘上去)
- 为了方便以后查找。每次备份的记录记录成日志形式。几点进行了备份操作,生成了什么文件名称。这样可以方便以后查阅哪天是否没有成功备份删除的文件作为日志信息也记录下来。
- 让linux下的crontab进程调用脚本执行,这里是每周日凌晨3点执行一次。
第一步:制作mysql备份脚本
在终端输入下面内容,创建mysqlbackup.sh文件:
1 | # ~/ 为用户目录根 |
并键入下面内容:
1 | # /bin/bash |
第二步:配置自动执行
在终端输入
1 | $ crontab -e |
然后按i建进入编辑状态,把以下内容键入:
1 | 0 3 * * 0 /bin/sh /home/lprete/mysqlbackup.sh |
键入后按Esc
退出编辑模式,然后按Shift+:(冒号建)
进入命令模式,键入qw
后回车进行保存退出。不懂看这里:Linux vi/vim | 菜鸟教程 (runoob.com)
注意!新创建的 cron 任务,不会马上执行,至少要过 2 分钟后才可以,当然你可以重启 cron 来马上执行。
到这里自动备份mysql的工作就全部结束,可以定期检查一下用户目录下是否有备份文件。
引用
部分内容引用至:
- MYSQL自动备份策略的选择与实践 - 王滔 - 博客园 (cnblogs.com)
- linux定时任务的设置 - 疯狂 - BlogJava
- Linux crontab 命令 | 菜鸟教程 (runoob.com)
- MySQL之mysqldump的使用 - MarkLogZhu - 博客园 (cnblogs.com)