阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL自动备份可通用shell脚本

216次阅读
没有评论

共计 1851 个字符,预计需要花费 5 分钟才能阅读完成。

最近在整理服务器的脚本,发现以前写的 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

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1851字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中