Ubuntu Server セットアップ備忘録 (14) - MySQL レプリケーション

Ubuntu Server の MySQL を Master に、MacOSXMySQL を 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として実行されたクエリはバイナリログに出力されず、下流に伝播しないため。)

参考: