12

一部のデータについて同期していない (つまり、マスターがスレーブよりも多くのデータを保持している) マスター/スレーブ MySQL バイナリ ログ レプリケーション システム (うわー!) を実行しています。しかし、スレーブはわずかな MySQL エラーで非常に頻繁に停止します。これを無効にできますか? (おそらく、複製スレーブ ignore-replicating-errors またはいくつかの並べ替えの my.cnf 設定 ;) )

これは、スレーブが存在しないアイテムを複製しようとすると、時々発生することであり、スレーブはただ死んでしまいます。SHOW SLAVE STATUS \Gで簡単にチェックします。与える

       Slave-IO-Running: Yes
      Slave-SQL-Running: No
        Replicate-Do-DB: 
             Last-Errno: 1062
             Last-Error: Error 'Duplicate entry '15218' for key 1' on query. Default database: 'db'. Query: 'INSERT INTO db.table ( FIELDS ) VALUES ( VALUES )'

次の手順を実行して、(スレーブが停止していることに気付いたら) すぐに修正します。

STOP SLAVE;
RESET SLAVE;
START SLAVE;

...最近、これはちょっと面倒になってきました。これを行うある種のPHPを吐き出す前に、最初のエラーでスレーブを強制終了しない my.cnf エントリがあるかどうか疑問に思っていました。

乾杯、

/mp

4

6 に答える 6

15

スレーブを停止します。グローバルsql_slave_skip_counter=1を設定します。スレーブを開始します。

現在のエラーのみを無視して、レプリケーションプロセスを続行できます。

于 2009-07-29T15:30:36.450 に答える
12

はい、my.cnf で --slave-skip-errors=xxx を使用します。ここで、xxx は「すべて」またはエラー コードのコンマ区切りリストです。

于 2008-08-27T18:58:09.937 に答える
3

まず、本当にエラーを無視しますか? エラーが発生した場合は、データが同期されていない可能性があります。おそらく、スレーブ データベースを削除して、エラーが発生したときに同期プロセスを再開することをお勧めします。

第二に、あなたが得ているエラーは、存在しないアイテムをレプリケートするときではないと思います (それはどういう意味ですか?) - スレーブ データベースに既に存在するアイテムをレプリケートしているようです。

この問題は主に、クリーンなデータ コピーから開始しないことが原因であると思われます。マスターがスレーブにコピーされたようです。レプリケーションがオフになっている (または失敗している)。その後、再び起動しましたが、逃したものに追いつく機会をスレーブに与えませんでした。

データベースのクローンを作成してスレーブにインポートするのに十分な時間、書き込みアクセスのためにマスターを閉じることができる場合は、問題が解消される可能性があります。

于 2008-08-27T17:41:40.837 に答える
2

最新mysqldumpのコマンドには、一貫したレプリケーションの設定に役立ついくつかのオプションがあります。--master-dataバイナリログファイルと位置をダンプに入れ、スレーブにロードされたときに自動的に設定されるものを確認してください。また--single-transaction、一貫したダンプを行うために書き込みロックが必要ないように、トランザクション内でダンプを行います。

于 2008-08-27T17:48:59.043 に答える
1

スレーブがレプリケーション以外の書き込みに使用されていない場合、High Performance MySQL の作成read_only者は、ユーザーがスレーブ上のデータを誤って変更するのを防ぐために、スレーブ サーバーに追加することを推奨しています。

于 2008-09-13T17:44:42.530 に答える
0

データベースを同期せずにレプリケーションを実行していると思います。最初にデータベースを同期してレプリケーションを試行すると、サーバーは同じ一意のIDを生成し、自動侵入オフセットを設定しようとします。

于 2009-07-29T10:14:16.403 に答える