利用系统crontab来定时执行备份文档,按日期对备份结果进行保存,达到备份的目的。
1、创建保存备份文档的路径/var/mysqldata
#mkdir /var/mysqldata
2、创建/usr/sbin/bakmysql文档
#nano /usr/sbin/bakmysql
输入
rq=`date +%Y%m%d`
tar zcvf /var/mysqldata/mysql$rq.tar.gz /var/lib/mysql
注意date前和后边的那个是`,不要写成'
或写成
rq=`date +%Y%m%d`
mysqldump --all-databases -u root -p密码 > /var/mysqldata/mysql$rq.tar.gz
/var/lib/mysql是您数据库文档的目录,部分用户是/usr/local/mysql/data,每个人可能不同
/var/mysqldata/表示保存备份文档的目录,这个每个人也能够根据自己的需要来做。
注:--all-databases 为备份全部数据库到mysqlbak下的mysql$rq.tar.gz文件中,如果把--all-databases替换为test,则只备份test数据库。
3、修改文档属性,使其可执行
# chmod +x /usr/sbin/bakmysql
4、修改/etc/crontab
#nano /etc/crontab
在下面添加
01 3 * * * root /usr/sbin/bakmysql
表示每天3点钟执行备份
5、重新启动crond
# /etc/init.d/cron restart
完成。
这样每天您在/var/mysqldata能够看到这样的文档
mysql20110408.tar.gz
您直接下载就能够了。
在tar命令执行前,停止数据库服务进程或锁定数据库, .
否则恢复数据时,会出现数据库损坏的情形,运气好时可修复,运气不好时就不能够了。 ..
所以建议
编辑 /usr/sbin/bakmysql文档
#nano /usr/sbin/bakmysql
sudo /etc/init.d/mysql stop
sleep 20
sudo /etc/init.d/apache2 stop
sleep 20
rq=`date +%Y%m%d`
tar zcvf /var/mysqldata/mysql$rq.tar.gz /var/lib/mysql
sudo /etc/init.d/apache2 start
sudo /etc/init.d/mysql start
这样,先停止数据库服务和Apache2的进程,再进行备份,比较稳妥。 sleep 20 是中间停留20秒
但是还有一个问题就是:一般用户在执行sudo命令时是要输入密码的,那么上述的执行过程中肯定不行住下执行。
解决办法就是 请看下一篇日志 Ubuntu中sudo免输密码的方法&激活root帐户
(本文来自网络,并已修改)
最后附上我的最终修改的四个文件内容:
sudo nano /etc/crontab //定时执行
01 03 * * * root /usr/sbin/bakmysql
//这个文件是导出数据库的批处理 每天 凌晨3:01分执行
01 04 * * * root /usr/sbin/bakmysql_fz
//这个文件是复制数据库的批处理 每天 凌晨4:01分执行
01 05 * * * root /usr/sbin/xkedu_del
// 删除XX天前的那天的备份的批处理 每天 凌晨 5:01 执行
+++++++++++++++++++++++++++++++++++++++++++++++++++
sudo nano /usr/sbin/bakmysql //这个文件是导出数据库的批处理 每天 凌晨3:01分执行
sudo /etc/init.d/nginx stop //停止nginx 服务器
sleep 20 //停留20秒
mysql -u root -proot //进入数据库 用户名和密码都是 root 注意-p后边没有空格
FLUSH TABLES WITH READ LOCK //这个命令在网上查吧,主要是将文件写入硬盘 防止导出出错
/Q //这是退出数据库命令
rq=`date +%Y%m%d` //设置变量,获取今天的日期 格式:20110516
sudo mysqldump -u root -proot --all-databases > /var/mysqldata/mysql_$rq.sql //用数据库命令mysqldump导出所有库为一个sql文件,放在/var/mysqldata文件夹中,文件名为:mysql_+日期.sql
sleep 20 //停留20秒
tar zcvf /var/mysql_backup/mysql_$rq.tar.gz /var/mysqldata/mysql_$rq.sql //将上边的导出的sql文件压缩放在/var/mysql_backup/中,文件名为:mysql_+日期.tar.gz
sleep 20 //停留20秒
sudo /etc/init.d/nginx start //开始nginx 服务器
+++++++++++++++++++++++++++++++++++++++++++++++++++
sudo nano /usr/sbin/bakmysql_fz //这个文件是复制数据库的批处理 每天 凌晨4:01分执行
sudo /etc/init.d/mysql stop //停止数据库
sleep 20 //停留20秒
sudo /etc/init.d/nginx stop //停止nginx 服务器
sleep 20 //停留20秒
rq=`date +%Y%m%d` //设置变量,获取今天的日期 格式:20110516
tar zcvf /var/mysqldata/fz/mysql$rq.tar.gz /var/lib/mysql //将数据库文件夹/var/lib/mysql 压缩到 /var/mysqldata/fz文件下,文件名为:mysql+日期.tar.gz
sudo /etc/init.d/nginx start //开始nginx 服务器
sudo /etc/init.d/mysql start //开始数据库
+++++++++++++++++++++++++++++++++++++++++++++++++++
2011.05.17 新增定期删除备份文件的功能
sudo nano /usr/sbin/xkedu_del // 删除XX天前的那天的备份的批处理 每天 凌晨 5:01 执行
DATE=$(date +%Y%m%d)
//获取今天的日期,结果为:20110517
aa_DATE=$(date "-d 7 day ago" +%Y%m%d)
//获取7天前的那天的日期,结果为:20110510
bb_DATE=$(date "-d 10 day ago" +%Y%m%d)
//获取10天前的那天的日期,结果为:20110507
cc_DATE=$(date "-d 20 day ago" +%Y%m%d)
//获取20天前的那天的日期,结果为:20110427
sudo rm /var/mysqldata/fz/mysql$aa_DATE.tar.gz
//删除含有此日期的那个备份文件
sudo rm /var/mysqldata/mysql_$bb_DATE.sql
//删除含有此日期的那个备份文件
sudo rm /var/mysql_backup/mysql_$cc_DATE.tar.gz
//删除含有此日期的那个备份文件