Skip to content

pt-slave-delay

通过按需启停从库的复制 SQL 线程,让从库落后主库指定的时间。

已废弃

该工具已废弃,将在未来版本中移除,且不支持 MySQL 8.1 及更新版本。 请改用 MySQL 内置的延迟复制(Delayed Replication): https://dev.mysql.com/doc/refman/en/replication-delayed.html

语法

bash
pt-slave-delay [OPTIONS] SLAVE_DSN [MASTER_DSN]

让 slavehost 落后主库 1 分钟,运行 10 分钟后退出:

bash
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 小时,作为误删数据的快速回滚点:

bash
pt-slave-delay --daemonize slavehost

场景:临时演练延迟复制

让从库落后主库 1 分钟、运行 10 分钟后退出(退出时会自动追平):

bash
pt-slave-delay --delay 1m --interval 15s --run-time 10m slavehost

场景:用主库位置精确控延迟

IO 线程滞后较大、想以主库 binlog 位置为准时加 --use-master;若需 --daemonize,务必显式带上它,否则可能中途索要密码而退出:

bash
pt-slave-delay --delay 30m --use-master --daemonize slavehost

场景:退出后保持停在当前延迟

默认退出会恢复正常复制、让从库追平主库;用 --no-continue 让其停在当下延迟状态,便于人工核对后再手动处理:

bash
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

权限

需要 PROCESSREPLICATION CLIENTSUPER 权限。

输出

指定 --quiet 时无输出。否则输出状态信息(时间戳 + 工具正在做什么:启动从库、停止从库或仅观察)。

选项

选项说明
--ask-pass连接 MySQL 时交互式询问密码
-A, --charset类型:string。默认字符集(utf8 时设置 binmode/mysql_enable_utf8 并执行 SET NAMES UTF8
--config类型:Array。读取逗号分隔的配置文件列表;如指定必须放在命令行第一个选项的位置
--[no]continue默认:yes。退出时恢复正常复制:不带 UNTIL 条件重启从库 SQL 线程,使其照常追赶主库;即使 Ctrl-C 终止也生效
--daemonizefork 到后台并与 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 部分说明
Acharset默认字符集
Ddatabase默认数据库
Fmysql_read_default_file只从给定文件读取默认选项
hhost要连接的主机
ppassword连接密码(含逗号需转义)
Pport连接端口
Smysql_socket连接使用的 socket 文件
uuser登录用户(若非当前用户)

其他信息

  • 作者:Sergey Zhuravlev 和 Baron Schwartz

  • 通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明

更多细节请阅读 官方文档

Percona Toolkit 中文文档 · 社区维护的第三方学习站