MySQLのレプリケーション

実際に関わる機会がなく今ひとつ理解が不十分だったものですから、
自宅の余剰PCにてMySQLレプリケーションを試しました。
macMySQLはportで入れた気がしますし、バージョンなど割と適当。

サーバ構成

* OS* MySQL*
master* OSX 10.5.6* MySQL 5.0.51a*
slave* ubuntu 7.10* MySQL 5.1.30*

マスターの設定

my.cnfの設定
sync_binlog=1 

を追加した。

インスタンスの起動
$ sudo /etc/init.d/mysqld start
スレーブからの接続用アカウントの作成
   grant replication slave on *.* to replication@slave-host identified by 'replpass';
スレーブへのリストア用バックアップ作成

mysqlのdata領域へcdして作成したアーカイブrsyncでスレーブ側に送る。

$ tar -cvf /tmp/mysql-restore.txt .

マスターの設定は終了!

スレーブの設定

my.cnfの設定
read_only

デフォルトに上記を追加した。SLAVE権限を持たないユーザからの更新を防ぐ。

スレーブのデータをリストアしてインスタンスを起動
$ tar -xvf /tmp/mysql-restore.txt
CHANGE MASTER TO文でマスターの接続設定

マスターのバイナリログの開始位置

mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |    38748 |              |                  | 
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
スレーブのMASTER情報を設定する。


CHANGE MASTER TO MASTER_HOST='master-host',
MASTER_PORT=3306,
MASTER_USER='replication',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=38748;

CHANGE MASTER TO文を実行すると、データディレクトリに次のファイルが作成される。

  • master.info
  • relay-log.info
  • slave-host-relay-bin.index
  • slave-host-relay-bin.000001
mysql> start slave;

成功したっぽいログが出たので、マスターでCREATE TABLEしたテーブル。
同じテーブルがスレーブにも作られるのを確認。 おつかれさま。


現場で使える MySQL (DB Magazine SELECTION)

現場で使える MySQL (DB Magazine SELECTION)