pt-slave-delay
通过按需启停从库的复制 SQL 线程,让从库落后主库指定的时间。
已废弃
该工具已废弃,将在未来版本中移除,且不支持 MySQL 8.1 及更新版本。 请改用 MySQL 内置的延迟复制(Delayed Replication): https://dev.mysql.com/doc/refman/en/replication-delayed.html
语法
pt-slave-delay [OPTIONS] SLAVE_DSN [MASTER_DSN]让 slavehost 落后主库 1 分钟,运行 10 分钟后退出:
pt-slave-delay --delay 1m --interval 15s --run-time 10m slavehost用法示例
以下命令假定已通过选项文件或本机 socket 配置好 MySQL 连接;从库主机用 DSN(如 h=从库主机,不写明文密码)指定。本工具通过启停从库 SQL 线程制造延迟,需要 SUPER/REPLICATION CLIENT 权限,且已废弃(MySQL 8.1+ 请用内置延迟复制)。
场景:让从库常驻落后 1 小时
默认 --delay 1h,加 --daemonize 后台常驻,使从库始终落后主库约 1 小时,作为误删数据的快速回滚点:
pt-slave-delay --daemonize slavehost场景:临时演练延迟复制
让从库落后主库 1 分钟、运行 10 分钟后退出(退出时会自动追平):
pt-slave-delay --delay 1m --interval 15s --run-time 10m slavehost场景:用主库位置精确控延迟
IO 线程滞后较大、想以主库 binlog 位置为准时加 --use-master;若需 --daemonize,务必显式带上它,否则可能中途索要密码而退出:
pt-slave-delay --delay 30m --use-master --daemonize slavehost场景:退出后保持停在当前延迟
默认退出会恢复正常复制、让从库追平主库;用 --no-continue 让其停在当下延迟状态,便于人工核对后再手动处理:
pt-slave-delay --delay 1h --no-continue slavehost功能说明
pt-slave-delay 监视从库,并按需启动/停止其复制 SQL 线程,使从库至少落后主库你要求的时长。 实际效果通常是在 --delay 与 --delay + --interval 之间波动。
默认基于从库中继日志(relay log)中的 binlog 位置计算延迟,因此无需连接主库。 这在 IO 线程滞后很小的典型复制场景下工作良好(快速网络上 IO 线程延迟通常只有几毫秒)。 如果 IO 线程延迟过大,也可以让工具连接主库获取 binlog 位置(--use-master)。
当从库的 I/O 线程报告正在等待 SQL 线程释放中继日志空间时,工具会自动连接主库查找 binlog 位置。 若同时指定了 --ask-pass 和 --daemonize,此时可能因要询问密码而直接退出。 因此如遇到这种情况,daemonize 时应显式指定 --use-master,或不使用 --ask-pass。
SLAVE_DSN 与可选的 MASTER_DSN 都是 DSN;MASTER_DSN 中缺失的值会从 SLAVE_DSN 补齐。 工具会读取常规的 MySQL 选项文件(如 ~/.my.cnf),因此通常无需在命令行指定用户名密码等。
工具会捕获 Ctrl-C 等信号并优雅退出;无法用可捕获信号绕过 --[no]continue。
权限
需要 PROCESS、REPLICATION CLIENT、SUPER 权限。
输出
指定 --quiet 时无输出。否则输出状态信息(时间戳 + 工具正在做什么:启动从库、停止从库或仅观察)。
选项
| 选项 | 说明 |
|---|---|
--ask-pass | 连接 MySQL 时交互式询问密码 |
-A, --charset | 类型:string。默认字符集(utf8 时设置 binmode/mysql_enable_utf8 并执行 SET NAMES UTF8) |
--config | 类型:Array。读取逗号分隔的配置文件列表;如指定必须放在命令行第一个选项的位置 |
--[no]continue | 默认:yes。退出时恢复正常复制:不带 UNTIL 条件重启从库 SQL 线程,使其照常追赶主库;即使 Ctrl-C 终止也生效 |
--daemonize | fork 到后台并与 shell 脱离,仅限 POSIX 系统 |
-D, --database | 类型:string。连接使用的数据库 |
-F, --defaults-file | 类型:string。只从给定文件读取 mysql 选项,必须给绝对路径 |
--delay | 类型:time;默认:1h。从库应落后主库的时长 |
--help | 显示帮助并退出 |
-h, --host | 类型:string。要连接的主机 |
--interval | 类型:time;默认:1m。检查是否需要启停从库的频率 |
--log | 类型:string。daemonize 时把全部输出打印到该文件 |
-p, --password | 类型:string。连接密码(含逗号需转义) |
--pid | 类型:string。创建指定的 PID 文件;冲突规则与自动清理见官方文档 |
-P, --port | 类型:int。连接端口 |
-q, --quiet | 不打印操作信息 |
--run-time | 类型:time。运行多久后退出;默认永远运行 |
--set-vars | 类型:Array。以逗号分隔的 变量=值 列表设置 MySQL 变量;默认 wait_timeout=10000 |
-S, --socket | 类型:string。连接使用的 socket 文件 |
--use-master | 从主库而非从库获取 binlog 位置(不信任从库中继日志中的位置)。未给 MASTER_DSN 时,会检查从库的 SHOW SLAVE STATUS 得到主库主机与端口;只使用 MASTER_HOST 和 MASTER_PORT,不使用 MASTER_USER,需要不同用户名时应显式给 MASTER_DSN |
-u, --user | 类型:string。登录用户(若非当前用户) |
--version | 显示版本并退出 |
--[no]version-check | 默认:yes。检查 Percona Toolkit、MySQL 等软件的最新版本与已知问题版本(详见版本检查) |
DSN 选项
| 键 | DSN 部分 | 说明 |
|---|---|---|
A | charset | 默认字符集 |
D | database | 默认数据库 |
F | mysql_read_default_file | 只从给定文件读取默认选项 |
h | host | 要连接的主机 |
p | password | 连接密码(含逗号需转义) |
P | port | 连接端口 |
S | mysql_socket | 连接使用的 socket 文件 |
u | user | 登录用户(若非当前用户) |
其他信息
作者:Sergey Zhuravlev 和 Baron Schwartz
通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。