LoginSignup
36
36

More than 5 years have passed since last update.

Docker で レプリケーションつきの MySQL を立ち上げる

Posted at

Docker を使って、Master-Slave のレプリケーションを行うMySQLサーバをセットアップするサンプルスクリプトです。

概略

  • 一連のスクリプトを順番に実行するだけで、Master-SlaveのMySQLサーバが動きます
  • MySQLサーバは、Dockerのコンテナの中で動きます
  • DBの実体は、Host側に持ち、それをコンテナがマウントして使います

私は、MySQLもDockerも勉強中で、あまり詳しくありません。本格的な運用に耐えるものではありませんが、gitlabやredmineのような、開発者用のWebアプリを自動バックアップ付きでサクっと立ち上げる時には参考になるかもしれません。

実際に使用する際は、必ずご自分で各スクリプトの内容を確認して、パスワード等を変更してお使いください。

下記のスクリプトを参考にして作成しました。

準備

  • Dockerをインストールしたサーバを二台用意してください
  • 両方にmysql-client をインストールしてください
  • Slave から Master の ポート 3306 に接続できるようにしてください

使い方

Master用ホストで以下のコマンドを実行します。

$ git clone https://github.com/essa/docker-mysql-repl.git
$ cd docker-mysql-repl
$ sudo docker build -t essa/mysql-repl .
$ sudo ./create_repl.sh
$ ./copy_replica.sh SLAVE_HOST

これで、以下のものができます。

  1. MySQLが動くDocker イメージ
  2. 初期化されたMasterのDB ( data/mysql )
  3. レプリケーション用ユーザの設定
  4. Master と同期した Slave のDB ( replica/ 以下 )
  5. 確認用の repltest という DBと test というテーブル

次に replica/ 以下のファイルを Slave用ホストに転送します。

Master から Slave にssh できれば、以下のスクリプトで転送できます。

$ ./copy_replica.sh SLAVE_HOST

次にMasterでMySQLを起動します。

$ sudo ./start_master.sh 
$ mysql -uroot -proot -h 127.0.0.1 -AN  repltest

Slave側でも、転送した replica/ ディレクトリで、Dockerイメージを作成してから、MySQLを起動します。

$ cd replica
$ sudo docker build -t essa/mysql-repl .
$ sudo ./start_slave.sh MASTER_HOST
$ mysql -uroot -proot -h 127.0.0.1 -AN repltest

この状態で、Master側のmysql からデータを追加、変更すると、その結果を Slave側で見ることができます。

(Master側で)
mysql
INSERT INTO test values(12345, "test");

(Slave側で)
mysql
SELECT * from test;

マスター側のMySQLサーバのポートは、start_master.shの中の以下のオプションでコントロールされます。

-p 0.0.0.0:3306:3306

これは、コンテナ内の3306ポートを、ホストの全てのインターフェースで同じ3306でオープンするという意味です。誰でも接続できますので、インターネット上のサーバで運用する場合は、必ず、ファイアーウォールでSlaveホスト以外からはアクセスできないように設定してください。

Masterホスト内の他のコンテナでアプリケーションを起動して、接続先をホストのDocker用ネットワークのアドレスにすれば、このMySQLを使うことができます。

36
36
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
36
36