贝利信息

mysql如何使用脚本实现备份_mysql自动化备份示例

日期:2026-01-17 00:00 / 作者:P粉602998670
MySQL自动化备份需定时执行导出、压缩、清理三步:用mysqldump加--single-transaction导出单库,gzip压缩并按日期命名文件;通过find -mtime +7清理7天前备份;crontab每天2点执行,日志记录便于排查;多库备份推荐配置分离,密码存于~/.my.cnf更安全。

MySQL 可以通过 Shell 脚本配合 mysqldump 命令实现自动化备份,核心是定时执行导出 + 压缩 + 清理旧备份三步操作。

基础备份脚本(单库 + 压缩)

以下是一个实用的备份脚本示例(保存为 backup_mysql.sh):

注意:需提前创建备份目录(如 /data/backup/mysql),并赋予脚本可执行权限(chmod +x backup_mysql.sh

脚本内容:

#!/bin/bash
DB_USER="root"
DB_PASS="your_password"
DB_NAME="myapp"
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d_%H%M%S)

mkdir -p $BACKUP_DIR mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers $DB_NAME | gzip > $BACKUP_DIR/${DBNAME}$DATE.sql.gz

增强版:自动清理过期备份

生产环境建议保留最近 7 天备份,避免磁盘占满。在上述脚本末尾追加

# 删除 7 天前的备份文件
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete

说明:-mtime +7 表示修改时间超过 7 天的文件;若想按文件名中的日期判断(更精确),可用 awkdate 解析,但对大多数场景,find -mtime 已足够可靠。

定时执行:用 crontab 每天凌晨 2 点备份

运行 crontab -e,添加一行:

0 2 * * * /path/to/backup_mysql.sh >> /var/log/mysql_backup.log 2>&1

说明:

多库备份与配置分离(推荐进阶用法)

当需要备份多个库,或希望密码不硬编码在脚本中,可:

[client]
user = root
password = your_password

然后脚本中直接调用 mysqldump --defaults-file=~/.my.cnf ...,无需再传 -u -p

不复杂但容易忽略