mysqlのreplicationの構築を検証してみたかったので、Dockerを使って環境構築をしてみました。
docker-composeを使って、コマンド一つでmaster, slave両方管理出来るようにしています。
githubにあげてみたので、よかったら使ってみて下さい。
https://github.com/te-nu/mysql_replication_by_docker
やったこと
mysqlのコンテナを2台起動する
まずはmysqlのコンテナを2台起動するためのdocker-compose.ymlを書きました。
version: '3' services: master: image: mysql:5.7 environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes volumes: - ./master.cnf:/etc/mysql/conf.d/master.cnf networks: web_net: ipv4_address: 192.168.99.11 slave: image: mysql:5.7 environment: - MYSQL_ALLOW_EMPTY_PASSWORD=yes volumes: - ./slave.cnf:/etc/mysql/conf.d/slave.cnf networks: web_net: ipv4_address: 192.168.99.12 networks: web_net: driver: bridge ipam: config: - subnet: 192.168.99.0/25
特筆すべき点としては/etc/mysql/conf.d/に設定ファイルを入れると読み込まれる挙動を生かしてmaster.cnfとslave.cnfをそれぞれコンテナ内の/etc/mysql/conf.dに入れています。
また、レプリケーション用のアカウント追加の際にIPアドレスが必要になるためコンテナ2つにそれぞれ固定IPを割り振っています。
実際に立ち上げてみます。
$ docker-compose up -d
Creating mysqlreplicationbydocker_slave_1 ... done
Creating mysqlreplicationbydocker_master_1 ... done
$ docker-compose ps
Name Command State Ports
-------------------------------------------------------------------------------------
mysql_replication_by_docker_master_1 docker-entrypoint.sh mysqld Up 3306/tcp
mysql_replication_by_docker_slave_1 docker-entrypoint.sh mysqld Up 3306/tcp
立ち上がりました。あとは設定ファイルを追加し、レプリケーション用のコマンドを打っていきます。
設定を追加する
master.cnfとslave.cnfに以下の設定を追加します。
master.cnf
[mysqld] log-bin server-id=101
slave.cnf
[mysqld] server-id=102
設定後はmysqldの再起動が必要なので、コンテナを再起動させます。
$ docker-compose restart
あとはコンテナ内に入ってレプリケーションを起動させます。
まずはmasterに入ってレプリケーション用のアカウントを作ります。ここでIPを入力するのでコンテナのIPを固定にしました。
$ docker-compose exec master mysql -uroot mysql> create user 'repl'@'192.168.99.12' identified by 'test-password'; mysql> grant replication slave on *.* to 'repl'@'192.168.99.12';
あとはslaveに入り以下のコマンドを叩いて設定・実行します。
$ docker-compose exec slave mysql -uroot
mysql> change master to
-> master_host="192.168.99.11",
-> master_user="repl",
-> master_password="test-password";
start slave:
これでslaveの設定ができました。軽く確認してみます。
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.99.11
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: 19cc04f89d07-bin.000003
Read_Master_Log_Pos: 778
Relay_Log_File: ea6c96b8103c-relay-bin.000004
Relay_Log_Pos: 1005
Relay_Master_Log_File: 19cc04f89d07-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
-- 以下省略
動いてそう。
masterでhogeスキーマを作ります。
$ docker-compose exec master mysql -uroot mysql> create database hoge;
slaveでも作られたか確認
$ docker-compose exec slave mysql -uroot mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | hoge | | mysql | | performance_schema | | sys | +--------------------+
hogeスキーマが作られてました。
ミニマムなレプリケーションの設定の検証ができたので、台数増やしたり設定を追加したりとプラスで色々実験できそうです。
![エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド](https://images-fe.ssl-images-amazon.com/images/I/41oqE-9dM2L._SL160_.jpg)
エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド
- 作者: 奥野幹也
- 出版社/メーカー: 技術評論社
- 発売日: 2010/06/12
- メディア: 大型本
- 購入: 16人 クリック: 204回
- この商品を含むブログ (35件) を見る