製品&サポートサービス

pt-fk-error-logger

コマンド

pt-fk-error-logger [ オプション ] [ DSN ]

【必須項目】

  • ・ [ オプション ] : -p パスワード
  • ・ [ DSN ] : h=ホスト名, D=データベース名

【主なオプション】

  • ・ --dest : 検出したエラー情報を格納するテーブルを指定します(デフォルトでは標準出力となります)
  • ・ --run-time 数字 : 動作する期間を指定します(デフォルトでは Ctrl - C するまで動作し続けます)

目的

外部キー制約に関するエラー情報を標準出力します

設定ファイル

上記の必須項目を、設定ファイルにまとめておきます
ただし、DSNはコマンドライン上で直接指定する必要があるため、ここでは書きません

# touch /etc/percona-toolkit/pt-fk-error-logger.conf
# vi /etc/percona-toolkit/pt-fk-error-logger.conf

・設定ファイルの作成

# touch /etc/percona-toolkit/pt-fk-error-logger.conf

・設定ファイルの編集

# vi /etc/percona-toolkit/pt-fk-error-logger.conf
# config for pt-fk-error-logger
user=root
password=パスワード

・MySQL のユーザ名

user=root

・MySQL のパスワードを記載

password=パスワード

シナリオ

以下のような親テーブルを用意します

mysql> desc hoge;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| id         | int(11)      | NO   | PRI | NULL    | auto_increment |
| title      | varchar(255) | YES  |     | NULL    |                |
| body       | text         | YES  |     | NULL    |                |
| created_at | datetime     | YES  |     | NULL    |                |
| updated_at | datetime     | YES  |     | NULL    |                |
| test       | int(11)      | YES  |     | NULL    |                |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)
mysql>

外部キーをつけるために titleカラムにインデックスを作成します

mysql> CREATE INDEX idx_title ON hoge(title);

以下のCREATE文を実行し、子テーブルを作成します

mysql> CREATE TABLE hogehoge (id int(11) AUTO_INCREMENT, title varchar(255),
    -> created_at datetime, updated_at datetime, PRIMARY KEY(id),
    -> FOREIGN KEY(title) REFERENCES hoge(title) ) ENGINE=InnoDB;
Query OK, 0 rows affected (0.14 sec)

pt-fk-error-loggerコマンドを実行します

# pt-fk-error-logger D=test

以下のSQL文を実行し、外部キー制約エラーを発生させます

mysql> INSERT INTO hoge (title) VALUE ( "First" );
mysql> INSERT INTO hogehoge (title) VALUE ( "Second" );

結果

外部キー制約に関するエラーが標準出力されます

[Et@localhost ~]$ sudo pt-fk-error-logger D=test
2017-04-04 07:47:17 7f9aeabe1700 Transaction:
TRANSACTION 310550, ACTIVE 0 sec inserting
mysql tables in use 1, locked 1
3 lock struct(s), heap size 1184, 1 row lock(s), undo log entries 1
MySQL thread id 2, OS thread handle 0x7f9aeabe1700, query id 27 localhost root update
INSERT INTO hogehoge(title) VALUE (""Second"")
Foreign key constraint fails for table `test`.`hogehoge`:
,
  CONSTRAINT `hogehoge_ibfk_1` FOREIGN KEY (`title`) REFERENCES `hoge` (`title`)
Trying to add in child table, in index `title` tuple:
DATA TUPLE: 2 fields;
 0: len 6; hex 5365636f6e64; asc Second;;
 1: len 4; hex 80000001; asc     ;;

But in parent table `test`.`hoge`, in index `idx_title`,
the closest match we can find is record:
PHYSICAL RECORD: n_fields 2; compact format; info bits 0
 0: len 7; hex 7469746c655f31; asc title_1;;
 1: len 4; hex 80000001; asc     ;;

良い点

外部キー制約に関するエラーを監視することが出来ます

その他

標準出力の場合、最新のエラーを1件しか表示することが出来ません
そのため、エラー情報を保持するためには出力内容をMySQL内のテーブルに格納する必要があります

以下のようなテーブルを作成します

mysql> CREATE TABLE foreign_key_errors (ts datetime NOT NULL,
              error text NOT NULL, PRIMARY KEY (ts));

以下のコマンドを実行すると、エラー情報が foreign_key_errors テーブルに書き込まれます

# pt-fk-error-logger h=localhost --dest h=localhost,D=blog_test,t=foreign_key_errors

MySQLや関連ソリューションに関するお問い合わせ、お見積などがございましたら、ご連絡ください。

お問い合わせ各MySQL保守サービス見積依頼スマートスタイルOSSストア
各データベース保守サービス比較
各データベース保守サービス見積依頼
契約条項
データベースサポートサービス
MySQL Editions
Oracle Cloud
Percona
MariaDBサブスクリプション
エンタープライズOSSサポート
高可用性ソリューション
OSSシステムソリューション
Navicat
SQL Diagnostic Manager for MySQL
SYNCNEL
OSS保守サポートサービス
Microsoft Azure
お問い合わせ
各MySQL保守サービス見積依頼
スマートスタイルOSSストア
Oracle Gold Partner

ページトップへ