Linux通过cron自动备份数据库
这也应该是个很常见的需求了,找了点文章试了下,还是很简单的。
References:
- https://www.cloudbalkan.com/how-to-setup-automatic-mysql-backup-on-ubuntu-debian-and-centos/
- https://blog.csdn.net/renfufei/article/details/23701765
Step1:手动备份MySQL数据库
通过标准方式安装的MySQL可以使用mysqldump
工具,可以像下面这样备份数据库:
$ mysqldump -u<用户名> -p<密码> <数据库名> > exampledb.sql
比如:
$ mysqldump -uroot -p123456 test > test.sql
注意:在-u
和-p
后面没有空格
上面的命令会导出普通SQL查询语句,但是其中的文本可以被压缩以节省空间,所以压缩一下备份文件:
$ mysqldump -uroot -p123456 test | gzip > test.sql.gz
如果你想备份服务器上的所有数据库,使用"-all-databases"而不是具体的数据库名,像这样:
$ mysqldump -uroot -p123456 -all-databases | gzip > test.sql.gz
注:-p后面也可以不写密码,但是如果这个用户有密码会在回车命令后要求输入密码,不利于脚本执行。最好是新建个专门的没密码用户来干这件事。
Step2:设置定时任务自动备份MySQL数据库
你已经知道如何手动备份数据库了,下面将这件事做成定时任务自动化。
首先创建文件夹:
$ mkdir /var/backups/mysql
由于备份是在提供历史数据时更有意义,所以给这些备份文件一个更有意义的命名,比如增加日期和时间后缀:
$ mysqldump -uroot -p123456 test | gzip > /var/backups/mysql/test.$(date +”%Y_%m_%d_%I_%M”).sql.gz
虽然这个命令只有一行,可以直接写在cron中,但是我们还是将它做成shell脚本,有点仪式感嘛~~!
比如创建一个脚本文件"/usr/local/applications/mysql_dump_bak.sh",脚本权限设为700,内容如下:
#!/bin/bash
mysqldump -uroot -p123456 test | gzip > /var/backups/mysql/test.$(date +”%Y_%m_%d_%I_%M”).sql.gz
然后就是配置定时任务cron,关于cron的信息这里就不多说了,相信有这个需求的都能搞定。
打开cron编辑器:
$ crontab -e
在最底部添加上面的脚本:
0 2 * * * /usr/local/applications/mysql_dump_bak.sh
这行的意思是在每天的凌晨2点执行一次备份脚本。
然后保存cron配置就行了,一切已经就绪。