MySQLのレプリケーション設定
基本的なレプリケーションについて、master-slave1台づつの構成をサンプルにしてます。
- master(192.168.1.11)
- slave(192.168.1.12)
masterの設定
- レプリケーション用ユーザーの作成
slave(192.168.1.0/24)からserver2というユーザーでrelay_logを取得しにくる許可をする
> GRANT REPLICATION SLAVE ON *.* TO 'server2'@'192.168.1.0/255.255.255.0';
- my.cnf
[mysqld] log-bin=mysql-bin server-id=1
server-idは実運用の時はIPの台4オクテットとか分かりやすいようにした方がいいと思います。
slaveの設定
[mysqld] log-bin=mysql-bin log_slave_updates server-id=2
slaveをmasterとして使う場合がある場合は下記を追加
log_slave_updates
スナップショットの作成 at master
- ロック、binlogのポジションを確認
> flush tables with read lock; > show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 396 | | | +------------------+----------+--------------+------------------+
- ロックしている間にダンプファイルを作成する
mysqldump -u root -p database_name --lock-all-tables > dump.sql
- ロック解除
unlock tables;
extrabackupなどで既にバックアップをとっていてslave_infoなどがある場合
そちらを使えばダンプファイルを生成するためのロックやダンプは必要なくて、ただバックアップファイルからslaveを構築するだけです。
レプリケーションの設定 at slave
show amster statusで得た情報をchange master toでmaster_log_file,master_log_posに入力
- dumpファイルの展開
mysql -u root --default-character-set=utf8 -A database_name < dump.sql
- masterの情報登録
change master to master_host='192.168.1.11', #masterのIP master_user='server2', #レプリケーション用のユーザ名(masterにGRANTで追加したユーザ名) master_password='', master_log_file='mysql-bin.000004', master_log_pos=107; start slave;
- 確認
> show slave status\G
下記項目を確認し問題なければOK
Slave_IO_Running: Yes Slave_SQL_Running: Yes Last_IO_Error: Last_SQL_Error:
masterで更新系クエリ発行、slaveで確認
無事レプリケーションは完了
- スレーブの停止
change master to を発行するときはslaveの機能は止まっている必要があるので
既にslaveが動いてる時にchange master toを発行したい時はstop slaveでレプリケーションをとめてあげる必要がある
> stop slave;