マスタを止めないMySQLのレプリケーション設定
いまさらながら、マスタDBを稼働させたまま、レプリケーションのスレーブを追加する為のメモ。
前提条件は以下になります。
- マスタのmy.cnfにて、『server-id』が設定されている
- マスタのmy.cnfにて、『log-bin』が設定されている
- ストーレジエンジンに『InnoDB』を使用している
レプリケーション用ユーザーの作成(マスタ)
マスタDBにて、MySQLレプリケーション用のユーザーを作成します。
$ mysql -u root -p
mysqlにrootで接続し、レプリケーション用ユーザーを作成します。
GRANT FILE, REPLICATION SLAVE ON *.* TO {レプリケーション用ユーザー}@"{スレーブIPaddr or ネットワーク}" IDENTIFIED BY "{パスワード}" 例) GRANT FILE, REPLICATION SLAVE ON *.* TO repluser@"192.168.1.2/255.255.255.0" IDENTIFIED BY "password"
my.cnf設定(スレーブ)
スレーブサーバにて、レプリケーションに必要なmy.cnfの設定を行います。
server-id = {ネットワークで一意の番号} log-bin = mysql-bin report-host = {スレーブサーバホスト名} 例) server-id = 101 log-bin = mysql-bin report-host = db02
データのダンプ(マスタ)
$ mysqldump -u root -p -e --single-transaction --master-data=2 --hex-blob --default-character-set=utf8 --all-databases > db_all.dmp
マスタサーバにて、上記コマンドを実行し、全データベースのダンプを取得後、scp等を使用し、ダンプファイルをスレーブサーバへ転送します。
ログファイルとポジションの確認
次に、ダンプファイルに記述してあるログファイルとポジションを確認します。
(該当行は『-- CHANGE MASTER TO...』で始まる行)
$ head -30 db_all.dmp
該当行の以下のそれぞれの値を確認します。
- MASTER_LOG_FILE
- MASTER_LOG_POS
レプリケーション設定(スレーブ)
$ mysql -u root -p
スレーブサーバにrootユーザーで接続し、以下のレプリケーション設定を行います。
CHANGE MASTER TO MASTER_HOST='{DBマスタIPaddr}', MASTER_USER='{レプリケーション用ユーザー}', MASTER_PASSWORD='{レプリケーション用ユーザーパスワード}', MASTER_LOG_FILE='{確認したログファイル}', MASTER_LOG_POS={確認したポジション}; START SLAVE; 例) CHANGE MASTER TO MASTER_HOST='192.168.1.2', MASTER_USER='repluser', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-log.000036', MASTER_LOG_POS=935242503; START SLAVE;