sql >> データベース >  >> RDS >> Mysql

Mysql警告コード1592ステートメント形式を使用してバイナリログに書き込まれた安全でないステートメント

    おそらく、2つの形式のバイナリロギング 、ステートメントベース-マスター上のデータを変更してスレーブ上で実行できるようにする実際のクエリをログに記録し、行ベース-実際の行データの前後の画像をログに記録しますスレーブがそれらの変更をデータに直接適用できるように、クエリによって変更されます...および混合モードでは、オプティマイザとストレージエンジンが、クエリごとに最適な形式を決定します。

    実行しているステートメントは安全ではありません原則として INSERT ... SELECTを使用しているため 自動インクリメント列を持つテーブルに。 その一般的な形式のクエリの場合 STATEMENTで使用されました ベースの環境、およびSELECT マスターとスレーブで同じ順序で行を返さなかった場合、行は異なる順序で選択される可能性があり、その結果、異なる自動インクリメント値になります。

    実際には、特定の 実行しているクエリは 挿入する行は1つだけであり、自動インクリメント値を明示的に指定しているため、決定論的です。それがあなたの混乱の原因だと思います。ただし、INSERT ... SELECTを実行しているため、まだ警告がトリガーされているようです。 自動インクリメントを使用してテーブルに追加すると、サーバーは、精度ではなく、原則として、一般化された「安全でない」判断をクエリに適用しているように見えます。

    binlog_formatを切り替える MIXEDへ サーバーはその裁量でモードを切り替えることができるため、警告が消えるはずです...そして悪影響が生じる可能性はほとんどありません。 STATEMENTという事実がなかった場合 常にデフォルトでした(最初はそれが利用可能な唯一の種類のレプリケーションだったので)、私は彼らがMIXEDを作ったのではないかと思います ずっと前のデフォルト...実際、バイナリログの内部に精通している場合は、おそらく私と同じようにROWを使用する傾向があります。 「古い」行データはDELETEに記録されるため、トラブルシューティングやトラブルからの脱却に非常に役立つバイナリログが作成される傾向があります。 およびUPDATE




    1. 更新ステートメントの後にMySQLトリガーで古い値を取得する

    2. 文字エンコードの問題

    3. チェックボックス入力PHPフォームから1つのIDMySQLに複数のアイテムを挿入します

    4. MySQLVisualStudioは選択したオブジェクトのデザインウィンドウを作成できません