MySQL資料一覧

MySQLレプリケーション設定

2014/8/21更新

対応バージョン: 5.1.73

2台のMySQLサーバでレプリケーションを構成する手順を示す。

マスタ/スレーブで同じ作業を実施するものと別々の作業を実施するものがあるので注意すること。

レプリケーション用ポート開け(マスタ/スレーブとも)

レプリケーション用に3306/tcpポートを開ける。

# cd /etc/sysconfig
# cp -p iptables iptables.YYYYMMDD
# vi iptables

以下の行を追加
# MySQL Replication
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

設定を有効にするためにiptablesを再起動する。

# service iptables restart

my.cnf設定変更(マスタ側)

マスタを識別するための一意のIDを割り当てる。IDは任意の数字でよい。

# cd /etc
# cp -p my.cnf my.cnf.YYYYMMDD
# vi my.cnf

(以下の設定を追加)

[mysqld]
log-bin=mysql-bin <--- 固定
server-id=121 <------- マスタ識別ID

設定を有効にするためにmysqldを再起動する。

# service mysqld restart

スレーブ側から接続する為のアカウントを作成する。

# mysql -u root -p
mysql> grant replication slave on *.* to repl identified by '<パスワード>';

初期データ移行

マスタのデータをスレーブ側に一旦持っていく。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+

mysql> flush tables with read lock;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000001 |      471 |              |                  |
+------------------+----------+--------------+------------------+

ここで表示されたFileとPositionはスレーブ側の設定で使用するのでメモしておく。

いったん別端末を起動してデータをダンプし、スレーブにコピーする。

# mysqldump -u root -p --all-databases --lock-all-tables --events > /var/tmp/dbdump.db
# scp /var/tmp/db.dump root@<スレーブ側IPアドレス>:/var/tmp

コピーが終わったらロックを解除する。

mysql> unlock tables;

my.cnf設定変更(スレーブ側)

スレーブを識別するための一意のIDを割り当てる。IDは任意の数字でよい。

# cd /etc
# cp -p my.cnf my.cnf.YYYYMMDD
# vi my.cnf

(以下の設定を追加)

[mysqld]
server-id=122 <------- スレーブ識別ID

設定を有効にするためにmysqldを再起動する。

# service mysqld restart

先ほどマスタで作成したダンプデータを取り込む。

# mysql -u root -p < /var/tmp/db.dump
# mysql -u root -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| test               |
+--------------------+

マスタ情報を登録登録する(マスタ側のshow master statusの結果を使用)

mysql> change master to
master_host='xxx.xxx.xxx.xxx', <-------- マスタのIPアドレス
master_user='repl', <------------------- レプリケーション用に作成したアカウント
master_password='********', <----------- 上記アカウントのパスワード
master_log_file='mysql-bin.000001', <--- マスタ側show master statusのFile
master_log_pos=471; <------------------- マスタ側show master statusのPosition

スレーブを開始する。

mysql> start slave;
mysql> quit

テスト

マスタ側で作成したDBがスレーブ側にコピーされていることを確認する。

マスタ側

mysql> create database repltest;
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| repltest           |
| test               |
+--------------------+

スレーブ側

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| repltest <---------|-- 作成されている
| test               |
+--------------------+

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.1.121
                  Master_User: repl
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000001
          Read_Master_Log_Pos: 722
               Relay_Log_File: mysqld-relay-bin.000002
                Relay_Log_Pos: 431
        Relay_Master_Log_File: mysql-bin.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 722
              Relay_Log_Space: 587
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error: