目录
(三)按 “备份的内容范围” 分:完全备份、增量备份、日志备份
4. SELECT ... INTO OUTFILE:“单表数据导出”
如果把 MySQL 数据库比作我们的手机,那么 “备份” 就是 “手机数据的安全存档”,“复制” 就是 “多设备数据同步”—— 两者都是为了 “数据不丢、用着方便”。
一、备份分类:手机存档的 3 种 “操作姿势”
备份的核心是 “安全存数据”,但根据
- “手机是否在用”
- “存的是啥格式”
- “存多少内容”,分了不同类型,就像手机备份有不同方式:
(一)按 “备份时数据库是否运行” 分:热备、冷备、温备
对应手机 “备份时是否能正常使用”:
备份类型 | 手机场景类比 | MySQL 场景 | 核心特点 | 优缺点 |
---|---|---|---|---|
热备(Hot Backup) | 手机开机,用云同步备份照片(边刷手机边备份) | 数据库运行中,用 XtraBackup 备份 | 不影响业务(比如网站正常访问),备份时可读写 | 优点:不中断业务;缺点:占一定 CPU / 内存 |
冷备(Cold Backup) | 手机关机,用电脑复制手机存储文件(比如微信数据文件夹) | 数据库停止,复制数据文件(.ibd、ibdata1) | 简单直接,只复制物理文件 | 优点:操作简单、恢复快;缺点:需停服务(比如网站下线) |
温备(Warm Backup) | 备份时手机提示 “请勿操作”,只能看不能改(比如用软件备份时锁屏幕) | 数据库运行,但加全局读锁(FLUSH TABLES WITH READ LOCK ),只能读不能写 |
保证数据一致,但影响写操作 | 优点:数据一致;缺点:阻塞写业务(比如用户不能下单) |
(二)按 “备份文件的内容格式” 分:逻辑备份、裸文件备份
对应手机 “备份文件是否能直接看懂”:
备份类型 | 手机场景类比 | MySQL 场景 | 核心特点 | 优缺点 |
---|---|---|---|---|
逻辑备份 | 把手机联系人导出为 CSV 表格(用 Excel 能直接打开看) | 用 mysqldump 导出 SQL 文件,或SELECT...INTO OUTFILE 导出数据文件 |
文件可读(比如 SQL 文件能直接打开看语句),跨版本兼容 | 优点:可读、跨版本;缺点:恢复慢(需执行 SQL) |
裸文件备份 | 复制手机里的微信原始数据库文件(.db 格式,不能直接读) | 复制 InnoDB 的物理文件(.ibd、ib_logfile0),或用 XtraBackup 备份 | 备份 / 恢复速度快,直接操作物理文件 | 优点:恢复快;缺点:不可读、跨平台可能有问题(比如 Windows→Linux) |
(三)按 “备份的内容范围” 分:完全备份、增量备份、日志备份
对应手机 “备份时存多少数据”:
备份类型 | 手机场景类比 | MySQL 场景 | 核心特点 | 适用场景 |
---|---|---|---|---|
完全备份 | 把手机所有数据(照片、联系人、APP)都备份一遍 | 备份整个数据库的所有数据文件和日志 | 包含所有数据,恢复时不用依赖其他备份 | 每周一次全量备份,基础保障 |
增量备份 | 只备份上次备份后新增的照片(比如昨天备份后,今天只备今天拍的) | 用 XtraBackup 备份上次备份后新增的页(按 LSN 判断) | 只存增量数据,备份体积小、速度快 | 每天一次增量备份,减少全备压力 |
日志备份 | 备份手机的操作日志(比如什么时候拍了照、删了文件) | 备份二进制日志(binlog),记录所有修改操作 | 能恢复到 “某一个时间点”(比如恢复到昨天 18 点的数据) | 配合全备,实现 “Point-in-Time 恢复”(比如误删数据后恢复) |
二、备份工具:手机的 “专业备份软件”
MySQL 有不同的备份工具,就像手机有不同的备份 APP,各有侧重:
1. ibbackup:收费的 “专业云备份”
- 类比:手机的 “iCloud 高级会员”—— 收费,但功能强。
- MySQL 场景:InnoDB 官方热备工具,支持同时备份 InnoDB 和 MyISAM 表,备份时不阻塞任何 SQL 操作(真正热备),还支持压缩备份(比如把 10GB 数据压到 3GB)。
- 缺点:收费,性价比低,中小公司很少用。
2. XtraBackup:免费的 “全能备份软件”
- 类比:手机的 “百度云免费版”—— 免费,功能不输收费软件,还支持增量备份。
- MySQL 场景:Percona 公司开源工具,完全兼容 ibbackup 的功能,还新增了 “真正的增量备份”(按 LSN 对比,只备新增数据),支持 MySQL 5.0 + 版本,是中小公司的首选。
- 备份原理(以增量备份为例):
- 先做一次全备,记录下备份完成时的 LSN(比如 LSN=1000);
- 增量备份时,只备份 “页的 LSN>1000” 的部分(即上次备份后修改过的页);
- 恢复时,先恢复全备文件,再应用增量备份的 “修改页”,最后用 redo log 补全数据。
3. mysqldump:“导出表格式备份”
- 类比:手机 “导出联系人为 CSV 文件”—— 简单,文件可读。
- MySQL 场景:MySQL 自带的逻辑备份工具,导出的是 SQL 语句(比如
CREATE TABLE
+INSERT
),支持备份全库、指定库或表。 - 常用命令:
- 备份全库:
mysqldump --all-databases > all_db_backup.sql
(像导出手机所有联系人); - 备份指定库:
mysqldump --databases shop user > shop_user_backup.sql
(像只导出 “工作联系人” 和 “家庭联系人”)。
- 备份全库:
- 缺点:恢复慢(需执行所有 SQL 语句),不适合超大型数据库(比如 100GB 以上)。
4. SELECT ... INTO OUTFILE:“单表数据导出”
- 类比:手机 “只导出某一个相册的照片到电脑文件夹”—— 精准,只备单表数据。
- MySQL 场景:把一张表的数据导出为文本文件(比如 TXT/CSV),支持自定义格式(比如字段用逗号分隔,每行用换行结尾)。
- 示例:导出
shop
库goods
表的 “商品名、价格” 到文件:SELECT goods_name, price INTO OUTFILE '/tmp/goods_backup.csv' FIELDS TERMINATED BY ',' -- 字段用逗号分隔 LINES TERMINATED BY '\n' -- 每行用换行结尾 FROM shop.goods;
三、MySQL 复制:手机的 “多设备同步”
如果把主数据库(Master)比作 “主力手机”,从数据库(Slave)比作 “平板”,那么 “复制” 就是 “主力手机的照片、联系人自动同步到平板”—— 实现 “数据多份存、读写分开”(主力手机负责拍照 / 发消息,平板负责看照片 / 查联系人)。
1. 复制的核心原理:3 步同步 + 2 个线程
就像主力手机同步数据到平板,分 3 步,平板还得有两个 “专人” 负责:
(1)3 步同步流程(主力手机→平板)
步骤 | 手机场景 | MySQL 场景 |
---|---|---|
1 | 主力手机拍了一张照片,记录到 “拍照日志”(比如什么时候拍的、存哪里) | Master 执行INSERT /UPDATE 后,把操作记录到二进制日志(binlog) |
2 | 平板把主力手机的 “拍照日志” 复制到自己的 “临时日志” 里 | Slave 的 I/O 线程读取 Master 的 binlog,复制到自己的中继日志(relay log) |
3 | 平板按 “临时日志”,拍一张一模一样的照片 | Slave 的 SQL 线程读取 relay log,执行相同的 SQL 操作,同步数据 |
(2)Slave 的 2 个 “专人”(线程)
- I/O 线程:“日志接收员”—— 只负责从 Master 拿 binlog,存到 relay log,不做其他操作;
- SQL 线程:“数据同步员”—— 只负责读 relay log,执行 SQL 同步数据,不干扰 I/O 线程。
(3)查看复制状态
就像平板看 “同步进度”,用SHOW SLAVE STATUS
查看复制是否正常,关键看两个 “YES”:
Slave_IO_Running: Yes -- I/O线程正常运行(能拿到Master的binlog)
Slave_SQL_Running: Yes -- SQL线程正常运行(能执行relay log)
2. 复制的作用:解决 “高并发” 痛点
- 读写分离:Master 负责 “写操作”(比如用户下单、修改资料),Slave 负责 “读操作”(比如用户查商品、看订单),减轻 Master 压力;
- 数据备份:Slave 相当于 Master 的 “实时备份”,Master 宕机后,Slave 能立刻顶上;
- 负载均衡:多个 Slave 分担读压力(比如 1 个 Master+3 个 Slave,所有查操作分散到 3 个 Slave)。
四、总结:备份与复制的 “核心目标”
无论是备份(手机存档)还是复制(多设备同步),最终都是为了两个目标:
- 数据安全:备份防止 “误删、宕机丢数据”(比如手机丢了,有备份能恢复),复制实现 “数据多份存”(Master 坏了,Slave 能用);
- 业务高效:热备 / 增量备份不中断业务(手机边用边备),复制实现读写分离(主力手机写、平板读,不卡顿)。
理解这些类比后,就能根据实际场景选对备份方式(比如大库用 XtraBackup 热备,小库用 mysqldump),搭好复制架构(比如 1 主 2 从,读分散到从库),让 MySQL 既安全又高效。