码迷,mamicode.com
首页 > 数据库 > 详细

MySQL自动备份可通用shell脚本

时间:2019-06-13 13:58:17      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:备份脚本   explicit   www   war   linux   忽略   ==   mkdir   scripts   


最近在整理服务器的脚本,发现以前写的MySQL每天自动备份脚本写的不太好,就重新写了一个:
#!/bin/bash
####目录环境的配置####
export datetime=`date +"%Y%m%d"`
export mysqlbin_dir="/usr/local/mysql/bin"
export datadir="`$mysqlbin_dir/mysql -h localhost -uroot -A -Bse "show variables like ‘datadir‘;" |awk ‘{print $2}‘`"
export mysql_backup="/data/backup/mysql_backup"
export masterbakdir="$mysql_backup/masterbakdir"
export database="database"

if [ ! -e "$masterbakdir/"$datetime"" ];then
        mkdir -p $masterbakdir/"$datetime"
fi

if [ ! -e "$mysql_backup/logs" ];then
        mkdir -p "$mysql_backup/logs"
fi
####记录主库库状态####
$mysqlbin_dir/mysql -h localhost -A -e "select now();show master status\G;" |tee -a $masterbakdir/"$datetime"/masterstat_${datetime}.log
echo "============================start mysqldump `date`" | tee -a $masterbakdir/"$datetime"/masterstat_${datetime}.log
####mysqldump####
$mysqlbin_dir/mysqldump --allow-keywords --opt $database > $masterbakdir/$database-$datetime.sql
if [ $? -eq 0  ]
      then
                echo "`date` database backup success" |tee -a $masterbakdir/"$datetime"/masterstat_${datetime}.log
        else
                echo "`date` database backup fail" |tee -a $masterbakdir/"$datetime"/masterstat_${datetime}.log
fi
echo "============================end mysqldump `date`"|tee -a $masterbakdir/"$datetime"/masterstat_${datetime}.log
####删除30天前的备份,并且做日志#####
find $masterbakdir -type f -ctime +30 -name "$database*" -exec rm -vf {} \; >> $mysql_backup/logs/free-${datetime}.log
find $mysql_backup/logs -type f -ctime +30 -name "free-*" -exec rm -vf {} \;
然后再crontab中添加定时,一般都是在没什么人使用时没有数据写入时,因为备份是要确保数据同步要加只读锁,比如每天凌晨4点:
00 04 * * * /usr/local/scripts/master_dbbak.sh
在这里要注意的是如果是需要备份整个库,势必就有备份到mysql库,那么mysqldump就要添加--events --ignore-table=mysql.event参数,用来忽略mysql.event这张表,不然mysqldump后就会有警告:
Warning: Skipping the data of table mysql.event. Specify the --events option explicitly
如果数据多时会增加不必要的系统开销,mysql.event表记录的是当前库中创建的事件,在mysql没有启用时,一般是空的。
这个是一个基础脚本,以后还可以在这个基础上在添加上备份失败发邮件等等。
本文永久更新链接地址:http://www.linuxidc.com/Linux/2017-02/140392.htm

MySQL自动备份可通用shell脚本

标签:备份脚本   explicit   www   war   linux   忽略   ==   mkdir   scripts   

原文地址:https://www.cnblogs.com/mylover2/p/11015895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!