MySQLでレプリケーションしてみる(mysqld_multi)
mysqld_multiでレプリケーションしてみる。
共通設定
レプリケーションの設定をする。
$ sudo vi /etc/my.cnf [mysqld1] ・・・ server-id=1 ←追加 log-bin ←追加 [mysqld2] ・・・ server-id=2 ←追加
下記の手順で、設定を反映する。
mysqldを停止。
$ sudo service mysqld_multi stop
ちょっと待って、止まってるのが確認できたら、
$ ps aux | grep mysql
起動し直す。
$ sudo service mysqld_multi start
restartだとなぜか反映されなかった。 $ sudo service mysqld_multi restart
マスター側の設定
レプリケーション用のユーザーを作成し、ロックした後、FileとPositionを確認する。
$ mysql -h 127.0.0.1 -P 3306 -u root mysql> GRANT REPLICATION SLAVE ON *.* TO repl@localhost IDENTIFIED BY 'password'; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 254 | | | +------------------+----------+--------------+------------------+ mysql> quit
ダンプを取得する。。
$ mysqldump -h 127.0.0.1 -P 3306 -u root --all-databases --lock-all-tables > dump.db
ロックを解除する。
$ mysql -h 127.0.0.1 -P 3306 -u root mysql> UNLOCK TABLES; mysql> quit
スレーブ側の設定
ダンプを取り込む。
$ mysql -h 127.0.0.1 -P 3307 -u root < dump.db
マスターの情報を設定し、レプリケーションを開始する。
$ mysql -h 127.0.0.1 -P 3307 -u root mysql> CHANGE MASTER TO MASTER_HOST='127.0.0.1', MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysql-bin.000001', ←覚えておいたFile MASTER_LOG_POS=254; ←覚えておいたPosition mysql> START SLAVE;
両方YesになっていればOK。
mysql> SHOW SLAVE STATUS\G
・・・
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
・・・
確認
マスター側でデータベースを作成。
$ mysql -h 127.0.0.1 -P 3306 -u root mysql> create database sample; mysql> quit
スレーブ側で作成されているのが確認できる。
$ mysql -h 127.0.0.1 -P 3307 -u root mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | sample | | test | +--------------------+