MySQL备份与恢复策略
一、逻辑备份与恢复
(一)什么是数据库逻辑备份
数据库逻辑备份是备份软件按最初设计的逻辑关系,以数据库逻辑结构对象为单位,将数据按预定义逻辑关联格式生成文本文件,从而实现备份。
(二)常用的逻辑备份
逻辑备份是中小型系统常用方式,MySQL中主要有两种:
- 生成可重现数据的
INSERT语句; - 以特定分隔符将表数据记录在文本文件中。
(三)生成INSERT语句备份
通过MySQL自带的mysqldump工具实现,核心用法:
mysqldump [OPTIONS] --databases DB1[DB2 DB3...]
mysqldump [OPTIONS] --all-databases [OPTIONS]
mysqldump [OPTIONS] database [tables]
关键技巧与注意事项
- 保证数据一致性 :
- 事务支持引擎(如InnoDB):用
--single-transaction选项,备份在同一事务中,不影响服务; - 需锁定表场景:用
--lock-tables(单库表锁定)或--lock-all-tables(多库表锁定),备份期间仅允许读取。
- 事务支持引擎(如InnoDB):用
- binlog日志相关 :
--master-data[=value]选项,记录binlog日志名称和位置,便于Slave搭建或进一步恢复。 - 条件导出 :
-where='where-condition',仅导出单个表的特定数据。 - 结构/数据分离 :
--no-data仅导出表结构,--no-create-info去掉建表命令。
(四)生成特定格式的纯文本备份数据文件
1. SELECT ... TO OUTFILE 命令
语法示例:
sql
SELECT * INTO OUTFILE '/tmp/dump.text'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_outfile LIMIT 100;
关键参数:
FIELDS ESCAPED BY:字符转义;FIELDS [OPTIONALLY] ENCLOSED BY:字段内容包装(OPTIONALLY不包装数字类型);FIELDS TERMINATED BY:字段分隔符;LINES TERMINATED BY:记录结束符。
2. mysqldump导出纯文本
可同时生成数据文件和表结构脚本,示例:
bash
mysqldump -uroot -p test test_outfile --fields-enclosed-by=\" --fields-terminated-by=,
输出文件:test_outfile.txt(数据)和test_outfile.sql(表结构)。
(五)逻辑备份恢复方法
1. INSERT语句文件恢复
- 直接执行:
mysql < backup.sql; - 已连接数据库:
source path/backup.sql或. path/backup.sql。
2. 纯数据文本备份恢复
LOAD DATA INFILE命令;mysqlimport工具,支持批量恢复(可通过脚本自动化多表恢复)。
(六)逻辑备份的适用场景与局限
适用场景
- 恢复到备份时刻的完整/部分数据;
- 跨平台重建数据库;
- 特定数据迁移/同步;
- 部分数据恢复。
局限
- 无法恢复到备份时刻以外的任意时间点;
- 恢复速度较慢。
二、物理备份与恢复
(一)什么是数据库物理备份
对数据库的物理对象(物理数据文件、日志文件、配置文件等)进行备份,与存储引擎相关。
(二)MySQL物理备份所需文件
1. MyISAM存储引擎
- 核心文件:
.frm(表结构)、.MYD(表数据)、.MYI(索引数据); - 无独立日志文件,需备份上述文件及MySQL系统共有物理文件。
2. InnoDB存储引擎
依赖配置参数:innodb_data_home_dir、innodb_data_file_path、innodb_log_group_home_dir、innodb_file_per_table;
- 共享表空间:备份数据文件、
.frm文件、日志文件; - 独享表空间:额外备份
.ibd文件(表数据、索引、UNDO信息),共享表空间数据文件仍需备份(含元数据、REDO信息)。
3. NDB Cluster存储引擎
需备份文件:元数据文件、表数据文件、事务日志文件,及管理节点配置文件。
(三)各存储引擎常用物理备份方法
1. 冷备份(通用)
停掉数据库后,直接复制所有相关物理文件到备份位置。
2. 热备份(在线备份)
(1)MyISAM存储引擎
mysqlhotcopy工具(Perl编写):支持整库、单表、正则匹配表备份,原理是锁表→同步数据→复制文件;- 手工备份:
FLUSH TABLES WITH READ LOCK锁表→复制文件→UNLOCK TABLES解锁。
(2)InnoDB存储引擎
推荐使用商业软件ibbackup,支持在线备份InnoDB表。
(3)NDB Cluster存储引擎
在线备份步骤:
- 连接管理服务器;
- 执行
START BACKUP命令(生成唯一备份号); - 所有数据节点完成备份后,管理节点反馈结果。
中断备份:执行ABORT BACKUP backup_id(需指定备份号)。
(四)各存储引擎常用物理备份的恢复方法
1. MyISAM存储引擎
- 冷备份/锁表备份恢复:直接复制备份文件到对应目录,覆盖现有文件。
2. InnoDB存储引擎
- 冷备份恢复:复制备份文件到指定目录;
- 第三方工具备份:按工具手册操作(如
ibbackup备份需对应工具恢复)。
3. NDB Cluster存储引擎
- 冷备份恢复:将备份文件恢复到对应数据节点;
- 在线备份恢复:用
ndb_restore工具,按数据节点数量执行多次,首次恢复需重建数据库和表(恢复元数据)。
三、备份策略的设计思路
(一)核心在线应用系统
- 方案:在线备用主机+MySQL复制,复制线程常开启,恢复线程每日一次,备机数据延后主机1天左右;
- 优势:快速恢复,可直接切换备机提供服务。
(二)重要级别较低的应用
- 方案:定期物理全备份+每小时(或自定义周期)二进制日志备份;
- 优势:数据丢失少,节约硬件成本。
(三)无严格恢复时间要求但需少数据丢失
- 方案:定期逻辑全备份+二进制日志备份;
- 优势:实现简单,可在线完成,不影响服务。
(四)临时数据库场景
- 方案:单次逻辑全备份;
- 优势:满足临时使用需求,无需复杂配置。
需要我帮你将这份markdown文件导出为独立的.md文件,或者根据你的使用场景调整内容的详略程度吗?