MySQLのレプリケーションメモ
目次
はじめに
MySQLのレプリケーション設定を実施します。
DBエンジンは、InnoDBを前提としています。
MySQLの設定変更
mysqldの設定を各サーバで変更します。
server-id
はレプリケーションを実施するサーバ間で一意になるように設定する必要があります。
log-bin
は特に指定する必要はありませんが、今回は指定しています。
マスタ
[mysqld]
server-id = 1
log-bin = /var/log/mysql/mysql-bin.log
スレーブ
スレーブに対する書き込みが発生するとレプリケーションエラーが発生するため、read_only
を指定します。
server-id = 2
log-bin = /var/log/mysql/mysql-bin.log
read_only
レプリケーション用のユーザ作成
レプリケーション専用のユーザを下記コマンドで作成します。
@
マークの後ろの%
はスレーブのIPアドレスを指定する方がよいです。
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIDIED WITH mysql_native_password BY 'password';
レプリケーションの設定
マスタのデータをバックアップして、スレーブにリストアする作業をはじめに実施します。
下記のコマンドでマスタのサーバでバックアップを取得します。
mysqldumpを実施する際は、single-transaction
を利用するようにしてください。
利用しない場合は、テーブルロックがかかってしまうため稼働中のサービスに影響が出てしまいます。
また、バックアップの際には、CREATE等のDDLは利用しないでください。
mysqldump --all-databases --flush-logs --single-transaction --master-data=2 > master.db
スレーブのサーバで下記コマンドを用いてデータをリストアします。
mysql < master.db
下記コマンドを用いてマスタログファイルとポジションを確認しておきます。
スレーブにマスタ設定をする際に必要になります。
grep "CHANGE MASTER TO MASTER_LOG_FILE=" master.db
# 下記は実行結果です。
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000068', MASTER_LOG_POS=157;
マスタの設定とレプリケーションを下記コマンドで開始します。
CHANGE MASTER TO MASTER_HOST='マスタのIPアドレス', MASTER_PORT=マスタのポート番号, MASTER_USER='repl', MASTER_PASSWORD='replユーザのパスワード', MASTER_LOG_FILE='mysql-bin.000068', MASTER_LOG_POS=157;
START SLAVE;
レプリケーションが開始されたら、下記コマンドで状況を確認します。
Slave_IO_Running
とSlave_SQL_Running
がYes
になっていることを確認してください。
show slave status \G;