为了防止意外情况的发生,数据库损坏,造成难以挽回的损失,数据库的备份非常重要。大型网站都有做主从数据库,进行实时的备份。小应用没办法承担那么大的成本,但是数据库备份也还是需要的,如果通过人为的去备份,效率低,还有可能增加人为发生错误的概率,所以大多数都采用定时备份数据库。

定时备份数据库,大多数是采用脚本编写备份的代码,然后通过定时任务去执行。脚本你可以采用你擅长的编程语言,也可以使用shell。定时任务则用crontab

这边我介绍下使用shell+crontab的方法,实现定时备份数据库。

首先编写Shell脚本,我在目录/home/bak下写脚本,功能:备份数据库,为了节约磁盘空间删除超过30天的备份文件,代码如下:

mysqldump -u test1 -ptest123 testdatabase > /home/bak/sqldata/testdatabase`date +%Y%m%d`.sql
find /home/bak/sqldata/ -mtime +30 -name '*.sql' -exec rm -rf {} \;

编写定时任务, 功能:每隔两天的0点1分执行脚本任务,备份数据库

在命令行输入:crontab -e

输入下面代码:1 0 */2 * * sh /home/bak/sqlbak.sh

保存退出:按esc,然后冒号(:),输入字母:wq,按enter键(即vi 的保存退出)

重启crontab服务:service crond restart

centos下默认好像是安装了crond服务了,如果没有则需要自己安装

yum install crontabs

这样备份是执行全量备份,如果数据库中有部分日子数据是不需要的,可以按照下面方法,忽略某些表

mysqldump -u test1 -ptest123 testdatabase --ignore-table=testdatabase.table