Master側設定
-
1) オプションファイルの設定でサーバーID、バイナリーログが設定されている事を確認。
[root@colinux local]# vi /etc/my.cnf
server-id = 1
log-bin=mysql-bin
-
2) slaveがアクセスする為のレプリケーションアカウントを作成。
GRANT REPLICATION SLAVE ON *.* TO slave_user@192.168.11.5 IDENTIFIED BY ‘slave-password’;
-
3) データのコピー
今回は全部のDBをまとめてもっていくので、一度サービスを停止して/usr/local/mysql毎コピーしました。
※ 停止しないで特定のDBを持って行くことも可能。
mysql> FLUSH TABLES WITH READ LOCK;
→ テーブルがロックされている状態でデータベースフォルダー毎スレーブにコピー
mysql> UNLOCK TABLES;
SLAVE側設定
-
4) コピーしたフォルダーを展開してフォルダー権限の設定をしておく
※ シンボリックリンクはオプションです。(環境に応じて)
[root@desktop local]# chown -R mysql:mysql mysql-5.1.39-linux-i686-icc-glibc23/
[root@desktop local]# ln -s mysql-5.1.39-linux-i686-icc-glibc23 mysql
-
5) slave側のオプションファイルを編集して、サーバーIDを変更しておく。
[root@desktop local]# vi /etc/my.cnf
server-id = 2
-
6) slaveにてMYSQLサービス開始とレプリケーションの開始
[root@desktop local]# /etc/init.d/mysql.server start
Starting MySQL.. [ OK ]
[root@desktop local]#
CHANGE MASTER TO
MASTER_HOST=’192.168.11.2′,
MASTER_USER=’slave_user’,
MASTER_PASSWORD=’slave-password’,
MASTER_LOG_FILE=’mysql-bin.000154′,
MASTER_LOG_POS=258;※MASTER_LOG_FILE、MASTER_LOG_POSはマスター側でポジションを確認したもの。
※上記の確認は、テーブルをロックしている時点で行う事または全体をコピーする場合はコピー直前にアクセスが無い状態で行う事。mysql> show master status;
+——————+———-+————–+——————+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+——————+———-+————–+——————+
| mysql-bin.000154 | 258 | | |
+——————+———-+————–+——————+
1 row in set (0.00 sec)mysql>
mysql> CHANGE MASTER TO
-> MASTER_HOST=’192.168.11.2′,
-> MASTER_USER=’slave_user’,
-> MASTER_PASSWORD=’slave-password’,
-> MASTER_LOG_FILE=’mysql-bin.000154′,
-> MASTER_LOG_POS=258;
Query OK, 0 rows affected (0.04 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.02 sec)
-
7) SLAVEの状態を確認して終了
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Connecting to master
Master_Host: 192.168.11.2
Master_User: slave_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000154
Read_Master_Log_Pos: 258
Relay_Log_File: desktop-relay-bin.000002
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql-bin.000154
マスター側でのTruncate/InsertとSlave側での確認
マスター
スレーブ
※ DROPなどのDDLも同期されます。
———————————————————————
■スレーブ確認項目
———————————————————————
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
———————————————————————
■スレーブのレプリケーションがデータの不整合で止まってしまった場合
———————————————————————
停止した原因となったクエリを1つスキップ(手動で対応でも可)
→ SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
レプリケーションを再開させる
→ START SLAVE SQL_THREAD;
———————————————————————
■スレーブの作り方 (その他)
———————————————————————
方法①. dump して restore
方法②. フォルダー毎コピー
特定のテーブルだけレプリケーション
特定のだけダンプする
STEP1) FLUSH TABLES WITH READ LOCK;
STEP2) mysqldump --lock-all-tables --databases データベース > for_slave_dump.sql
STEP3) SHOW MASTER STATUS;
STEP4) UNLOCK TABLES;
STEP5)あとはスレーブにダンプを適用してSLAVE設定を行う
* SLAVE側のオプションファイル(my.cnf)で同期しないDBを設定
(例)
replicate-wild-ignore-table = mysql.%
replicate-wild-ignore-table = not\_repl.%
—————————— 今回の自分メモ ———————————
※ シンボリックリンクで/usr/local/mysql/data以外に置いてあったデータのコピーを忘れてきてしまいまい
CHANGE MASTERでログポジションを変えて再設定しました。
※ MYSQLのtmpディレクトリーの設定を変更しました。
※ リモートからColinux上のMYSQLに接続するためにFIrewallのNAT設定を変更しました。