MySQL

2012-08-14, mysql

レプリケーションの設定をする

前提

マスタ機: オリジナルのデータベース(マスタ)が稼働するホストです。
スレーブ機: マスタと同じ内容のデータベースが作られるホストです。このホストのデータは読み取り専用になります(書き込みをしてしまうと、同期が壊れます)。

以下のSQLで生成されるtestという名前のデータベースがマスタ機にのみ存在する状態を想定しています。

CREATE DATABASE test DEFAULT CHARACTER SET 'utf8';
USE test;
CREATE TABLE t (v VARCHAR(255));
INSERT INTO t VALUES ('foo'),('bar');

マスタ機のTCP/3306ポートにスレーブ機から接続できる状態にします。下記はローカルIPからの接続をまとめて許可してしまう場合の設定例です。環境に応じて適切な設定をして下さい。

# iptables -I INPUT 4 -s 192.168.0.0/24 -j ACCEPT

設定(マスタ機)

my.cnfを編集します。

/etc/my.cnf

server-id=1000
log-bin=master-bin

MySQLを再起動し、レプリケーション用のユーザを作成します。

# service mysqld restart
# mysql -uroot
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%' IDENTIFIED BY 'pass';

以下のようなオプションを指定して、ダンプファイルを生成します。

# mysqldump -uroot --master-data --single-transaction test > test.sql

生成されたtest.sqlをスレーブ機に転送して下さい。

設定(スレーブ機)

my.cnfを以下のように編集します。

/etc/my.cnf

server-id=1001
replicate-wild-do-table=test.%

MySQLを再起動し、先ほど転送したダンプファイルを使用して同一構成のデータベースを作成します。

# service mysqld restart
# mysql -uroot
mysql> CREATE DATABASE test DEFAULT CHARACTER SET 'utf8';
mysql> USE test;
mysql> SOURCE test.sql;

マスタサーバを設定し、同期をスタートします。

mysql> CHANGE MASTER TO master_host='192.168.0.1(マスタ機のIP)',master_port=3306,master_user='repl',master_password='pass';
mysql> START SLAVE;

以下のコマンドでスレーブの稼働状態を確認できます。

mysql> SHOW SLAVE STATUS\G

同期がうまくいかない場合、Slave_IO_Running, Slave_SQL_Runningが共にYesになっているか、Last_IO_Errorにメッセージが出力されていないか等を確認すると良いでしょう。

参考URL

Chapter 1. Replication. MySQL Admin Cookbook, 9781847197962

この記事は役に立ちましたか?