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: