自动备份 mysql 数据库脚本

自动备份 mysql 数据库脚本

无咎 20 2025-09-12

在当前用户根目录下创建.my.cnf文件

  [client]
  user=数据库用户名
  password=数据库密码

进入数据库中,给该用户授予 PROCESS 权限(root也要这一步)

  GRANT PROCESS ON *.* TO '你的用户名'@'localhost';
  FLUSH PRIVILEGES;

进入想备份的服务器路径,创建备份脚 backup.sh并给予执行权限 chmod 777 backup.sh

  #!/bin/bash
  
  # 备份配置
  BACKUP_DIR="./"
  DATE=$(date +%Y%m%d_%H%M%S)
  LOG_FILE="./mysql_backup.log"
  
  # 创建备份目录
  #mkdir -p $BACKUP_DIR
  
  # 执行备份(使用--no-tablespaces)
  echo "$(date): 开始备份" >> $LOG_FILE
  mysqldump 你要备份的数据库名 > $BACKUP_DIR/你要备份的数据库名_$DATE.sql 2>> $LOG_FILE
  
  if [ $? -eq 0 ]; then
      # 压缩备份
      gzip $BACKUP_DIR/你要备份的数据库名_$DATE.sql
      echo "$(date): 备份成功" >> $LOG_FILE
  else
      echo "$(date): 备份失败" >> $LOG_FILE
      exit 1
  fi
  
  # 清理旧备份(保留7天)
  find $BACKUP_DIR -name "*.gz" -mtime +7 -delete

完成后可执行一次脚本查看运行是否正常

执行./backup.sh 若出现压缩文件和日志文件,且压缩文件大小在正常范围,则脚本可正常执行。

设置定时任务(Crontab)

执行 crontab -e ,添加以下命令至最后一行

  # 每周日凌晨3点备份
  0 3 * * 0 /bin/bash 你的backup.sh脚本绝对路径

至此,自动备份脚本结束,可等待第二天验证。