LoginSignup
13
18

More than 5 years have passed since last update.

MySQLでサービスを停止せずにslaveを追加する

Last updated at Posted at 2017-04-07

はじめに

MySQLでslaveを新しく追加する際、レプリケーションを設定するわけですが、ネット上では下記のように、

mysql > FLUSH TABLES WITH READ LOCK;
mysql > SHOW MASTER STATUS;

テーブルをロックしたうえで現在のログポジションを調べるという手順が多いような気がします。

この方法だと、短時間ではあってもサービスに影響してしまいます。
そこで、テーブルロックを可能な限り短くしてレプリケーションを定義する方法をまとめます。

前提

データベースエンジンにInnoDBを使用していること

概要

1.masterにてmysqldump

下記オプションを指定することで、ダンプ時にバイナリログを切り替え、ダンプファイルにログポジション情報が記録されます(常に切り替えたバイナリログの最初のポジションとなる=間違えるリスクが小さい)。
また、トランザクションが有効になるため、オンライン状態でも一貫性を保持したダンプが可能となります。
--single-transaction
--flush-logs
--master-data=2

2.slaveにインポート

3.slaveにてレプリケーション定義

ダンプファイルの最初にログポジション情報が記録されているので、それをもとにレプリケーションを設定します。

手順

1. masterにてmysqldump

masterDBをダンプ

$ mysqldump -uroot -p**** \
   --all-databases \
   --opt \
   --flush-logs \
   --add-drop-table \
   --single-transaction \
   --master-data=2 \
 | gzip > DUMPFILE.gz

オプションの意味

--single-transaction
 → 一貫性を保持してダンプ
--flush-logs
 → バイナリログをダンプ時に切り替える
--master-data=2
 → ダンプ時点でのバイナリログポジション情報を記録

2. slaveにインポート

$ zcat DUMPFILE.gz | head -n 25

dumpファイルのログポジションを確認
(以下の記述を確認。-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.XXXXXX', MASTER_LOG_POS=YYY;)

masterのダンプデータをインポート
$ zcat DUMPFILE.gz | mysql -uroot -p****

3. slaveにてレプリケーション設定

mysql> change master to
 master_host='XXX.XXX.XXX.XXX', <-------- masterのIPアドレス
 master_user='repl', <------------------- レプリケーション用に作成したアカウント
 master_password='********', <----------- 上記アカウントのパスワード
 master_log_file='mysql-bin.XXXXXX', <--- dumpfileのMASTER_LOG_FILE
 master_log_pos=YYY; <------------------- dumpfileのMASTER_LOG_POS

レプリケーション開始
mysql> start slave;

スレーブの状態確認
mysql> show slave status\G

注意

mysqldumpの--single-transactionオプションは、ロックを発行することなくdumpが可能ですが、本手順のように--master-dataオプションをつけるとFLUSH TABLES WITH READ LOCKが発行され、一瞬ですがロックが発生します。
しかし、手作業でロックを発行し、ログポジションを調べるのに比べてはるかに短い時間で済みます。
一瞬のロックも許容できないシステムはXtraBackupなどの利用をご検討ください。

まとめ

稼働中のMaterDBに新たにslaveをぶら下げる時に有用と思われます。

13
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
18