pt-fk-error-logger
前言
pt-fk-error-logger,通过定时拉取和解析show engine innodb status相关信息,并将错误信息打印在屏幕 或 写到日志文件 或 写到表,从而实现将所有发生的违反外键约束错误都保存下来;该工具默认是永久运行的,除非设置了--run-time 或 --iterations选项。
基本用法
(1)基本语法
pt-fk-error-logger [OPTIONS] [DSN]
(2)常见选项
--host:-h,IP地址
--port:-P,端口
--socket:-S,套接字文件
--user:-u,用户名
--password:-p,密码
--charset:-A,字符集
--database:-D,数据库
--ask-pass:提示手动输入密码
--daemonize:后台运行
--dest:指定存储违反外键约束错误的表
--columns:违反外键约束错误存储表的列信息
--log:指定存储违反外键约束错误的日志文件
--run-time:运行时间,默认永久
--interval:运行间隔,默认30s
--iterations:运行次数,默认无限
(3)DSN选项
h:IP地址
P:端口
S:套接字文件
u:用户名
p:密码
A:字符集
D:数据库
t:表
场景模拟
(1)创建存储违反外键约束错误的库和表
mysql> show create database percona_schema\G
*************************** 1. row ***************************
Database: percona_schema
Create Database: CREATE DATABASE `percona_schema` /*!40100 DEFAULT CHARACTER SET utf8mb4 */
1 row in set (0.00 sec)
mysql> show create table foreign_key_errors\G
*************************** 1. row ***************************
Table: foreign_key_errors
Create Table: CREATE TABLE `foreign_key_errors` (
`ts` datetime NOT NULL,
`error` text NOT NULL,
PRIMARY KEY (`ts`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.01 sec)
(2)后台运行pt-fk-error-logger
$ pt-fk-error-logger h=10.1.4.9,P=10057,u=test,p=Test@2020 --dest h=10.1.4.9,P=10057,u=test,p=Test@2020,D=percona_schema,t=foreign_key_errors --daemonize
(3)创建测试表
mysql> show create table t1\G
*************************** 1. row ***************************
Table: t1
Create Table: CREATE TABLE `t1` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`k` int(10) unsigned NOT NULL DEFAULT '0',
`c` char(120) NOT NULL DEFAULT '',
`pad` char(60) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `k_2` (`k`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 MAX_ROWS=1000000
1 row in set (0.00 sec)
mysql> show create table t2\G
*************************** 1. row ***************************
Table: t2
Create Table: CREATE TABLE `t2` (
`id1` int(10) unsigned NOT NULL AUTO_INCREMENT,
`id2` int(10) unsigned NOT NULL,
PRIMARY KEY (`id1`),
KEY `id2` (`id2`),
CONSTRAINT `t2_ibfk_1` FOREIGN KEY (`id2`) REFERENCES `t1` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
1 row in set (0.00 sec