完全に再同期した後、スレーブサーバーで「PRIMARYキーの重複したエントリ」が表示される理由を教えてください。
基本的に、「mysqldump」はほぼ一晩実行されていたため、復元プロセスには数時間かかったため、スレーブを起動したとき、マスターから約63874秒遅れていました。
スレーブサーバーは読み取り専用(read_only)であり、再同期プロセス中に書き込みがなかったため、重複したキーがある理由がわかりません。
マスターでバイナリログ形式がMIXEDに設定されています。
DBのバックアップに使用されるコマンド:
mysqldump --opt --single-transaction -Q --master-data=2 db | bzip2 -cz > db.sql.bz2
スレーブは、次のオプションを使用して、マスターから1つのデータベースのみを複製しています(db-> db_backup)。
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
私はそうは思いません
replicate-wild-do-table = db_backup.%
replicate-rewrite-db = db->db_backup
一緒に属しています。
他の人もこれについて疑問に思っています
Jun 14, 2012
: 設定済みのMySQLレプリケーションですが、機能していませんJun 13, 2012
: mysqlレプリケーション中の「replicate-rewrite-db」と「replicate-do-db」の違いは何ですか?May 31, 2012
: Mysql replicate-rewrite-db not workingこの問題は、複製ルールが処理される順序に起因します。 レプリケーションルールに関するMySQLのドキュメント によると:
--replicate-rewrite-dbオプションが指定されている場合、それらは--replicate- *フィルタリングルールがテストされる前に適用されます。
replicate-rewrite-dbのMySQLドキュメント でもこう言っています:
--replicate- *ルールがテストされる前に、データベース名の変換が行われます。
replicate-wild-do-table
は、書き換え後に適用されます。この順序付けが、何らかの方法で、すでにデータを持っているテーブルにINSERTを課したとしても、驚くことではありません。
データはどのようにしてそこに到達したのでしょうか?
mysqldump --single-transaction
を実行することは、データのポイントインタイムダンプを行うための最良の方法のようです。残念ながら、mysqldump --single-transaction
にはアキレス腱:ALTER TABLE
があります。テーブルがALTER TABLE
やDROP TABLE
などのCREATE TABLE
コマンドの影響を受ける場合、mysqldumpがダンプを実行しようとしたトランザクションの整合性を破壊する可能性があります。テーブルの切り捨て(これはMySQLユニバースのDDLです)、インデックスの削除と追加も混乱を招く可能性があります。
詳細については、MySQL Performance Blogの MySQLDumpの秘密保持 を参照してください。 mysqldumpのトランザクションの整合性を壊す可能性のある12のコマンドを説明する過去の質問で、私は実際にこの点に対処しました: MySQL backup InnoDB
書き換え規則またはmysqldumpの分離がオーバーライドされているために存在していなかったはずのmysqldumpの実行中に、1つまたは両方の側面が原因でmysqldumpが実行された可能性があります。
Mysqldumpの開始以降、すべてのリレーログのmysqlbinlogダンプを実行して、スレーブが処理するすべてのINSERTを確認し、それらの行がスレーブにすでに存在するかどうかを確認します。もしそうなら、あなたはおそらく2つのことをすることができます:
これをスレーブのmy.cnfに追加するだけです
[mysqld]
slave-skip-errors=1062
skip-slave-start
mysqlを再起動します。次に、START SLAVE;
を実行します
すべての重複キーエラーはバイパスされます。 Seconds_Behind_Master
が0になったら、それらの行を削除してmysqlを再起動します。
必要なツールは
これらを使用してスレーブの違いを見つけ、修正します
スレーブに直接挿入するコードで挿入クエリを確認します。スレーブからのみ読み取ることができます。書き込みクエリはマスターに送信する必要があります。