何らかの問題で、マスターとスレーブの同期が取れなくなってしまうことがあります。
問題は色々なケースがありますが、このような場合に、スレーブの再構築を行う手順を復習のために書いておきます。
DB(マスター側)
・内部IPを確認します。
[root@db1 mysql]# ifconfig eth0 Link encap:Ethernet HWaddr 12:31:3E:00:2E:61 inet addr:10.162.48.139 Bcast:10.162.48.255 Mask:255.255.255.0 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:293449 errors:0 dropped:0 overruns:0 frame:0 TX packets:757109 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:27208339 (25.9 MiB) TX bytes:2059801268 (1.9 GiB)
上記より、10.162.49.139が内部IPとなります。
・マスターDB情報を確認します。
[root@db1 mysql]# less /var/lib/mysql/master.info 15 mysqld-bin.000006 106 ip-10-161-50-146.us-west-1.compute.internal hoge hogepass 3306 60 0
ここでユーザーパスを確認します。
hoge
hogepass
・現在のログファイルのポジションを確認します。
mysql> SHOW MASTER STATUS; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | mysqld-bin.000291 | 106 | | | +-------------------+----------+--------------+------------------+ 1 row in set (0.00 sec)
・マスターのDBを止めます。
/etc/init.d/mysql stop
・MySQLデータをスレーブサーバに転送します。
rsync -avxz /home/mysql/ db2::mysql
※予めDB2(スレーブ)側ではrsyncdデーモンを立ち上げ、転送できるようにしておきます。
・転送後はマスターのみ起動します。
/etc/init.d/mysql start
○DB(スレーブ側)
・MySQLを起動し、一度スレーブの機能を止めます。
mysql> STOP SLAVE;
・マスターの情報を書き換えます。
CHANGE MASTER TO MASTER_HOST='10.162.49.139', MASTER_USER='hoge', MASTER_PASSWORD='hogepass', MASTER_LOG_FILE='mysqld-bin.000291', MASTER_LOG_POS=106;
・スレーブの機能を開始します。
mysql> START SLAVE;
・スレーブの状態を確認します。
mysql> SHOW SLAVE STATUSG
mysql> SHOW SLAVE STATUSG *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.162.48.139 Master_User: hoe Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqld-bin.000292 Read_Master_Log_Pos: 106 Relay_Log_File: mysqld-relay-bin.000021 Relay_Log_Pos: 252 Relay_Master_Log_File: mysqld-bin.000292 Slave_IO_Running: Yes Slave_SQL_Running: Yes
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
上記が共にYESになっていることを確認します。
/var/log/mysqld.log
そして、上記で、エラーが出ていないことも確認します。
こちらの記事はなかの人(kenjionsoku)監修のもと掲載しています。
元記事は、こちら