shell脚本如下:(主要改的地方:第 2 、4、5、7、9、11、13**** 、14、16 行)
#用户名
mysql_user="root"
#密码
mysql_password="G#t9WhZr2@qL7BmPnXeD"
mysql_host="106.53.67.124"
#端口号
mysql_port="3306"
#将要备份的数据库
database_name="test"
#编码格式
mysql_charset="utf8mb4"
#docker中MySQL容器的别名
docker_mysql_name="mysql"
#保存备份文件最多个数
count=1
#备份保存路径
backup_path=/data/mysql/bakup
#日期
date_time=`date +%Y-%m-%d-%H-%M`
#如果文件夹不存在则创建
if [ ! -d $backup_path ];
then
mkdir -p $backup_path;
fi
#查看MySQL是否在运行
mysql_ps=`ps -ef |grep mysql |wc -l`
echo "查看MySQL是否在运行:$mysql_ps" >> $backup_path/dump.log
mysql_listen=`netstat -an |grep LISTEN |grep $mysql_port|wc -l`
if [ [$mysql_ps == 0] -o [$mysql_listen == 0] ]; then
echo "ERROR:MySQL is not running! backup stop!" >> $backup_path/dump.log
exit
else
echo "Welcome to use MySQL backup tools!" >> $backup_path/dump.log
echo "MySQL connect ok! Please wait......" >> $backup_path/dump.log
fi
#开始备份
echo "开始备份..." >> $backup_path/dump.log
docker exec $docker_mysql_name /usr/bin/mysqldump -h$mysql_host -P$mysql_port -u$mysql_user -p$mysql_password $database_name --default-character-set=$mysql_charset > $backup_path/$database_name-$date_time.sql
#开始压缩
cd $backup_path
tar -zcvf $database_name-$date_time.tar.gz $database_name-$date_time.sql
#更新备份日志
echo "压缩原文件 create $backup_path/$database_name-$date_time.tar.gz" >> $backup_path/dump.log
#删除源文件
rm -rf $backup_path/$database_name-$date_time.sql
echo "压缩后删除原文件 delete $backup_path/$database_name-$date_time.sql" >> $backup_path/dump.log
#找出需要删除的备份
delfile=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | head -1`
#判断现在的备份数量是否大于阈值
number=`ls -l -crt $backup_path/*.tar.gz | awk '{print $9 }' | wc -l`
if [ $number -gt $count ]
then
#删除最早生成的备份,只保留count数量的备份
rm $delfile
#更新删除文件日志
echo "$date 删除 $count 前的文件 delete $delfile" >> $backup_path/dump.log
fi
开启定时服务
crontab -e
# 在出来的编辑界面加入以下内容,然后保存退出即可
# 每 5 分钟执行一次
*/5 * * * * sh /data/mysql/dump_mysql.sh
# 每天凌晨 5 点执行
0 5 * * * sh /data/mysql/dump_mysql.sh
没有任何错误提示,则表示开启成功!出问题请参考MySQL数据库定时备份
