Linux定时压缩备份Mysql数据库并自动删除之前备份数据
2016-09-11 19:42
1031 查看
项目中数据库很重要,偶尔也会发生一些突发状况造成数据库瘫痪甚至奔溃的情况。为了能及时恢复减少损失,数据的备份就显得很重要了。由于数据库资源在各个时间段使用情况不同,为了不影响业务的正常运行的同时,所以尽量选在数据库相对较闲的时候进行自动备份。日积月累,备份就多了,所以还要能自动删除时间比较长的备份。下面进入正题。
1、创建备份目录
2、进入备份目录,新建脚本dataBackUp.sh
加入以下代码:
有一点需要注意,有些直接使用mysqldump时提示找不到命令,是因为没有配置环境变量的原因。需要在etc/profile中添加mysql的环境变量,在上一篇博文Mysql5.7.15安装配置中介绍过,不再赘述。或者把mysqldump的完整路径加上也可以解决。
3、给脚本赋权:
4、先执行脚本测试一下:
提示mysqldump: [Warning] Using a password on the command line interface can be insecure.
这是因为直接把密码暴露出来了,系统发出的警告。所以dump的时候,应该写mysqldump -uroot -p ad_sq | gzip > ad_sq.sql.gz,然后会提示输入密码:
但是由于我们是在脚本中写的,自然不能这样做了,所以要加到mysql的配置文件my.cnf中去。
然后加入下面代码,这样以后再使用mysqldump的时候,就不需要再写用户名和密码了。其他命令也是同样的道理。
脚本中就可以改为:
执行一下,结果如下:
5、添加脚本到定时任务中去:
6、满以为大功告成,结果却出了意外,如下图:
从图中可以看出,第一个是手工执行脚本后的结果,大小大约6M。后面几个任务自动执行的,大小只有20bytes!明显没有导出数据!
7、分析原因,思路:
1)试了下把脚本中的mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz换成 /usr/mylocal/mysql/bin/mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz,也就是mysqldump的完整路径,crontab和手工执行结果都是成功的,这样写没问题;
2)如果是mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz这样的,手工执行时可以的,自动执行却是失败的。不甘心,上网找原因,原来是环境变量的锅!手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的。因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样系统执行任务调度时就没有问题了。
7、修改好之后,再次等待结果,搞定!
8、根据数据库情况,修改定时任务规则。
总结:
mysqldump有很多种导出条件设置,实际中可以根据需要导出需要的表或者满足条件的数据,这里做的是整个数据库备份。关于压缩的数据,可以gunzip解压。实验达到了预期的效果,虽然中间不是很顺利,但是错误中学到了更多的东西,之所以拿出来分享一下,是希望大家引以为戒。不足之处,希望大家指出。
http://www.xuebuyuan.com/1122682.html
http://www.jb51.net/LINUXjishu/151805.html
1、创建备份目录
[root@ZhOu usr]# mkdir databak
2、进入备份目录,新建脚本dataBackUp.sh
[root@ZhOu usr]# cd databak [root@ZhOu databak]# pwd /usr/databak [root@ZhOu databak]# vi dataBackUp.sh
加入以下代码:
#!/bin/bash dir=/usr/databak --目标路径 now_date=$(date +%Y%m%d%H%M) --当前日期,年月日时分。注意:date和+之间要有空格 --获取10天前的日期,也可以使用date -d '10 days ago' +%Y%m%d。注意:-10和-day中间不能有空格。 last_date=$(date -d -10-day +%Y%m%dH%M) mysqldump -uroot -proot ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz --备份并压缩文件 rm -f $dir/ad_sq_$last_date.sql.gz --删除旧文件
有一点需要注意,有些直接使用mysqldump时提示找不到命令,是因为没有配置环境变量的原因。需要在etc/profile中添加mysql的环境变量,在上一篇博文Mysql5.7.15安装配置中介绍过,不再赘述。或者把mysqldump的完整路径加上也可以解决。
3、给脚本赋权:
[root@ZhOu databak]# chmod +x dataBackUp.sh [root@ZhOu databak]# ll total 4 -rwxr-xr-x 1 root root 213 Sep 11 20:57 dataBackUp.sh
4、先执行脚本测试一下:
[root@ZhOu databak]# ./dataBackUp.sh mysqldump: [Warning] Using a password on the command line interface can be insecure.
提示mysqldump: [Warning] Using a password on the command line interface can be insecure.
这是因为直接把密码暴露出来了,系统发出的警告。所以dump的时候,应该写mysqldump -uroot -p ad_sq | gzip > ad_sq.sql.gz,然后会提示输入密码:
[root@ZhOu databak]# mysqldump -uroot -p ad_sq | gzip > ad_sq.sql.gz Enter password:
但是由于我们是在脚本中写的,自然不能这样做了,所以要加到mysql的配置文件my.cnf中去。
[root@ZhOu databak]# vi /etc/my.cnf
然后加入下面代码,这样以后再使用mysqldump的时候,就不需要再写用户名和密码了。其他命令也是同样的道理。
[mysqldump] user=root password=root
脚本中就可以改为:
#!/bin/bash dir=/usr/databak now_date=$(date +%Y%m%d%H%M) last_date=$(date -d -20-day +%Y%m%d%H%M) mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz rm -f $dir/ad_sq_$last_date.sql.gz
执行一下,结果如下:
5、添加脚本到定时任务中去:
[root@ZhOu databak]# crontab -e */1 * * * * /usr/databak/dataBackUp.sh --确保实验,先每分钟执行一次
6、满以为大功告成,结果却出了意外,如下图:
从图中可以看出,第一个是手工执行脚本后的结果,大小大约6M。后面几个任务自动执行的,大小只有20bytes!明显没有导出数据!
7、分析原因,思路:
1)试了下把脚本中的mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz换成 /usr/mylocal/mysql/bin/mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz,也就是mysqldump的完整路径,crontab和手工执行结果都是成功的,这样写没问题;
2)如果是mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz这样的,手工执行时可以的,自动执行却是失败的。不甘心,上网找原因,原来是环境变量的锅!手动执行某个任务时,是在当前shell环境下进行的,程序当然能找到环境变量,而系统自动执行任务调度时,是不会加载任何环境变量的。因此,就需要在crontab文件中指定任务运行所需的所有环境变量,这样系统执行任务调度时就没有问题了。
#!/bin/bash source /etc/profile --这里很重要 dir=/usr/databak now_date=$(date +%Y%m%d%H%M) last_date=$(date -d -20-day +%Y%m%d%H%M) mysqldump ad_sq | gzip > $dir/ad_sq_$now_date.sql.gz rm -f $dir/ad_sq_$last_date.sql.gz
7、修改好之后,再次等待结果,搞定!
8、根据数据库情况,修改定时任务规则。
总结:
mysqldump有很多种导出条件设置,实际中可以根据需要导出需要的表或者满足条件的数据,这里做的是整个数据库备份。关于压缩的数据,可以gunzip解压。实验达到了预期的效果,虽然中间不是很顺利,但是错误中学到了更多的东西,之所以拿出来分享一下,是希望大家引以为戒。不足之处,希望大家指出。
http://www.xuebuyuan.com/1122682.html
http://www.jb51.net/LINUXjishu/151805.html
相关文章推荐
- 生产环境Mysql数据库备份脚本,Linux下网站数据定期自动备份与删除脚本,Windows下备份网站目录和数据库
- Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本
- 让linux每天定时备份MySQL数据库并删除五天前的备份文件
- Linux自动备份压缩MySQL数据库的实用方法
- 日志/数据自动压缩备份删除小脚本
- Linux自动备份压缩MySQL数据库的实用方法
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本(一)
- Linux全自动备份数据(周期性执行-打包-删除)
- linux定时备份MySQL数据库并删除七天前的备份文件
- linux定时备份MySQL数据库并删除七天前的备份文件
- Linux通过定时服务自动备份mysql数据库
- Linux下自动备份MySQL数据库并上传到远程FTP服务器且删除指定日期前的备份Shell脚本
- linux 自动定时备份程序和Mysql数据库
- linux定时备份MySQL数据库并删除七天前的备份文件 (2014-01-16 10:27:33)转载▼
- 黄聪:VPS实现自动定时备份网站数据以及Mysql数据库到百度云同步盘
- 让linux每天定时备份MySQL数据库并删除五天前的备份文件
- 让linux每天定时备份MySQL数据库并删除五天前的备份文件
- CentOS Linux自动备份MySQL数据库到远程FTP服务器并删除指定日期前的备份Shell脚本(二)
- 让linux每天定时备份MySQL数据库并删除五天前的备份文件
- Linux服务器自动备份压缩MySQL数据库的实用方法