関連する my.cnf 設定の一部:
binlog-format=ROW
init_connect='SET autocommit=1'
autocommit=1
innodb_flush_log_at_trx_commit=1
レプリケーションも実行しています...現在、ほとんどの場合、問題なく動作しています。
しかし、時々私はこれを得る:
Could not execute Delete_rows/Update_rows event on table auto.parcels_to_cache; Can't find record in 'parcels_to_cache'.
これは次の理由によるものです。
mysql-bin.000021.decoded-26373095-### DELETE FROM auto.parcels_to_cache
mysql-bin.000021.decoded-26373096-### WHERE
mysql-bin.000021.decoded-26373097-### @1='0101'
mysql-bin.000021.decoded-26373098-### @2='2013:01:05'
mysql-bin.000021.decoded:26373099:### @3='01014700669249'
--
mysql-bin.000022.decoded-4143326-### INSERT INTO auto.parcels_to_cache
mysql-bin.000022.decoded-4143327-### SET
mysql-bin.000022.decoded-4143328-### @1='0101'
mysql-bin.000022.decoded-4143329-### @2='2013:01:05'
mysql-bin.000022.decoded:4143330:### @3='01014700669249'
これは、マスター サーバーからのデコードされたバイナリ ログです。複製サーバーはこれを反映します。
また、これは InnoDB テーブルでのみ発生するようです。しかしいつもではない。私が抱えていたレプリケーションに関する MyISAM の問題は、別の問題に関連していたと思います。
最近、すべてのソースを再コーディングして、そこにあったいくつかのトランザクションを削除して、それらすべてを削除しました。したがって、開始、コミット、ロールバックはもうありません...次に、mysqlデータベースクラスに追加して、コミットも常にオフにしました。
これは、MySQL Web サイトで、トランザクションとトランザクション可能および非トランザクション テーブルに問題があることを読んだためです。
たとえば、この auto.parcels_to_lifecycle テーブルは頻繁に使用され、一度に 20 のスレッドがアクセスする可能性があります。したがって、InnoDB。それ以外の場合、各スレッドは、1 つのスレッドのみが更新されるまで待機します...
この DELETE before INSERT の問題を修正する方法を知っている人はいますか? または、問題にアプローチして修正する方法はありますか?
ありがとう!