■マスター側
設定ファイル編集
vi /etc/my.cnf
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
: [mysqld] # バイナリログを出力 log_bin # 特定のDBのみをスレーブするときは有効に #binlog_do_db=dbname # 他のレプリケーションと被らないサーバIDを決定 server_id=1 # バイナリログの肥大化防止のためバイナリログの保存期間を指定 expire_logs_days=7 : |
MySQL再起動
1 |
# service mysqld retart |
データディレクトリがにバイナリデータが作成されているのを確認
1 2 3 4 5 |
# ls -lat /var/lib/mysql : mysqld-bin.000001 mysqld-bin.index : |
MySQLユーザと権限付与
1 2 3 4 5 6 7 |
# mysql -uroot -p mysql> CREATE USER 'repl'@'スレーブのローカルIP' IDENTIFIED BY 'replユーザのパスワード' mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'スレーブのローカルIP' IDENTIFIED BY 'replユーザのパスワード' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0; mysql> SELECT user,host,password FROM mysql.user; |
データダンプ
1 |
$ mysqldump -u root -p --all-databases --master-data=2 --default-character-set=utf8 > mysql.dump |
※特定のDBのみdumpする場合は–all-databasesを削除しdb名を追加
※MyISAMの場合は、–master-dataによって、自動的に–lock-all-tablesが有効になるので、すべてのテーブルがロックされてしまうので注意
※InnoDBであれば、–single-transactionを付与することで、ロックされることなくdumpを取得できる。
dumpファイルをスレーブ側へ転送しておく
1 |
$ scp mysql.dump user@スレーブのローカルIP: |
■スレーブ側設定
設定ファイル編集
1 2 3 4 5 6 7 8 9 10 11 |
vi /etc/my.cnf : [mysqld] # サーバID設定 server_id=2 # スレーブなので更新禁止 read_only : |
再起動
1 |
# service mysqld restart |
マスターDBのダンプの読み込み
1 |
$ mysql -u root -p < /home/user/mysql.dump |
ダンプした時点の、マスターのバイナリログファイル名(MASTER_LOG_FILE)と開始位置(MASTER_LOG_POS)を確認しておく
1 2 3 4 |
$ head -n 100 mysql.dump | grep CHANGE : -- CHANGE MASTER TO MASTER_LOG_FILE='mysqld-bin.000002', MASTER_LOG_POS=240; : |
レプリケーション設定
1 2 3 4 5 6 7 8 9 |
# mysql -uroot -p mysql> CHANGE MASTER TO MASTER_HOST='マスターのローカルIP', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='マスターのreplユーザのパスワード', MASTER_LOG_FILE='mysqld-bin.000002', -- ←先ほど確認したファイル名 MASTER_LOG_POS=240; -- ←先ほど確認した開始位置 |
レプリケーションの開始
1 |
mysql> START SLAVE; |
レプリケーションの動作確認
1 2 3 4 5 6 |
mysql> SHOW SLAVE STATUS\G : Slave_IO_Running: Yes Slave_SQL_Running: Yes : |
※Slave_IO_Running と Slave_SQL_Running がどちらもYesになっていれば、レプリケーションが正常に動作しています。
参考サイト)
- https://blog.apar.jp/linux/3163/
- http://muramasa64.fprog.org/diary/?date=20111017
- http://koexuka.blogspot.jp/2009/06/mysql_10.html
- http://qiita.com/ryounagaoka/items/7be0479a36c97618907f
- http://d.hatena.ne.jp/omiyan/20110128/p1
レプリケーションが動かなくなった時
基本は以下のサイトの手順で復旧可能。
https://qiita.com/soramugi/items/3c33200b5903007f3ead
もしそれでもだめなら、当記事の「データダンプ」のとこからやり直す。
2019/1/28レプリケーションが機能していないと気付いた(「Slave_IO_Running 」が「Yes」にならない)。
その際はダンプからもう一度行うことで復旧した。
ストレージ障害とか、IO系の障害とかあった後は、要注意。