Docker を使用して MySQL マスター/スレーブ レプリケーション環境を迅速に構築する方法の詳細な紹介

黄舟
リリース: 2017-03-04 14:51:58
オリジナル
1210 人が閲覧しました

MySQL を学習する過程では、さまざまなパラメーターの効果がテストされることがよくあります。現時点では、MySQL インスタンス (マスター/スレーブ インスタンスであっても) を迅速に構築する必要があります。

次のシナリオを考えてみましょう:

たとえば、--single-transaction パラメータが指定されている場合に、myisam テーブルに対する mysqldump の影響をテストしたいと考えています。

本来は既製のテスト環境で行いたかったのですが、テスト環境ではデータ量が多く、生成されたSQLファイルをテーブルから検索するのが困難です。

現時点では、テスト用にクリーンなサンプルのセットを用意することに特に熱心です。


現時点では、機能を迅速に構築することが特に必要です。多くの子供たちは、それをスクリプトで実現できないのかと尋ねるかもしれません。なぜドッカーを使うのか?

個人的な感想: スクリプトが重すぎて、ユーザーの作成、比較的長いデータベース初期化プロセス、MySQL の起動プロセスなど、多くの追加作業が必要です。私が必要としているのは、迅速に構築して迅速に破棄する機能です。

そしてこれが Docker の強みです。

以下は、docker を使用してインスタンスを起動するのにかかる時間です。スクリプトを使用して実行すると、これほど高速になることはありません。


# time  docker run --name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v //lib/mysql/slave://lib/mysql -p3307:-e MYSQL_ROOT_PASSWORD= -d mysql:
ログイン後にコピー


そこで、新しい MySQL マスター/スレーブ レプリケーション環境を約 30 秒で作成できる docker ベースのスクリプトを書きました

#!/bin/=/var/lib/mysql/=/var/lib/mysql/ - - - ---name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD= -d mysql:.--name slave -v /etc/slave.cnf:/etc/mysql/my.cnf -v $SLAVE_DIR:/var/lib/mysql --net=host -e 
MYSQL_ROOT_PASSWORD= -. -it master mysql -S /var/lib/mysql/mysql.sock -e LAVE ON *.* TO @;=`docker exec -it master mysql 
-S /var/lib/mysql/mysql.sock -e =`  |   =`  |  =-it slave mysql -S /var/lib/mysql/mysql.sock -e eplrepldocker exec -it slave mysql 
-S /var/lib/mysql/mysql.sock -e   /etc/ [ $? -eq  ];
      >> /etc/  >> /etc/  >> /etc//etc/
ログイン後にコピー

マスターの後は、スクリプト自体についてはあまり説明する必要はありません。スレーブ コンテナが起動されたら、引き続き一般的なマスター/スレーブ レプリケーション確立プロセスに従います。

主にコンテナの作成に関連するオプションについて話します。

docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
ログイン後にコピー


-v /etc/master.cnf:/etc/mysql/my.cnf: ローカル構成ファイルをコンテナー構成ファイルにマップする このように、ローカル構成を変更することでコンテナー構成を変更できます。ファイル効果。

-v $MASTER_DIR:/var/lib/mysql: ローカル ディレクトリをコンテナのデータ ディレクトリにマップします。これにより、データ ディレクトリの内容が簡単に表示されます。それ以外の場合は、/var/ に保存されます。デフォルトでは lib/docker/volumes ディレクトリにあるため、表示するのが非常に不便です。

--net=host: ホストのネットワークを共有すると、コンテナ間の通信の複雑さが大幅に軽減されます。

スクリプトの開始時に、前のコンテナーが削除されます。これには 2 つのステップが含まれます

1. docker コマンドを使用してコンテナーを削除します

2。オペレーティング システム コマンド経由 コンテナのデータ ディレクトリ。

削除しない場合、次のコマンドで再度コンテナを作成するときに、以前のデータ ディレクトリはクリアされずに直接ロードされます。これは、mysqld プロセスが開始される前に新しいインスタンスを開始するのと同等です。


docker run --name master -v /etc/master.cnf:/etc/mysql/my.cnf -v $MASTER_DIR:/var/lib/mysql  
--net=host -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.34
ログイン後にコピー

これは、パラメーターの効果をテストしたいだけで、新しいインスタンスを作成したくない場合は、docker コマンドを使用してコンテナーを削除し、構成ファイルを変更するだけで済みます。をクリックし、上記のコマンドでコンテナを作成します。

インスタンスを起動した後、インスタンスを再起動する操作を実行しました。テスト中に、 docker exec -it master bash などの操作を実行すると、コンテナーがダウンすることが判明したためです (ダウンの具体的な理由は、まだ分​​析されていません)が、インスタンスを再起動すれば問題ありません。

docker stop master slave
docker start master slave

sleep 3
ログイン後にコピー


ショートカット キーを設定します

mysql: mysql クライアント。他のホスト上の MySQL サーバーに接続できます。

master: master を実行してローカルのマスター インスタンスにログインすると、ホスト名とポートを指定する必要がなくなります。

salve: スレーブを実行してローカル スレーブ インスタンスにログインします。

上記は、Docker を使用して MySQL マスター/スレーブ レプリケーション環境を迅速に構築する方法についての詳細な紹介です。さらに関連する内容については、PHP 中国語 Web サイト (www.php.cn) に注目してください。


関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート