一、使用场景
公司数据库备份,适用于mysql5.6、mysql5.7
二、代码解析
- 获取到数据库列表
#获取数据库名 dbname=`mysql -u${dbuser} -p${dbpasswd} -e "show databases;" |egrep -v "Database|sys|information_schema|mysql|performance_schema"`
- 备份数据库
mysqldump -u${dbuser} -p${dbpasswd} -F -B $db --master-data={1,2} --single-transaction |gzip> ${logpath}/${db}${backtime}.sql.gz 2>> ${logpath}/mysqllog.log
- 删除历史备份
find $datapath -name "*.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
三、代码
#!/bin/bash
#功能:数据库备份
#yousong.xiang
#v1.0.2
. /etc/profile
#数据库用户名
##GRANT SELECT, RELOAD, SUPER, LOCK TABLES ON *.* TO 'mysqldumper'@'localhost' identified by 're8Z3db57dltINJdWF5e&2fMu';
##flush privileges ;
dbuser='mysqldumper'
#数据库用密码
dbpasswd='123456'
#备份时间
backtime=`date '+%Y%m%d%H%M%S'`
t_time=`date '+%Y-%m-%d %H:%M:%S'`
#日志备份路径
logpath='/data/mysqlbakup'
#数据备份路径
datapath='/data/mysqlbakup'
if [ ! -d ${datapath} ];then
mkdir ${datapath} -p
fi
#日志记录头部
echo "备份时间为${t_time},备份数据库表 ${dbname} 开始" >> ${logpath}/log.log
#获取数据库名
dbname=`mysql -u${dbuser} -p${dbpasswd} -e "show databases;" |egrep -v "Database|sys|information_schema|mysql|performance_schema"`
#正式备份数据库
for db in $dbname; do
mysqldump -u${dbuser} -p${dbpasswd} -F -B $db --master-data={1,2} --single-transaction |gzip> ${logpath}/${db}${backtime}.sql.gz 2>> ${logpath}/mysqllog.log
#备份成功以下操作
if [ "$?" == 0 ];then
cd $datapath
#删除15天前备份,也就是只保存7天内的备份
find $datapath -name "*.gz" -type f -mtime +15 -exec rm -rf {} \; > /dev/null 2>&1
echo "${t_time} 数据库 ${db} 备份成功!!" >> ${logpath}/mysqllog.log
else
#备份失败则进行以下操作
echo "${t_time} 数据库 ${db} 备份失败!!" >> ${logpath}/mysqllog.log
fi
done
留言