Ubuntu下设置mysql定时自动备份

利用系统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
//删除含有此日期的那个备份文件

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值