マスタを止めない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等を使用し、ダンプファイルをスレーブサーバへ転送します。

データの投入(スレーブ)

マスタで取得したダンプを、スレーブDBに流し込みます。

$ mysql -u root -p < db_all.dmp

ログファイルとポジションの確認

次に、ダンプファイルに記述してあるログファイルとポジションを確認します。
(該当行は『-- 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;

確認(スレーブ)

$ mysql -u root -p

スレーブサーバにrootユーザーで接続し、以下のコマンドの実行結果が、
『Slave_IO_Running』『Slave_SQL_Running』それぞれが『Yes』になっていれば、設定完了です。

SHOW SLAVE STATUS \G