レプリケーションとは
- レプリケーションとはデータを複製(レプリカ)して別サーバで保持する機能。
- レプリケーションの方法としては、マスタースレーブ構成、双方向レプリケーションなどがある。
マスタースレーブ構成とは
マスター(単一)サーバーと、スレーブ(単一または複数)サーバーで構成されている
マスター
- データを参照・更新できる
- 更新内容をスレーブに転送する
- マスターは複数のスレーブを持てる
スレーブ
- データを参照できる(更新しない)
- スレーブは1つのマスターのみ持てる
マスタースレーブ設定方法
マスター側の設定
- my.cnfの編集 例: etc/my.cnf
my.cnf
# Replication設定
server-id = 1
log-bin = mysql-bin
- ファイル編集後にmysqlを再起動する
# service mysqld restart
- レプリケーション用ユーザ作成
# mysql -u root -p
--ユーザ作成 ユーザ名: repl パスワード:repl
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'xxx.xxx.xxx.xxx' IDENTIFIED BY 'repl'
--ユーザ確認
mysql> SELECT user, host FROM mysql.user WHERE user = 'repl';
- マスターDBのダンプファイル作成
# mysql -u root -p
// マスター側のステータス確認(ログファイル名とポジション)
mysql> SHOW MASTER STATUS \G;
File: mysql-bin.000030
Position: 4421
// mysqlをexitしてmysqldumpコマンドを実行
# mysqldump -u root -p \
--all-databases \
--events \
--single-transaction \
--flush-logs \
--master-data=2 \
--hex-blob \
--default-character-set=utf8 > master_db.sql
// ダンプファイルをスレーブサーバーにコピーする
# scp master_db.sql root@xxx.xxx.xxx.xxx;
スレーブ側の設定
- my.cnfファイルの編集 例: etc/my.cnf
my.cnf
# Replication設定
server-id = 2
log-bin = mysql-bin
read_only
- ファイル編集後にmysqlを再起動する
# service mysqld restart
- マスターDBのダンプの読込み
# mysql -u root -p < master_db.sql
- レプリケーション設定
# mysql -u root -p
mysql> CHANGE MASTER TO
MASTER_HOST='XXX.XXX.XXX.XXX', --マスターのIPアドレス
MASTER_PORT=3306, --マスターのポート番号
MASTER_USER='repl', --マスター側で作成したレプリケーション用ユーザ名
MASTER_PASSWORD='repl' --レプリケーション用ユーザのパスワード
MASTER_LOG_FILE='mysql-bin.000030' --上記で調べたマスター側のバイナリログファイル名
MASTER_LOG_POS=4421; --上記で調べたマスター側のバイナリログの開始位置
レプリケーションの開始
--スレーブ側で以下を実行
mysql> START SLAVE;
レプリケーションの確認
--スレーブ側で以下を実行
mysql> SHOW SLAVE STATUS \G
-- 以下の項目が「Yes」ならスレーブ状態になっている
Slave_IO_Running: Yes
Slave_SQL_Running: Yes