MySQLレプリケーションのトラブルシューティング:マスターとスレーブのデータベースが異なる場合
MySQL レプリケーションでマスターとスレーブのデータベースが異なる場合、いくつかの方法で再同期できます。どの方法を選択するかは、データ損失の許容度、ダウンタイムの許容度、および技術的なスキルレベルによって異なります。
方法
-
LOAD DATA INFILE を使用する
この方法は、データ損失が発生する可能性がありますが、ダウンタイムが最小限に抑えられます。
手順
- スレーブサーバーで、マスターサーバーと同じデータベースとテーブルを作成します。
- マスターサーバーからデータファイルをダンプします。
- スレーブサーバーで
LOAD DATA INFILE
を使用してデータファイルをインポートします。
-
mysqldump と mysqlimport を使用する
この方法はデータ損失が発生しませんが、ダウンタイムが発生します。
- スレーブサーバーでダンプファイルをインポートします。
注意事項
- 再同期を行う前に、必ずデータのバックアップを取ってください。
- 再同期中は、スレーブサーバーで書き込み操作を行わないでください。
- 上記以外にも、いくつかの方法で再同期できます。詳細は、MySQL のドキュメントを参照してください。
- 技術的な問題が発生した場合は、MySQL のフォーラムや専門家に相談してください。
# マスターサーバーでデータファイルをダンプする
mysqldump -u root -p database_name > data.sql
# スレーブサーバーでデータベースとテーブルを作成する
mysql -u root -p < create_database.sql
# スレーブサーバーでデータファイルをインポートする
mysql -u root -p database_name < data.sql
# マスターサーバーでデータベースをダンプする
mysqldump -u root -p database_name > data.sql
# スレーブサーバーでデータベースを削除する
mysql -u root -p -e "DROP DATABASE database_name;"
# スレーブサーバーでダンプファイルをインポートする
mysqlimport -u root -p database_name data.sql
MySQL レプリケーションツールを使用する
使用するツールによって、コマンドは異なります。ツールのドキュメントを参照してください。
MySQL レプリケーションでマスターとスレーブのデータベースが異なる場合の再同期方法
-
InnoDB の binlog_format を ROW に設定する
この方法は、データ損失を防ぎ、ダウンタイムを最小限に抑えることができます。ただし、InnoDB テーブルのみ使用できます。
- マスターサーバーとスレーブサーバーの
binlog_format
をROW
に設定します。 - マスターサーバーで
STOP SLAVE;
を実行します。
- マスターサーバーとスレーブサーバーの
-
MySQL の組み込みツール mysqlbinlog を使用する
mysql database database-replication