首先创建一个 sh 脚本文件并保存,比如保存到 /usr/local/sbin/autoback_mysql.sh
#!/bin/bash # 日期文件夹格式,比如:YYYYMMDD DATE=$(date +"%Y%m%d") # 备份文件保存目录 (记得创建这个目录) BACKUP_DIR="/backup/mysql" # MySQL 登陆信息 MYSQL_USER="root" MYSQL_PASSWORD="YOURSECUREPASSWORD" # MySQL 执行文件路径 (不需要更改) MYSQL=/usr/bin/mysql MYSQLDUMP=/usr/bin/mysqldump # MySQL 忽略备份的数据库 SKIPDATABASES="Database|information_schema|performance_schema|mysql" # 保存最近多少天内的备份 (超过天数的备份会被自动删除) RETENTION=14 # ---- 下面的代码请不要修改 ------------------------------------------ # # 创建按日期保存备份的文件夹 mkdir -p $BACKUP_DIR/$DATE # 获取所有数据库列表 databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"` # 存储数据库到文件,并使用 gzip 压缩 for db in $databases; do echo $db $MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz" done # 删除超过天数的备份文件夹 find $BACKUP_DIR/* -mtime +$RETENTION -exec rm {} \;
给 sh 脚本文件可运行权限
chmod 755 /usr/local/sbin/autoback_mysql.sh
创建一个计划任务,每天凌晨 1 点运行这个脚本
# 编辑 crontab 文件 nano /etc/crontab # 增加一行 0 1 * * * root /usr/local/sbin/autoback_mysql.sh
重启计划任务服务,让更改生效
service cron restart