后台开发以及运维的同学,对于MySQL备份肯定不会陌生了,对于线上的数据库定时备份是必须要有的,而且这个过程一般都是自动的,本文将介绍一个shell脚本,它的功能是自动备份MySQL以及自动清除过期备份数据
备份脚本
下面就是自动备份 MySQL 的脚本的内容
#db用户名
dbuser=root
#db密码
dbpasswd="123456"
#ip地址
dbip=127.0.0.1
#备份的数据库名字前缀
pre_name="test"
#备份操作的日志文件
bakfile=/data/sqlbak/log.txt
#备份数据的目录
bakdatadir=/data/sqlbak/bakdata
#备份数据的目录-持久化备份
persist_path=/data/sqlbak/persistdata
#备份保存时间,单位: 天
dateoutday=15
#备份单个数据库
bak_single()
{
#db name
sdb=$1
#日期字符串
datestr=$2
echo "bak_single ${sdb}_${datestr}.sql.gz BEGIN..." >> ${bakfile}
#备份
mysqldump -u${dbuser} -h ${dbip} -p${dbpasswd} --single-transaction --no-create-db -R -C -B ${sdb} > ${sdb}_${datestr}.sql
#注释掉sql脚本中 USE DATABASE 语句
sed -i "s/USE/-- USE/" ${sdb}_${datestr}.sql
#压缩
gzip ${sdb}_${datestr}.sql
#记录日志
echo "bak_single ${sdb}_${datestr}.sql.gz COMPLETE..." >> ${bakfile}
}
#备份所有数据库
bak_all()
{
#日期字符串
all_datestr=$(date "+%Y_%m_%d_%H_%M_%S")
#
date_dir=$(date "+%Y%m%d")
#
echo "bak_all begin ${all_datestr} ====================" >> ${bakfile}
#所有的数据库
alldb=`mysql -u${dbuser} -h ${dbip} -p${dbpasswd} -e "show databases"`