Skip to content

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。读取逗号分隔的配置文件列表;如指定必须放在命令行第一个选项的位置
--daemonizefork 到后台并与 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 部分说明
Acharset默认字符集
Ddatabase默认数据库
Fmysql_read_default_file只从给定文件读取默认选项
hhost要连接的主机
ppassword连接密码(含逗号需转义)
Pport连接端口
Smysql_socket连接使用的 socket 文件
t存储外键错误的表
uuser登录用户(若非当前用户)
smysql_ssl创建 SSL 连接

其他信息

  • 作者:Daniel Nichter

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

更多细节请阅读 官方文档

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