MySQLでレプリケーションしてみる
【参考】 mysql レプリケーション設定 | 手順書.com http://tejunsho.com/mysql/20110603000166.html MySQL 5.5 のレプリケーション設定方法 | Check!Site http://www.checksite.jp/mysql-replication/
VagrantにCentOS6.5が入ってなければ追加しておく。
$ vagrant box add centos65 https://github.com/2creatives/vagrant-centos/releases/download/v6.5.3/centos65-x86_64-20140116.box
DBサーバを2台用意
VagrantでDBサーバを2台用意する。
まず、マスター側のサーバを用意する。
$ mkdir master_db $ cd master_db $ vagrant init centos65 $ vi Vagrantfile config.vm.network "private_network", ip: "192.168.33.11" $ vagrant up $ vagrant ssh
MySQLをインストールする。
master_db$ sudo yum -y install mysql-server master_db$ sudo service mysqld start master_db$ sudo chkconfig mysqld on
スレーブ側も同様に用意する。
$ mkdir slave_db ・・・ $ vi Vagrantfile config.vm.network "private_network", ip: "192.168.33.12" ・・・
マスター側の設定
他のサーバと重複しないようserver-idを指定し、
バイナリログを取るよう設定する。
master_db$ sudo vi /etc/my.cnf [mysqld] ・・・ server-id=1 ←追加 log-bin ←追加
master_db$ sudo service mysqld restart
MySQLに接続する。
master_db$ mysql -u root
レプリケーション用のユーザーを作成する。
今回は「repl」というユーザー名で作成する。
mysql> GRANT REPLICATION SLAVE ON *.* TO repl@'%' IDENTIFIED BY 'password';
データベースが更新されないようロックする。
mysql> FLUSH TABLES WITH READ LOCK;
FileとPositionを覚えておく。
mysql> SHOW MASTER STATUS; +-------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +-------------------+----------+--------------+------------------+ | mysqld-bin.000001 | 248 | | | +-------------------+----------+--------------+------------------+
mysql> quit
ダンプを取得し、スレーブ側のサーバに転送する。
master_db$ mysqldump -u root --all-databases --lock-all-tables > dump.db master_db$ scp dump.db vagrant@192.168.33.12:
mysqldumpしたとき下記の警告が出た。問題ないのかよく分からない。 「Warning: Skipping the data of table mysql.event. Specify the --events option explicitly.」
ロックを解除する。
master_db$ mysql -u root mysql> UNLOCK TABLES;
スレーブ側の設定
server-idを設定する。
slave_db$ sudo vi /etc/my.cnf [mysqld] ・・・ server-id=2 ←追加
※「read_only」も指定したほうがいいかも
slave_db$ sudo service mysqld restart
ダンプデータを取り込む。
slave_db$ mysql -u root < dump.db
MySQLに接続する。
slave_db$ mysql -u root
マスターの情報を登録する。
mysql> CHANGE MASTER TO MASTER_HOST='192.168.33.11', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysqld-bin.000001', ←覚えておいたFile MASTER_LOG_POS=248; ←覚えておいたPosition
レプリケーションを開始する。
mysql> START SLAVE;
下記のコマンドでスレーブの状態を確認できる。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ならOK。
mysql> SHOW SLAVE STATUS\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.33.11 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysqld-bin.000001 Read_Master_Log_Pos: 106 Relay_Log_File: mysqld-relay-bin.000002 Relay_Log_Pos: 252 Relay_Master_Log_File: mysqld-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ・・・
確認
マスター側でデータベースを作成してみる
mysql> create database sample;
スレーブ側で確認すると、反映されているのが確認できる。
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | sample | | test | +--------------------+