思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?相关的知识,希望对你有一定的参考价值。
1、数据作用:
数据对我们来说是非常非常的重要,如果你是管理数据员、运维人员的,数据丢失了,找不回来,也就意味着,你的职业生涯就结束了,为了避免数据丢失,我们也做了很多的维护、备份,比如做主从复制、做全备、增备等等。这个可以参考我的另一篇文章Mysql主从复制。
我这里就不多说,今天我们要怎么写一个比较好的数据备份自动化脚本,让我们更好的管理数据库。
2、mysql备份脚本思路
首先要有一个思路,我的要求是每个的周一到周五做增量备份,周六做全备,对前两天的增备的日志删除,对两个星期前的全备也进行删除
整个过程都是涉及shell命令,所以果断的抛弃了python,使用shell脚本,数据库做全备需要应用mysqldump命令,这里命令mysql自带有,如果你的备份数据大于10G的话,请你使用xtrackbackup来做全备。增量的命令比较简单,只要刷新一下日志就好。
3、备份脚本编写
#!/bin/bash Mysqldump() { mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > /databack/data_all/`date +%F"-%H:%M"`.sql } ###这里写个函数,把全备命名写进去 $1 ###$1是我们执行脚本的参数,这样来实现该函数执行可变性 Mysql_log (){ mysqladmin -u root -p123456 flush-logs } $1 ###增量备份,同样把命令写进去 ##下面创建计划任务,只需要写到/etc/crontab,就可以了 crontab_dump () { cat /etc/crontab | grep "bash $0 Mysqldump " ##这里找一找使用有写执行全备的命令是否已经写到/etc/crontab里面。 if [ $? -eq 0 ]; then ##定义一个判断语句,如果在/etc/crontab里面找到执行全备的脚本命令,就输出一句话,没有就把时间任务写入进去 echo "The port test has been written to the time task, and 00:00 will perform the task" else echo "0 0 * * 6 bash $0 Mysqldump " >> /etc/crontab fi } crontab_dump crontab_mysqladmin () { cat /etc/crontab | grep "bash $0 Mysql_log " ##这里找一找使用有写执行增备的命令是否已经写到/etc/crontab里面。 if [ $? -eq 0 ]; then ##定义一个判断语句,如果在/etc/crontab里面找到执行增备的脚本命令,就输出一句话,没有就把时间任务写入进去 echo "The port test has been written to the time task, and 00:00 will perform the task" else echo "0 0 * * 1-5 bash $0 Mysql_log " >> /etc/crontab fi } crontab_mysqladmin
4、每天生成的日志会累积,我们需要把不要的删除掉,继续完善。
#!/bin/bash Mysqldump() { mysqldump -uroot -p123456 --single-transaction -R --triggers -E --master-data --flush-logs --all-databases > /databack/data_all/`date +%F"-%H:%M"`.sql num1=`ls -rt /databack/data_all | wc -l` ##按时间列出,你的全备的数据里面有多少个文件我这里的全备是备到/databack/data_all/目录下 file1=`ls -rt /databack/data_all | head -n 1` ##使用ls命令结合head命令,找出时间最远久的文件 for i in $num1 ; do ###做一个for循环,如果列出了的文件大于2,然后就删除时间最久远的那个文件 if [ $i -gt 2 ] ; then rm -rf /databack/data_all/$file1 fi done } $1 Mysql_log (){ mysqladmin -u root -p123456 flush-logs for a in {1..5};do ###这里做一个for循环,表示循环五次,应为二制日志,比较多,检测五次,还是比较好的,你的可以自己设 num2=`ls -rt /databack/data_logbin/ | wc -l` ##按时间列出,你的全备的数据里面有多少个文件我这里的全备是备到/databack/data_all/目录下 file2`ls -rt /databack/data_logbin/ | head -n 1` ##使用ls命令结合head命令,找出时间最远久的文件 for i in $num2; do if [ $i -gt 3 ] ; then ###做一个for循环,如果列出了的文件大于3,然后就删除时间最久远的那个文件,循环后退出,进入下一次循环。连续五次 rm -rf /databack/data_logbin/$file2 # else #echo "log-bin was update" fi done done } $1 crontab_dump () { cat /etc/crontab | grep "bash $0 Mysqldump " if [ $? -eq 0 ]; then echo "The port test has been written to the time task, and 00:00 will perform the task" else echo "0 0 * * 6 bash $0 Mysqldump " >> /etc/crontab fi } crontab_dump crontab_mysqladmin () { cat /etc/crontab | grep "bash $0 Mysql_log " if [ $? -eq 0 ]; then echo "The port test has been written to the time task, and 00:00 will perform the task" else echo "0 0 * * 1-5 bash $0 Mysql_log " >> /etc/crontab fi } crontab_mysqladmin
5、总结
一个mysql备份脚本就完成了,算不上难,但是,在写任何脚本的时候,你需要先理清思路最重要,先把大概的轮廓写出了的,再慢慢补充,相信会越写越好。
以上是关于思路:如何快速写一个全面的数据库 增备+全备+删除,自动化的脚本?的主要内容,如果未能解决你的问题,请参考以下文章