MySQLのマスタースレーブレプリケーションを実行しようとしています。次のコマンドを入力しているとき:
CHANGE MASTER TO MASTER_Host='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;
次のエラーがスローされます。
エラー1201(HY000):マスター情報構造を初期化できませんでした。より多くのエラーメッセージがMySQLエラーログにあります。
どんな助けも大歓迎です。
それをリセットしてみてください、それは魔法です!スレーブMYSQLコマンドタイプのスレーブ:
RESET SLAVE;
もう一度お試しください:
CHANGE MASTER TO MASTER_Host='10.1.100.1', MASTER_USER='slave_user', MASTER_PASSWORD='slave_password', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=451228;
mysql> START SLAVE;
いくつかのことを確認してください:
1)マスターの/etc/my.cnfにserver_idが実際に設定されていることを確認してください
その理由は次のとおりです。複製はserver_idに依存します。クエリが実行され、マスターのバイナリログに記録されるたびに、マスターのserver_idが記録されます。デフォルトでは、server_idが/etc/my.cnfで定義されていない場合、server_idは1にデフォルト設定されます。ただし、MySQLレプリケーションのルールでは、server_idをマスターの/etc/my.cnfで明示的に定義する必要があります。さらに、特定のスレーブについて、mysqldはSQLステートメントのserver_idをリレーログから読み取るときにチェックし、スレーブのserver_idと異なることを確認します。これが、MySQL ReplicationがそのSQLステートメントを実行しても安全であると認識する方法です。このルールは、循環(マスター-マスター、マルチマスター)レプリケーションが実装されている場合に必要です。
使用する select @@server_id;
sqlコマンドラインで、サーバーの実際の設定を確認します。
2)スレーブの/etc/my.cnfにserver_idが実際に設定されていることを確認してください
その理由:#1と同じ理由
3)マスターの/etc/my.cnfのserver_idがスレーブの/etc/my.cnfのserver_idと異なることを確認します
その理由:#1と同じ理由
補足事項として、複数のスレーブをセットアップする場合は、各スレーブがそのマスターおよび兄弟スレーブとは異なるserver_idを持っていることを確認してください。
その理由は次のとおりです。例
2つのスレーブを持つマスター
MASTERにはserver_id 1があります
SLAVE1にはserver_id 2があります
SLAVE2にはserver_id 2があります
兄弟スレーブが同じserver_idを持っているため、SLAVE2でレプリケーションが積極的に遅くなります。実際、着実に遅れを取り、休憩を取り、いくつかのSQLステートメントを処理します。これは、同一のserver_idを持つ1つ以上のスレーブを持つことに対するマスターの障害です。これは、実際にはどこにも文書化されていない落とし穴です。私はこれまでに何十回も見ました。