私は多数のベンダーがデータを送信している (または通知を読んでいる) e コマース サイトで作業しており、それぞれの最後の接続の時間を保持する必要があります。ベンダー テーブルの更新が不適切な方法 (パフォーマンスの悪い非常に多数の更新) として示されたので、各ベンダーの最終接続時間を格納するメモリ テーブルを作成しました。その時間は、1 分間に 1 回または 2 回更新されます。更新には、次のクエリを使用します。
UPDATE vendors NATURAL JOIN tmp_vendors SET vendors.last_conn_time = tmp_vendors.last_conn_time
私が mysqld.log で取得し続けるのは次のとおりです。
[警告] BINLOG_FORMAT = STATEMENT であるため、ステートメント形式を使用してバイナリ ログに安全でないステートメントが書き込まれました。別のテーブルから選択した後に自動インクリメント列を含むテーブルに書き込むステートメントは安全ではありません。これは、行が取得される順序によって、どの行が書き込まれるか (存在する場合) が決まるためです。この順序は予測できず、マスターとスレーブで異なる場合があります。
この警告をオフにする方法はありますか (現在の DB 接続でのみ)、またはこれに対するより良い方法はありますか?