MySQL 可以通过 Shell 脚本配合
mysqldump命令实现自动化备份,核心是定时执行导出 + 压缩 + 清理旧备份三步操作。
基础备份脚本(单库 + 压缩)
以下是一个实用的备份脚本示例(保存为
backup_mysql.sh):
注意:需提前创建备份目录(如 /data/backup/mysql
),并赋予脚本可执行权限(chmod +x backup_mysql.sh
)
mysqldump导出指定数据库(含结构和数据),加上
--single-transaction保证 InnoDB 一致性 用
gzip实时压缩,节省空间 文件名包含日期(
YYYYMMDD_HHMMSS),便于识别和归档
脚本内容:
#!/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)
<p>mkdir -p $BACKUP_DIR
mysqldump -u$DB_USER -p$DB_PASS --single-transaction --routines --triggers $DB_NAME | gzip > $BACKUP_DIR/${DB<em>NAME}</em>$DATE.sql.gz
增强版:自动清理过期备份
生产环境建议保留最近 7 天备份,避免磁盘占满。在上述脚本末尾追加:
# 删除 7 天前的备份文件
find $BACKUP_DIR -name "${DB_NAME}_*.sql.gz" -mtime +7 -delete
说明:
-mtime +7表示修改时间超过 7 天的文件;若想按文件名中的日期判断(更精确),可用
awk或
date解析,但对大多数场景,
find -mtime已足够可靠。
定时执行:用 crontab 每天凌晨 2 点备份
运行
crontab -e,添加一行:
0 2 * * * /path/to/backup_mysql.sh >> /var/log/mysql_backup.log 2>&1
说明:
0 2 * * *表示每天 2:00 执行
>>将标准输出和错误日志追加到日志文件,方便排查失败原因(如密码错误、磁盘满、权限不足) 确保执行用户(如
root或
mysql)有读库权限和写入备份目录的权限
多库备份与配置分离(推荐进阶用法)
当需要备份多个库,或希望密码不硬编码在脚本中,可:
把数据库列表写入配置文件(如db_list.conf),每行一个库名 使用 MySQL 配置文件
~/.my.cnf存放认证信息(比明文密码更安全):
[client] user = root password = your_password
然后脚本中直接调用
mysqldump --defaults-file=~/.my.cnf ...,无需再传
-u -p。
不复杂但容易忽略
