なぜビルドドッカーベース?
- 限られたリソース
- 仮想マシンが必要とされているマシンの構成に設定し、複雑なステップは、MySQLをインストールします
- 複数の容器は、単一のマシンドッカー上で実行することができます
- ドッカーコンテナは、紛争の独立した、個別のIPませんです
- ドッカーは、コンテナ内の第二のレベルを開始するには、簡単な手順を使用します
ドッカーを使用して、マスターサーバーからの構造
まずプルドッキングウィンドウミラー、我々はここでのMySQLの5.7バージョンを使用します。
ドッキングウィンドウプルのmysql:5.7
この画像は、その後、必要が2つの別々の容器マスタから開始する容器を開始するために使用され
マスター(主):
3339 -pドッキングウィンドウの実行:3306 --nameのmysql-マスター-e MYSQL_ROOT_PASSWORD = 123456 -d mysqlの:5.7
スレーブ(から)
3340 -pドッキングウィンドウの実行:3306 --nameのmysql-スレーブ-e MYSQL_ROOT_PASSWORD = 123456 -d mysqlの:5.7
外国の港マスターマップは3339で、外部ポートスレーブマッピングは3340です。ドッキングウィンドウコンテナは互いに独立しているので、各コンテナが別のコンテナが同じポートを使用し、競合しないように、独自の独立したIPを持っています。ここでは、MySQLのデフォルトポート3306を使用してみてください、またはIP接続のドッキングウィンドウコンテナmysqlのことで、この問題には表示されない場合があります。
使用ドッキングウィンドウのpsコマンドが実行されているコンテナを表示するには:
このとき、他のツールは、接続のMySQLのNavicatをテストするために使用することができます
設定マスター(メイン)
マスタードッキングウィンドウのexec -it 5ddad8c2f368 / binに/ bashのコマンドを使用してコンテナの内部にもドッキングウィンドウのexec -itのmysql-マスター/ binに/ bashのコマンドで入力することができます。5ddad8c2f368はコンテナのIDであり、MySQLのマスターは、容器の名前です。
CDには、ディレクトリに/etc/mysql/mysql.conf.dスイッチを/etc/mysql/mysql.conf.d、その後、vimのmysqld.cnf my.cnfを編集します。VIM:この時点では、bashのうち報告されるコマンドが見つかりません、我々は、ドッキングウィンドウコンテナ内で自分自身をvimのインストールする必要があります。vimのインストールにvimのコマンドをインストールするのapt-getを使用して
これは、次の質問に表示されます。
成功したのvimをインストールするには、再びvimのインストールapt-getを実行して、apt-getの更新を実行します。その後、我々は、my.cnfの中で、以下の設定を追加、編集のmy.cnfにVimを使用することができます。
[mysqldを】
##のみに同じLAN内の注意
サーバID = 100
バイナリログがオンになって##、あなたは簡単に取得することができます(キー)
ログ・ビン= mysqlのビン
設定が完了したら、有効にするMySQLサービスの設定を再起動する必要があります。利用サービスMySQLの再起動、再起動。再起動MySQLサービスを停止するドッキングウィンドウコンテナを行います、我々はまた、ドッキングウィンドウの開始のmysql-マスターコンテナを起動する必要があります。
次のステップは、マスタデータベースのデータ同期ユーザーに作成され、ユーザは、データベースからのデータとの間の一次同期のための許可スレーブレプリケーションスレーブとREPLICATION CLIENT権限を付与します。
最初に接続MySQLデータベース
ルート@ 5ddad8c2f368:/#mysqlの-uroot -p123456
「123456」によって識別されるユーザ「スレーブ」@「%」を作成します。
。GRANT REPLICATION SLAVE、*上の複製CLIENT * TO '奴隷' @ '%';
コピーに付与されたアカウントの複製CLIENT権限は、ユーザーがレプリケーションの状態を判断するには、SHOW MASTER STATUSのは、SHOW SLAVE STATUSとSHOW BINARY LOGSを使用することができますコピーします。
コピーアカウントに付与されたレプリケーションスレーブ権限、コピーが実際に動作することができます。
スレーブの設定(から)
そして、コンフィギュレーション・ファイルに追加してマスター(プライマリ)を設定すると、my.cnfのスレーブを、次のとおりです。
[mysqldを】
##に配置されたSERVER_ID、サーバだけ-ID = 101に注意を払います
他のマスタースレーブスレーブを調製するために、バイナリログ開口##を使用する場合
ログ・ビン= mysqlのスレーブ・ビン
## relay_log設定リレーログ
relay_log = EDU-mysqlの - リレー - ビン
コンフィギュレーションと一貫性(一次)コンテナのドッキングウィンドウのマスターのMySQLサービスの操作や設定を再起動する必要があります後。
ほとんどのバイナリログに関連する多くの側面をログリレー。違いは次のとおりです。その後、SQLスレッドがサーバにリレーログログコンテンツやアプリケーションを読み込み、サーバI / Oスレッドから、ローカルファイルサーバーから来てマスタのバイナリログレコードを読み込み、サーバとプライマリサーバようにデータが一致しています。
リンクマスタ(プライマリ)とスレーブ(から)
mysqlのにマスターでは、ショーマスターのステータスを実行します。
ファイルと位置フィールドの値の背後にある後者の操作が完了する前に、使用され、マスターライブラリは何もできないようにする必要があり、それ以外の場合は、状態変化の原因となります、ファイルと位置フィールドの値に変更します。
スレーブでは、MySQLを入力して実行します
CHANGE MASTER TOのMASTER_HOST = '172.17.0.2'
master_user = 'スレーブ'、
master_password = '123456'、
MASTER_PORT = 3306、
MASTER_LOG_FILE = 'mysqlの-bin.000001'、
MASTER_LOG_POS = 617、
MASTER_CONNECT_RETRY = 30。
コマンド説明:
master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip
master_port:Master的端口号,指的是容器的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒
在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。
正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。
SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。
主从复制排错:
使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。
- 网络不通
- 检查ip,端口
- 密码不对
- 检查是否创建用于同步的用户和用户密码是否正确
- pos不对
- 检查Master的 Position
测试主从复制
测试主从复制方式就十分多了,最简单的是在Master创建一个数据库,然后检查Slave是否存在此数据库。
Master:
Slave:
完整的主备流程图
最後に、私たちは完全なスキームBノードに、その後の同期、ノードAが実行時に更新ステートメントを見てみましょう。
それは見ることができます:ビンログを書き込んでいる間、マスターデータベース更新要求は、クライアントを実行更新ロジック内政後に受信されます。
A.とライブラリBによるマスターライブラリ間の長い接続を維持 ライブラリーは、長いサービスライブラリ機器Bが接続された専用の主雌ねじを有しています。
トランザクションログ同期プロセスを完了し、この次のとおりです。
- 図1に示すように、変更マスタリポジトリBコマンドによって調製においてIPホスト、ポート、ユーザー名、パスワード、およびその位置からバイナリログ開始要求のセットをライブラリファイル名とオフセットを含むログの場所。
- 図2に示すように、スレーブは侯は、2つのスレッド、IO_THREADとSQL_THREADを開始するライブラリによって調製スタンバイ・データベースB、上のコマンドを実行し始めます。これは、メインのライブラリとの接続を確立する責任IO_THREAD。
- 図3に示すように、メインA完全なライブラリ検証ユーザー名、パスワード、BはBに発行された、ローカルバイナリログからの読み取り、ライブラリに従って調製開始位置上を通過
- 図4は、バイナリログは、ログ転送(中継ログ)として知られているローカル・ファイルに書き込まれたバックアップリポジトリBを、取得します。
- 図5は、SQL_THREAD読み取りトランジットログ、コマンドを解析するログ、および実行します。
これらは、他の複数の関連記事にドッカー構造と原則、してください注意を払うからMySQLのマスターコピーの内容に基づいています!