Ubuntu Server セットアップ備忘録 (14) - MySQL レプリケーション
Ubuntu Server の MySQL を Master に、MacOSX の MySQL を Slave に設定しました。
1. Master 側 (Ubuntu)
- /etc/mysql/my.cnf の [mysqld] セクションにある 『server-id=1』『log_bin=/var/log/mysql/mysql-bin.log』のコメントアウトを外す。
- $ sudo /etc/init.d/mysql restart
- $ mysql -u user -ppassword
- mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.24.0/255.255.255.0' IDENTIFIED BY '{repl_pass}';
- mysql> FLUSH TABLES WITH READ LOCK;
- mysql> SHOW MASTER STATUS; → 表示された File と Position をメモ
- $ cd /var/lib/mysql/
- $ tar cvf ~/db_name.tar ./db_name/
- mysql> UNLOCK TABLES;
2. Slave 側 (Mac)
- $ scp user@ubuntu:~/db_name.tar ./
- $ tar xvf db_name.tar
- $ chmod 660 db_name/*
- $ chmod 700 db_name/
- $ sudo chown -R _mysql:wheel db_name/
- $ cd /usr/local/mysql/
- $ sudo mv ~/db_name/ ./data/
- /etc/my.cnf の [mysqld] セクションに server_id=11 を追記。
- システム環境設定のパネルから mysql を再起動。
- $ ./bin/mysql -u user -ppassword
- mysql> CHANGE MASTER TO MASTER_HOST='{ip_address_of_ubuntu}', MASTER_USER='repl', MASTER_PASSWORD='{repl_pass}', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=90; ← 上でメモしたもの
- mysql> START SLAVE;
- mysql> SHOW SLAVE STATUS\G → Slave_IO_Running と Slave_SQL_Running が 'yes' なのを確認
追記(2010/9/22):
- レプリケーションのチェーンを構成する場合は、中間(SLAVE兼MASTER)になるサーバのmy.cnfに「log-slave-updates」を追加する必要がある。(デフォルトではSLAVEとして実行されたクエリはバイナリログに出力されず、下流に伝播しないため。)
参考: