pt-fk-error-logger
记录 MySQL 外键错误(foreign key errors)——打印到 STDOUT 或保存到表中。
语法
bash
pt-fk-error-logger [OPTIONS] [DSN]bash
# 打印 host1 上的外键错误
pt-fk-error-logger h=host1
# 打印一次后退出
pt-fk-error-logger h=host1 --iterations 1
# 把 host1 的外键错误保存到 host2 的 percona_schema.fke 表
pt-fk-error-logger h=host1 --dest h=host2,D=percona_schema,t=fke用法示例
以下命令假定已通过 /etc/my.cnf、~/.my.cnf 或本机 socket 配置好 MySQL 连接;需用 DSN 显式指定连接时加 h=主机,P=端口,u=用户 或 F=/path/my.cnf(DSN 中不写明文密码)。命令可直接复制,替换其中的主机与库表名即可。
场景:实时查看外键错误
应用报外键冲突、想在终端立刻看到 SHOW ENGINE INNODB STATUS 里的错误文本时,前台运行(默认每 30 秒轮询,Ctrl-C 终止):
bash
pt-fk-error-logger h=localhost场景:只抓一次就退出
做一次快照式检查、确认当前是否还有未处理的外键错误后退出:
bash
pt-fk-error-logger h=localhost --iterations 1场景:落库长期留存
把外键错误存进表方便检索(注意 --dest 指定的表须提前按官方建议结构建好,本工具不会自动建表):
bash
pt-fk-error-logger h=localhost --dest D=percona_schema,t=fke场景:后台守护持续监控
需要长期盯外键错误,丢到后台、缩小轮询间隔并落日志:
bash
pt-fk-error-logger h=localhost \
--daemonize --log /tmp/fke.log --interval 60s功能说明
pt-fk-error-logger 打印或保存 SHOW INNODB STATUS 中的外键错误文本。 错误不会被解析或解释;外键错误以其时间戳唯一标识,只打印/保存新的(更新的)错误。
默认永远运行,每 --interval 秒检查一次新错误。可用 --run-time 和/或 --iterations 限制运行时长。
输出
SHOW ENGINE INNODB STATUS 中的外键错误文本打印到 STDOUT(--quiet 时不打印); 错误与警告打印到 STDERR。
选项
| 选项 | 说明 |
|---|---|
--ask-pass | 连接 MySQL 时交互式询问密码 |
--[no]buffer-stdout | 默认开启 STDOUT 缓冲;使用 tee、kubectl logs 等后处理工具想看到实时进度时可关闭 |
-A, --charset | 类型:string。默认字符集(utf8 时设置 binmode/mysql_enable_utf8 并执行 SET NAMES UTF8) |
--config | 类型:Array。读取逗号分隔的配置文件列表;如指定必须放在命令行第一个选项的位置 |
--daemonize | fork 到后台并与 shell 脱离,仅限 POSIX 系统 |
-D, --database | 类型:string。连接的数据库 |
-F, --defaults-file | 类型:string。只从给定文件读取 mysql 选项,必须给绝对路径 |
--dest | 类型:DSN。把外键错误保存到该表;DSN 必须指定数据库(D)和表(t)。缺失的 DSN 值从被监控的 DSN 继承(同一主机保存时可省略大部分值)。建议表结构:CREATE TABLE foreign_key_errors (ts datetime NOT NULL, error text NOT NULL, PRIMARY KEY (ts));只保存时间戳与错误文本 |
--help | 显示帮助并退出 |
-h, --host | 类型:string。要连接的主机 |
--interval | 类型:time;默认:30。检查外键错误的间隔 |
--iterations | 类型:int。检查次数;默认无限。--run-time 到期总是退出(即使 iterations 未到) |
--log | 类型:string。daemonize 时把全部输出打印到该文件 |
-s, --mysql_ssl | 类型:int。创建 SSL MySQL 连接 |
-p, --password | 类型:string。连接密码(含逗号需转义) |
--pid | 类型:string。创建指定的 PID 文件;冲突规则与自动清理见官方文档 |
-P, --port | 类型:int。连接端口 |
--quiet | 不打印外键错误,只向 STDERR 打印错误与警告 |
--run-time | 类型:time。运行多久后退出;默认永远运行 |
--set-vars | 类型:Array。以逗号分隔的 变量=值 列表设置 MySQL 变量;默认 wait_timeout=10000;无法设置时打印警告并继续 |
-S, --socket | 类型:string。连接使用的 socket 文件 |
-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 文件 |
t | — | 存储外键错误的表 |
u | user | 登录用户(若非当前用户) |
s | mysql_ssl | 创建 SSL 连接 |
其他信息
作者:Daniel Nichter
通用说明:已知问题的反馈方式、PTDEBUG 调试安全提示、系统要求基线,见 通用说明。
更多细节请阅读 官方文档。