ubuntu 12.04 LTS on vagrantでmysqlレプリケーションしてみた

vagrantのマルチVM設定

vagrant boxを追加する

vagrant box add precise64 http://files.vagrantup.com/precise64.box

任意のディレクトリでvagrant initしてVagrantfileを修正

mkdir mysql_repl
cd mysql_repl
vagrant init
vim Vagrantfile

以下をVagrantfileに記述

Vagrant::Config.run do |config|
  config.vm.box = "precise64"
  config.vm.define :db_master do |vm_config|
    vm_config.vm.network :hostonly, "192.168.33.10"
  end
  config.vm.define :db_slave do |vm_config|
    vm_config.vm.network :hostonly, "192.168.33.11"
  end
end

インスタンスを起動する

vagrant up db_master
vagrant up db_slave

mysql-serverのインストール

db_master、db_slaveにmysql-server-5.5をインストール

sudo aptitude update
sudo aptitude install mysql-server-5.5
mysql_secure_installation

masterの設定

db_masterでmy.cnfのbind-addressを無効にし、server-id、log_binを有効にして再起動

vagrant ssh db_master
sudo vi /etc/mysql/my.cnf
sudo service mysql restart

レプリケーション用のユーザとデータベースを作成

mysql -u root -p
grant replication slave on *.* to repl@'192.168.33.%' identified by 'slavepass';
create database repldb;

slaveの設定

db_slaveでmy.cnfのserver-idを2に変更して、mysql-serverを再起動

vagrant ssh db_slave
sudo vi /etc/mysql/my.cnf
sudo service mysql restart

slaveとして設定

mysql -u root -p
change master to master_host='192.168.33.10', master_user='repl', master_password='slavepass';
start slave;

masterで作ったreplデータベースがレプリケーションされていることを確認

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| repldb             |
+--------------------+
4 rows in set (0.00 sec)

いままで、こういった実験をするのは個人的に若干敷居が高かったのですが、vagrantを使うとラクにいろいろ試せて気持ちいいです。