log-error を使用して、警告/エラーをファイルに書き込みます。INSERT IGNORE..SELECT ステートメントを実行すると、この警告メッセージが表示され続けます。
120905 3:01:23 [Warning] Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. INSERT IGNORE... SELECT is unsafe because the order in which rows are retrieved by the SELECT determines which (if any) rows are ignored. This order cannot be predicted and may differ on master and the slave.
mysql logwriter が上記のエラーを何度も書き続けるのを止めたいです。(ログファイル全体を埋めるため、他のログは表示されません...)
まず、(a, b, c) をテーブルに挿入します。c はテーブル内で一意である必要があり、a、b は選択に使用されます。クエリは次のようになります
SELECT c FROM table WHERE a=value1 AND value2<b AND b<value3
そして私の挿入クエリは
INSERT IGNORE INTO table VALUES (,,),(,,)...(,,)
警告が表示されないようにクエリを変更できると思っていましたが、データには一意のフィールドが含まれており、フィールドがテーブル内で一意であることを保証する必要があります。また、数秒ごとに 500 ~ 2000 行を挿入する必要があるため、一括挿入を行う必要があります。
すでに数十万行が挿入されている場合、数秒でさらに 2000 行を挿入する必要があります。ログファイルに警告を書き込まずにテーブルに安全に挿入するにはどうすればよいですか?
(mysql レプリケーションを使用する必要があるため、バイナリ ログをオフにすることはできません。)