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’;

slave_user

    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)

slave_start

    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

show_slave

マスター側でのTruncate/InsertとSlave側での確認

マスター
master_1

スレーブ
slave_2

※ 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設定を変更しました。