Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ### Replication
- * mysql 5.6
- * Mater IP Address = 192.168.1.1
- * Slave IP Address = 192.168.1.2
- ### Master に repl ユーザーを作成する
- 以下の例では、repl ユーザーが192.168.1.2 からレプリケーション用の接続をできるようにしている。
- レプリケーションなので、`ON *.*` で全データベース、全テーブルに対して許可している。
- ```MySQL
- GRANT REPLICATION SLAVE
- ON *.*
- TO 'repl'@'192.168.1.2/255.255.255.255'
- IDENTIFIED BY 'repl_password'
- ```
- ## 2. MySQL サーバの設定を変更する
- Master に server-id と、bin_log の設定をする
- ```my.cnf
- # Master
- server-id = 1
- log_bin = /var/log/mysql/mysql-bin.log
- ```
- Slave には Master とは違う server-id を設定する。
- \# server-id はサーバ間で重複しないように設定する
- ```my.cnf
- # Slave
- server-id = 2
- # Slave log
- relay-log = mysqld-relay-bin
- relay-log-index = mysqld-relay-bin
- log-slave-updates
- slave-skip-errors=1062
- ```
- * その後 Master、Slave 共に再起動する `service mysql restart`
- ## 3. Slave で CHANGE MASTER TO 〜 する
- Slave に Master の場所を教える。 MASTER_LOG_FILE や MASTER_LOG_POS は、
- mysqldump に含めるので、ここでは指定しない。
- root などでログインして以下を実行する。
- ```MySQL
- CHANGE MASTER TO
- MASTER_HOST='192.168.1.1',
- MASTER_USER='repl',
- MASTER_PASSWORD='repl_password';
- ```
- ## 4. Master で dump をとる
- --master-data=1 で MASTER_LOG_FILE、MASTER_LOG_POS が dump に含まれる。
- --flush-logs で その時点のログを吐き出しておく。
- --single-transaction で、dump が一貫性を保つようにする。dump が開始された以降の変更はふくまれなくなる。また、ロックされなくなるので、Master は止まらない。
- ```Shell
- mysqldump -uroot -p --master-data=1 --single-transaction db_name --flush-logs > replication.mysqldump
- ```
- そして、scp などで、Slave に dump をコピーする
- ## 5.Slave に dump を入れ、`SLAVE START` する
- ```Shell
- mysql -uroot -p db_name < replication.mysqldump
- ```
- ``` MySQL
- START SLAVE
- ```
- ## 6. 確認する
- 1. Master で何か変更してみる `update members set name = 'hoge' where id = 1`
- 1. Slave で変更を確認する `select name from members where id = 1`
- 1. Positionの確認
- * Mater
- ```
- mysql> show master status\G
- *************************** 1. row ***************************
- File: mysql-bin.0000XX
- Position: XXX
- Binlog_Do_DB:
- Binlog_Ignore_DB:
- Executed_Gtid_Set:
- 1 row in set (0.00 sec)
- mysql> exit
- ```
- * Slave
- ```
- mysql> show slave status\G
- *************************** 1. row ***************************
- Slave_IO_State: Waiting for master to send event
- Master_Host: 192.168.1.1
- Master_User: repl
- Master_Port: 3306
- Connect_Retry: 60
- Master_Log_File: mysql-bin.0000XX
- Read_Master_Log_Pos: XXX
- Relay_Log_File: mysqld-relay-bin.000002
- Relay_Log_Pos: 283
- Relay_Master_Log_File: mysql-bin.0000XX
- ```
- ### トラブルシューティング
- * ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository
- * Masterから再dumpいてimportする
- ```
- mysql> show master status\G
- *************************** 1. row ***************************
- File: mysql-bin.0000XXX
- Position: XXX
- # mysqldump -uroot -p --master-data=1 --single-transaction --all-databases --flush-logs > replication.mysqldump
- ```
- * Slave 再設定
- ```
- mysql > STOP SLAVE;
- # mysql -u root -p < replication.mysqldump
- mysql > RESET SLAVE;
- mysql > CHANGE MASTER TO
- MASTER_HOST='192.168.1.1’,
- MASTER_USER='repl',
- MASTER_PASSWORD='repl_password',
- MASTER_LOG_FILE='mysql-bin.0000XXX',// Master_Log_Fileのファイル名をセット
- MASTER_LOG_POS=XXX;// Exec_Master_Log_Posの値をセット
- mysql > START SLAVE;
- ```
- * Positionの確認
Add Comment
Please, Sign In to add comment