当数据库中数据越来越多的时候,数据的备份是何等的重要,下面我们就来用 shell脚本 + crontab定时任务来实现MySQL的数据备份(支持多数据库),关于shell和crontab的用法这里不再做过多的解释,还不太会使用的同学可以查阅相关资料进行学习。
#!/bin/bash
# 要备份的数据库名,多个数据库用空格分开 例如 (database1 database2 database2)
databases=(mydatebase)
# 备份文件要保存的目录
basepath='/home/backup_mysql'
if [ ! -d "$basepath" ]; then
mkdir -p "$basepath"
fi
# 循环databases数组
for db in ${databases[*]}
do
# 备份数据库生成SQL文件
/bin/nice -n 19 /usr/bin/mysqldump -uroot --default-character-set=utf8 -p123456 --database $db > $basepath$db-$(date +%Y%m%d).sql
# 将生成的SQL文件压缩
/bin/nice -n 19 tar zPcf $basepath$db-$(date +%Y%m%d).sql.tar.gz $basepath$db-$(date +%Y%m%d).sql
# 删除7天之前的备份数据
find $basepath -mtime +7 -name "*.sql.tar.gz" -exec rm -rf {} \;
done
# 删除生成的SQL文件
rm -rf $basepath/*.sql
如果想支持远程服务器备份,可以将第17行当中的 mysqldump 参数改成 -p123456 后面加上 -h 192.168.1.123 远程ip 。
shell 脚本写完以后,保存在指定位置,例如放在/home/backup_mysql/back_mysql.sh,我们现在开始让它定时执行,这时候我们可以用Linux当中的 crontab, 来实现每晚11点定时执行:
1
0 23 * * * sh /home/backup_mysql/back_mysql.sh
备份备份效果如下,自动删除7天以前的备份,只保留7天内的数据,好处是可以节省磁盘空间:
-rw-r--r-- 1 root root 161994773 7月 16 03:40 mydatebase-20160716.sql.tar.gz
-rw-r--r-- 1 root root 162069976 7月 17 03:40 mydatebase-20160717.sql.tar.gz
-rw-r--r-- 1 root root 162137600 7月 18 03:40 mydatebase-20160718.sql.tar.gz
-rw-r--r-- 1 root root 164006629 7月 19 03:41 mydatebase-20160719.sql.tar.gz
-rw-r--r-- 1 root root 164911525 7月 20 03:41 mydatebase-20160720.sql.tar.gz
-rw-r--r-- 1 root root 166129583 7月 21 03:41 mydatebase-20160721.sql.tar.gz
-rw-r--r-- 1 root root 167313026 7月 22 03:42 mydatebase-20160722.sql.tar.gz