My-定时备份服务器MySQL数据库

作者:Keysqiu
创建时间:2025-11-30 18:19:01 最后一次修改时间:2025-12-02 18:02:52
Categories: Tags:

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数据库定时备份