mariadb の操作で発生したワーニングを確認するコマンドは以下の通りだが、
デフォルト ( ver15.1 ) では 64行分のワーニングしか出力することができない。
> show warnings;
例えば、「 LOAD DATA LOCAL INFILE 」などで大量のデータをインポートしようとした際に
大量のワーニングが発生すると出力しきれない。
さらに、show warnings コマンドは、直前のコマンド実行時に発生したワーニングを
表示するだけなので、別のコマンド操作を実行してしまうと、
改めて show warnings コマンドを実行しても同じ内容を見ることはできない。
そこで、show warnings コマンドの実行結果をファイル出力する方法はないか、
調べてみてもすぐには見つからなかったので、思い付いたのが以下の方法。
まずは、デフォルトで 64行しか表示できない設定を変更する。
/etc/my.cnf.d/mariadb-server.cnf の中の [mysqld] の所に max_error_count=100000 を追記
mariadb を再起動して反映。
# systemctl restart mariadb.service
これで show warning コマンドで 10万行のワーニングを出力することができるようになった。
これだけでは、大量のワーニングがコンソールに出力されるだけなので、
コンソール出力をファイル出力する tee コマンドと組み合わせて使用する。
tee コマンドは、カレントディレクトリにファイルが作成される。
> use testdb; [testdb]> tee warning.txt Logging to file 'warning.txt' [testdb]> LOAD DATA LOCAL INFILE '/tmp/test.txt' INTO TABLE test_tbl fields terminated by '\t' optionally enclosed by '"' escaped by '\\' lines terminated by '\r\n'; Query OK, 3 rows affected, 3 warnings (0.001 sec) Records: 3 Deleted: 0 Skipped: 0 Warnings: 3 [testdb]> show warnings; +---------+------+--------------------------------------------+ | Level | Code | Message | +---------+------+--------------------------------------------+ | Warning | 1261 | Row 1 doesn't contain data for all columns | | Warning | 1261 | Row 2 doesn't contain data for all columns | | Warning | 1261 | Row 3 doesn't contain data for all columns | +---------+------+--------------------------------------------+ 3 rows in set (0.000 sec) [testdb]> notee
これで、show warnings コマンドの出力結果を含んで warning.txt に記録されている。
ちなみに、show warnings コマンドの最大は 65535行のようです。
試しに、max_error_count に 1000000 を指定しても 65535行分しか出力できませんでした。