MySQL 备份与恢复:mysqldump 实战指南
前言
数据库备份是生产环境的生命线。很多人没出事的时候不备份,出事了才后悔。本文讲清楚 MySQL 最常用的备份工具 mysqldump。
一、为什么要备份
- 误操作:手滑删了表、删了数据
- 服务器挂了:硬盘坏了、机器报废
- 被攻击: ransomware 加密了数据库
- 升级失败:新版本不兼容,数据回退
记住:没有备份的数据库,就是在裸奔。
二、mysqldump 是什么
mysqldump 是 MySQL 自带的逻辑备份工具,把数据导出成 SQL 文件。
优点:简单、通用、跨版本
缺点:大数据量慢
适合:中小数据库(< 50G)
三、备份数据库
1. 备份整个数据库
mysqldump -u root -p 数据库名 > backup.sql
输入密码后,就会生成 backup.sql 文件。
2. 备份所有数据库
mysqldump -u root -p --all-databases > all_backup.sql
3. 备份单个表
mysqldump -u root -p 数据库名 表名 > table_backup.sql
4. 备份多个表
mysqldump -u root -p 数据库名 表1 表2 > multi_backup.sql
四、恢复数据库
1. 恢复整个数据库
mysql -u root -p 数据库名 < backup.sql
注意:数据库要先存在。
CREATE DATABASE 数据库名;
2. 恢复所有数据库
mysql -u root -p < all_backup.sql
五、常用参数
--single-transaction
InnoDB 引擎下,保证备份一致性,不锁表:
mysqldump -u root -p --single-transaction 数据库名 > backup.sql
生产环境一定要加这个!
--routines
备份存储过程和函数:
mysqldump -u root -p --routines 数据库名 > backup.sql
--triggers
备份触发器:
mysqldump -u root -p --triggers 数据库名 > backup.sql
--events
备份事件调度器:
mysqldump -u root -p --events 数据库名 > backup.sql
--no-data
只备份表结构,不备份数据:
mysqldump -u root -p --no-data 数据库名 > schema.sql
--where
按条件备份:
mysqldump -u root -p 数据库名 表名 --where="id > 100" > partial.sql
六、完整备份命令
生产环境推荐用这个:
mysqldump -u root -p \
--single-transaction \
--routines \
--triggers \
--events \
--default-character-set=utf8mb4 \
数据库名 > backup.sql
七、压缩备份
备份文件太大?压缩一下:
# 备份并压缩
mysqldump -u root -p 数据库名 | gzip > backup.sql.gz
# 解压并恢复
gunzip < backup.sql.gz | mysql -u root -p 数据库名
八、定时备份
写个脚本每天自动备份:
#!/bin/bash
# 备份目录
BACKUP_DIR="/data/backup/mysql"
DATE=$(date +%Y%m%d)
# 备份
mysqldump -u root -p密码 --single-transaction 数据库名 | gzip > $BACKUP_DIR/db_$DATE.sql.gz
# 删除 7 天前的备份
find $BACKUP_DIR -name "db_*.sql.gz" -mtime +7 -delete
加到 crontab:
# 每天凌晨 2 点备份
0 2 * * * /bin/bash /path/to/backup.sh
九、常见坑
- 备份不锁表:大表备份会锁表,一定要加 --single-transaction
- 字符集不对:备份文件乱码,加 --default-character-set=utf8mb4
- 没备份存储过程:导出后丢了,加 --routines
- 备份没验证:备份完一定要试恢复,不然真出事的时候哭都来不及
十、备份策略
- 每天全量备份:小数据库
- 每周全量 + 每天增量:大数据库
- 异地备份:备份文件要存到别的服务器
- 定期演练恢复:每个月测一次能不能恢复
总结
MySQL 备份的核心要点:
- mysqldump 是最常用的备份工具
- 生产环境加 --single-transaction,不锁表
- 备份要压缩,节省空间
- 定时备份,自动删除旧备份
- 备份一定要验证,能恢复才算备份成功
数据是公司最值钱的资产,备份这事儿千万别偷懒。