MySQL 自动备份脚本详解
MySQL 备份是保障数据安全的核心手段,mysqldump 工具结合 shell 脚本可实现自动化备份,避免人工操作的疏漏。本文详细解析备份原理、脚本及还原方法,帮助构建可靠的备份策略。
mysqldump 核心参数解析
mysqldump 是 MySQL 官方备份工具,支持全库、单库、单表备份,核心参数如下:
| 参数 | 作用说明 |
|---|---|
-u <user> |
指定数据库用户名。 |
-p <password> |
指定用户密码(不建议明文写在命令中,可省略让系统交互输入)。 |
-h <host> |
数据库主机地址(默认 localhost)。 |
--default-character-set=utf8 |
指定字符集(避免中文乱码)。 |
--databases <db1 db2> |
备份多个数据库(需列出数据库名)。 |
--all-databases |
备份所有数据库(包括系统库如 mysql)。 |
--ignore-table=<db.table> |
排除指定表(如 --ignore-table=mysql.events)。 |
--lock-all-tables |
备份前锁定所有表(读锁),确保数据一致性(会阻塞写操作,适合停机备份)。 |
--single-transaction |
对 InnoDB 表开启事务备份(不锁表,适合在线备份,保证一致性读)。 |
--opt |
启用优化选项(默认开启),包括 --add-drop-table、--add-locks 等。 |
关键参数对比(锁表策略):
| 场景 | 推荐参数 | 优点 | 缺点 |
|---|---|---|---|
| 在线业务(不停机) | --single-transaction |
不阻塞写操作,适合生产环境 | 仅支持 InnoDB 表,MyISAM 仍会锁表 |
| 停机维护 | --lock-all-tables |
支持所有存储引擎,数据绝对一致 | 锁表期间阻塞所有写操作,影响业务 |
自动备份脚本
解决密码明文、日志记录、过期清理等问题:
1 |
|
说明:
密码安全:不直接写明文密码,可通过
~/.my.cnf配置文件存储(推荐):1
2
3
4# ~/.my.cnf 内容
[mysqldump]
user=root
password=你的密码脚本中可省略
-p参数,自动读取配置。过期清理:添加
find命令删除超期备份(-mtime +7表示删除 7 天前的文件),避免磁盘占满。日志细化:每个备份生成独立日志,记录备份时间、文件名及结果,便于排查问题。
可选单独备份:保留业务库单独备份的模板(注释部分),适合需要区分系统库和业务库的场景。
脚本使用与自动化
脚本权限配置
1 | # 赋予执行权限 |
定时任务(crontab)
通过 crontab 实现每日自动备份(如每天凌晨 2 点执行):
1 | # 编辑定时任务 |
0 2 * * *表示 “每天凌晨 2 点” 执行(分钟 小时 日 月 周)。- 可通过
tail -f /var/log/cron查看定时任务执行日志。
数据还原方法
备份文件为 *.sql.gz(压缩)或 *.sql(未压缩),还原步骤如下:
压缩文件还原(.sql.gz)
1 | # 解压并还原到数据库(需先创建目标数据库,若备份包含建库语句可省略) |
未压缩文件还原(.sql)
1 | # 直接还原 |
还原注意事项:
- 还原前建议停止业务写入(避免数据冲突)。
- 若备份包含
DROP TABLE语句,还原会删除现有表,需提前确认。 - 大文件还原可添加
--force参数忽略错误(mysql --force -u root -p < backup.sql)。
备份策略建议
- 备份频率:
- 核心业务库:每日全量备份 + 每小时增量备份(结合
binlog)。 - 非核心库:每日全量备份。
- 核心业务库:每日全量备份 + 每小时增量备份(结合
- 存储安全:
- 备份文件异地存储(如 FTP 服务器、云存储),避免本地磁盘损坏丢失。
- 定期校验备份文件完整性(如用
gunzip -t检查压缩文件)。
- 应急演练:
- 每月至少一次还原测试,确保备份可用(避免 “备份成功但无法还原” 的情况)