mysqlでのbackupからのレプリケーション再構築
レプリケーションの構築や再構築はリリース前の開発時やslave server増設時、
障害発生時等によく行うと思うのでメモっておく
今回の作業
諸事情によりslaveとmasterのデータの整合性が取れなくなった(緊急だったのでreplication error をskipした)ので
backupからレプリケーションを再構築してみる
※skipは基本的には使用しない方がいいですよ!
レプリケーションの状態を確認する
今回はmysqlのディレクトリを固める方式のbackupを行っています。
レプリケーションを停止させて
backup serverのslave statusを確認
$ mysql -u root -p mysql>stop slave; mysql>show slave status \G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: <master ip> Master_User: <replication用ユーザ> Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000002 Read_Master_Log_Pos: 222222222 Relay_Log_File: backup-bin.000003 Relay_Log_Pos: 8270 Relay_Master_Log_File: mysql-bin.000004 Slave_IO_Running: No Slave_SQL_Running: No Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 222222222 Relay_Log_Space: 8436 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 10000000
こんな感じのが表示されます。
Slave_IO_Running: No
Slave_SQL_Running: No
ここら辺がYESだとレプリケーションが正常に動作している。
レプリケーション構築時に大事なのは下記の項目
backup serverからbackupをslave serverに転送する
最低限必要なファイルは下記っぽい
- 各databaseのディレクトリとその中のファイル
- ibdata1
$ cd /var/lib/ $ tar czvf backup.tar.gz mysql/ibdata1 mysql/<各database名> mysql/<各database名>
転送(ユーザのカレントディレクトリに転送していますが転送先はエラーが出なければどこでも構いません)
$ scp backup.tar.gz shiro-16@hoge.jp:
これでbackup serverでの作業は終わったのでレプリケーションを再開させる。
$ mysql -u root -p mysql>start slave;
slave serverでのレプリケーション設定
以下はsshでhoge.jp(slave server)にログインしての作業
mysqlを停止させる
$ sudo /etc/init.d/mysql stop
mysqlのdataディレクトリのbackup(念のため)
$ mv /var/lib/mysql /var/lib/mysql.backup
ファイルを解答しdataディレクトリとして配置
$ tar xvzf backup.tar.gz $ mv mysql /var/lib/mysql
パーミッション変更
$ chown -R mysql:mysql /var/lib/mysql
mysqlを起動
$ sudo /etc/init.d/mysql start
一通りdatabase等を確認する
レプリケーション用のmaster情報を登録
レプリケーション再開
$ mysql -u root -p mysql>CHANGE MASTER TO MASTER_HOST='Master_Host', MASTER_USER='Master_User', MASTER_PASSWORD='Master_Userのパスワード', MASTER_LOG_FILE='Relay_Master_Log_File', MASTER_LOG_POS=Read_Master_Log_Pos; mysql>start slave; mysql>show slave status \G ........
各項目に上記のshow slave statusで取得した値を入れる
これでレプリケーションの構築は終わりです。
まめ知識としてslave等でmasterの情報を知りたい場合は
/var/lib/mysql/master.info
に色々書いていたりします。