--slave-info
、--no-lock
和 --safe-slave-backup
参数详解
1. --slave-info
作用
- 记录从库的复制位置信息(master binary log 位置)
- 在备份目录中生成
xtrabackup_slave_info
文件
特点
- 轻量级:仅记录信息,不干预复制进程
- 无阻塞:不会停止SQL线程或IO线程
- 通用性:适用于主从架构中的从库备份
使用场景
- 当您需要知道备份对应的主库binlog位置时
- 用于建立新的从库或修复现有从库
示例输出
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000123', MASTER_LOG_POS=456789;
2. --no-lock
作用
- 完全禁用
FLUSH TABLES WITH READ LOCK
(FTWRL) - 仅备份InnoDB表数据文件
特点
- 无锁备份:不会阻塞读写操作
- 快速:避免了获取全局锁的开销
- 限制:非InnoDB表可能不一致
使用场景
- 纯InnoDB环境
- 不能接受锁表的生产环境
- 从库备份且可以容忍短暂复制延迟
3. --safe-slave-backup
作用
- 停止从库的SQL线程
- 等待所有正在执行的查询完成
- 执行备份
- 备份完成后恢复SQL线程
特点
- 强一致性:确保备份时没有复制变更
- 有阻塞:会短暂停止复制
- 依赖FTWRL:除非与
--no-lock
同时使用
使用场景
- 需要确保从库备份绝对一致的场景
- 不能容忍备份期间复制变更的情况
为什么推荐 --slave-info
+ --no-lock
而非 --safe-slave-backup
-
性能影响:
--safe-slave-backup
会停止SQL线程,导致复制延迟--slave-info
仅记录信息,不影响复制进程
-
锁定行为:
--safe-slave-backup
默认需要FTWRL,会阻塞写入--no-lock
完全避免锁表,适合生产环境
-
使用复杂度:
--safe-slave-backup
行为更复杂,可能引发意外问题--slave-info
更简单直接
-
适用性:
- 在大多数现代纯InnoDB环境中,
--slave-info
+--no-lock
已足够 --safe-slave-backup
更适合有MyISAM表的传统环境
- 在大多数现代纯InnoDB环境中,
参数组合建议
推荐组合(纯InnoDB从库)
xtrabackup --backup \
--slave-info \
--no-lock \
--target-dir=/path/to/backup
传统组合(含MyISAM表)
xtrabackup --backup \
--safe-slave-backup \
--ftwrl-wait-timeout=60 \
--target-dir=/path/to/backup
折中方案(Percona特有)
xtrabackup --backup \
--slave-info \
--lock-ddl \
--target-dir=/path/to/backup
总结
选择参数组合应根据您的具体需求:
- 追求性能和无阻塞:
--slave-info
+--no-lock
- 需要强一致性:
--safe-slave-backup
(接受性能影响) - 混合引擎环境:考虑使用默认的FTWRL方式或升级为纯InnoDB