背景 先週、会社で MySQL レプリケーションのトレーニングを受けたので、今週末は学んだことを実践する予定です。 マスターサーバー: NAS 上の MySQL コンテナ mysql_master
スレーブサーバー: Mac mini 上の MySQK コンテナ mysql_slave
MySQLコンテナを準備する mysql_masterを準備する MySQLファイルを保存するディレクトリを2つ作成する mkdir -p /mnt/md1/disk4/mysql mkdir -p /mnt/md1/disk4/mysql-files テスト用のマスターMySQLノードを作成する [root@TNAS-2664 disk4]# docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_master -v /mnt/md1/disk4/mysql:/var/lib/mysql -v /mnt/md1/disk4/mysql-files:/var/lib/mysql-files mysql 3bebf0e21df6d9034ce8275b14ebb1616e11f5e2678b1e084d03c087ed91a72a NAS上で現在実行中のMySQLのコンテナIDを表示します [root@TNAS-2664 ~]# docker ps コンテナID イメージ コマンド 作成ステータス ポート名 40db0be51460 mysql "docker-entrypoint..." 44 秒前 29 秒前に起動 33060/tcp、0.0.0.0:3307->3306/tcp mysql_master db5f6a287a21 mautic/mautic "/entrypoint.sh ap..." 2 週間前 11 日前 0.0.0.0:8082->80/tcp mautic dc1eac509c70 qianliu/mediawikiwithcomposer "docker-php-entryp..." 2 週間前 11 日前 0.0.0.0:8086->80/tcp sarawiki b5c0a00f5f42 mysql "docker-entrypoint..." 2 週間前 11 日前 0.0.0.0:3306->3306/tcp, 33060/tcp mysql2 911c0a8987ba qianliu/mediawikiwithcomposer "docker-php-entryp..." 2 週間前 11 日前 0.0.0.0:8083->80/tcp qianliuwiki docker cpコマンドを使用してmy.cnfをホストマシンにコピーし、変更を加えます。 ディレクトリ cp 40db0be51460:/etc/mysql/my.cnf に移動します。 my.cnfに次の設定を追加します。 サーバーID = 1 gtid-mode = ON # (GTID によって複製) 強制_gtid_consistency =1 #(GTIDによって複製) ログビン = マスターログ binlog_format = 混合 ログ有効期限日数 = 14 同期バイナリログ = 1 ログビン信頼関数作成者 = 1 # マスターDB # binlog-ignore-db = mysql、information_schema、performance_schema、sys 自動増分増加 = 2 自動増分オフセット = 1 # スレーブDB # レプリケート無視DB = mysql、情報スキーマ、パフォーマンススキーマ、sys relay_log = リレーログ ログスレーブ更新 = ON docker cpを使用してmy.cnfをmysql_masterコンテナにコピーします。 docker cp my.cnf 40db0be51460:/etc/mysql/ mysql_slave と入力すると、権限ファイルが原因で my.cnf が無視されていることがわかります。これにより、my.cnf に書き込まれたばかりの設定が有効になりません。 [root@TNAS-2664 ~]# docker exec -it mysql_master /bin/bash ルート@40db0be51460:/#mysql -uroot -p123456 mysql: [警告] 誰でも書き込み可能な設定ファイル '/etc/mysql/my.cnf' は無視されます。 mysql: [警告] コマンドライン インターフェイスでパスワードを使用すると安全でない可能性があります。 MySQL モニターへようこそ。コマンドは ; または \g で終わります。 my.cnfの権限を664に変更します root@40db0be51460:/# chmod 644 /etc/mysql/my.cnf root@40db0be51460:/# 終了 my.cnfを有効にするにはmysql_slaveを再起動してください。 [root@TNAS-2664 ~]# docker で mysql_master を再起動します 9. マスターステータスを表示するにはmysql_masterと入力します。 mysql> マスターステータスを表示します。 +-------------------+----------+--------------+-------------------------------------------------+-------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +-------------------+----------+--------------+-------------------------------------------------+-------------------+ | master-log.000001 | 156 | | mysql、information_schema、performance_schema、sys | | +-------------------+----------+--------------+-------------------------------------------------+-------------------+ セット内の 1 行 (0.00 秒) mysql>終了 mysql_slaveコンテナを準備する Mac miniにMySQLファイルを保存するためのディレクトリを2つ作成する mkdir -p /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql mkdir -p /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql-files テスト用のmysql_slaveコンテナを作成する docker run -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 --name mysql_slave -v /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql:/var/lib/mysql -v /Volumes/MacintoshHDD_Data/mysql_slave_db/mysql-files:/var/lib/mysql-files mysql macminiで現在実行中のmysql_slaveのコンテナIDを表示します。 /Volumes/MacintoshHDD_Data/mysql_slave_db docker ps コンテナID イメージ コマンド 作成ステータス ポート名 8623ac99e5d4 mysql "docker-entrypoint.s…" 5 秒前 4 秒前にアップ 33060/tcp、0.0.0.0:3307->3306/tcp mysql_slave docker cpコマンドを使用してmy.cnfをホストマシンにコピーし、変更を加えます。 次のコマンドを実行して、mysql.cnf ファイルを docker で開きます。 my.cnfに次の設定を追加します。 サーバーID = 2 gtidモード = オン 強制GTID一貫性 = 1 ログビン = スレーブログ binlog_format = 混合 ログ有効期限日数 = 14 同期バイナリログ = 1 ログビン信頼関数作成者 = 1 # マスターDB # binlog-ignore-db = mysql、information_schema、performance_schema、sys 自動増分増加 = 2 自動増分オフセット = 2 # スレーブDB # レプリケート無視DB = mysql、情報スキーマ、パフォーマンススキーマ、sys relay_log = リレーログ ログスレーブ更新 = ON docker cpを使用してmy.cnfをmysql_masterコンテナにコピーします。 docker cp my.cnf 8623ac99e5d4:/etc/mysql/ my.cnfを有効にするにはmysql_slaveを再起動してください。 docker で mysql_slave を再起動する マスターステータスを表示するにはmysql_slaveと入力します mysql> マスターステータスを表示します。 +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ | ファイル | 位置 | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ | スレーブ ログ.000001 | 1460 | | mysql、information_schema、performance_schema、sys | f102ae13-5341-11eb-a578-0242ac110002:1-5 | +------------------+----------+--------------+-------------------------------------------------+------------------------------------------+ セット内の 1 行 (0.00 秒) レプリケーション用のmysqlユーザーを準備する mysql_master でレプリケーション用の mysql ユーザーを準備する mysql> 'slave'@'192.168.1.139' というユーザーを作成し、'slave' によって識別します。 クエリは正常、影響を受けた行は 0 行 (0.59 秒) mysql> 'slave'@'172.17.0.2' というユーザーを作成し、'slave' によって識別します。 クエリは正常、影響を受けた行は 0 行 (0.60 秒) mysql> 'slave'@'192.168.1.139' に *.* のレプリケーションスレーブ権限を付与します。 クエリは正常、影響を受けた行は 0 行 (0.19 秒) mysql> 'slave'@'172.17.0.2' に *.* のレプリケーション スレーブ権限を許可します。 クエリは正常、影響を受けた行は 0 行 (0.19 秒) mysql> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.10 秒) mysql>終了 mysql_slave でレプリケーション用の mysql ユーザーを準備する mysql> 'slave'@'192.168.1.108' というユーザーを作成し、'slave' によって識別します。 クエリは正常、影響を受けた行は 0 行 (0.02 秒) mysql> 'slave'@'172.17.0.6' というユーザーを作成し、'slave' によって識別します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> 'slave'@'192.168.1.108' に *.* のレプリケーションスレーブ権限を付与します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> 'slave'@'172.17.0.6' に *.* のレプリケーション スレーブ権限を付与します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) マイSQL> レプリケーション構成 mysql_master を設定する mysql> マスターを、master_host='192.168.1.139'、master_user='slave'、master_password='slave'、master_log_file='slave-log.000001'、master_port=3307、master_log_pos=1460 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 件 (1.17 秒) mysql> マスターを、master_host='192.168.1.139'、master_user='slave'、master_password='slave'、master_auto_position=1、get_master_public_key=1 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.45 秒) mysql_slaveを設定する mysql> マスターを、master_host='192.168.1.108'、master_user='slave'、master_password='slave'、master_log_file='master-log.000001'、master_port=3307、master_log_pos=156 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 個 (0.15 秒) mysql> マスターを、master_host='192.168.1.108'、master_user='slave'、master_password='slave'、master_auto_position=1、get_master_public_key=1 に変更します。 クエリは正常、影響を受けた行は 0 行、警告は 2 件 (0.14 秒) レプリケーションを有効にする mysql_masterでスレーブを起動する mysql> スレーブを起動します。 クエリは正常、影響を受けた行は 0 行、警告は 1 件 (0.00 秒) スレーブのステータスを確認すると、レプリケーションが正常に開始されていないことがわかりました。エラー メッセージが表示されます: ユーザー 'slave'@'172.17.0.1' のアクセスが拒否されました (パスワード使用: YES)。mysql_slave で対応するユーザーと権限を作成する必要があります。 mysql> スレーブステータスを表示します \G; ************************** 1. 行 **************************** Slave_IO_State: マスターに接続中 マスターホスト: 192.168.1.139 マスターユーザー: スレーブ マスターポート: 3307 接続再試行: 60 マスターログファイル: 読み取りマスターログ位置: 4 リレーログファイル: リレーログ.000001 リレーログ位置: 4 リレーマスターログファイル: Slave_IO_Running: 接続中 スレーブSQL実行中: はい レプリケート_Do_DB: レプリケート_無視_DB: mysql、情報スキーマ、パフォーマンススキーマ、sys テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログ位置: 0 リレーログスペース: 156 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 1045 Last_IO_Error: マスター '[email protected]:3307' への接続エラー - 再試行時間: 60 再試行: 2 メッセージ: ユーザー 'slave'@'172.17.0.1' のアクセスが拒否されました (パスワード使用: YES) 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバー ID: 0 マスターUUID: マスター情報ファイル: mysql.slave_master_info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 210110 13:02:12 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: 自動位置: 1 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: マスター公開キーパス: マスター公開キーの取得: 1 ネットワーク名前空間: セット内の1行(0.01秒) エラー: クエリが指定されていません mysql>終了 mysql_slave はスレーブを起動し、スレーブのステータスをチェックしてすべてが正常であることを確認します。 mysql> スレーブのステータスを表示します。 mysql> スレーブステータスを表示します\G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.1.108 マスターユーザー: スレーブ マスターポート: 3307 接続再試行: 60 マスターログファイル: master-log.000001 読み取りマスターログ位置: 156 リレーログファイル: リレーログ.000002 リレーログ位置: 373 リレーマスターログファイル: master-log.000001 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: Replicate_Ignore_DB: mysql、information_schema、performance_schema、sys テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 実行マスターログ位置: 156 リレーログスペース: 576 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバーID: 1 マスター_UUID: 9627309d-5341-11eb-aaa3-0242ac110006 マスター情報ファイル: mysql.slave_master_info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得済み_Gtid_Set: 実行されたGtidセット: f102ae13-5341-11eb-a578-0242ac110002:1-5 自動位置: 1 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: マスター公開キーパス: マスター公開キーの取得: 1 ネットワーク名前空間: セットに 1 行、警告 1 回 (0.01 秒) エラー: クエリが指定されていません mysql_slaveにユーザーを作成する mysql> 'slave'@'172.17.0.1' というユーザーを作成し、'slave' によって識別します。 クエリは正常、影響を受けた行は 0 行 (0.01 秒) mysql> 'slave'@'172.17.0.1' に *.* のレプリケーション スレーブ権限を付与します。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql> 権限をフラッシュします。 クエリは正常、影響を受けた行は 0 行 (0.00 秒) mysql_masterのスレーブステータスを再度確認すると、すべて正常です mysql> スレーブステータスを表示します \G; ************************** 1. 行 **************************** Slave_IO_State: マスターがイベントを送信するのを待機中 マスターホスト: 192.168.1.139 マスターユーザー: スレーブ マスターポート: 3307 接続再試行: 60 マスターログファイル: スレーブログ.000001 マスターログポジションを読む: 2022 リレーログファイル: リレーログ.000002 リレーログ位置: 2237 リレーマスターログファイル: スレーブログ.000001 スレーブIO実行中: はい スレーブSQL実行中: はい レプリケート_Do_DB: Replicate_Ignore_DB: mysql、information_schema、performance_schema、sys テーブルの複製: 無視テーブルを複製: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: 最終エラー番号: 0 最終エラー: スキップカウンタ: 0 エグゼクティブマスターログポジション: 2022 リレーログスペース: 2440 Until_Condition: なし ログファイルまで: ログ位置まで: 0 マスターSSL許可: いいえ マスターSSLCAファイル: マスターSSLCAパス: マスターSSL証明書: マスターSSL暗号: マスターSSLキー: マスターより遅れている秒数: 0 Master_SSL_Verify_Server_Cert: いいえ 最終IOエラー番号: 0 最後のIOエラー: 最終SQLエラー番号: 0 最後のSQLエラー: Replicate_Ignore_Server_Ids: マスターサーバー ID: 2 マスター_UUID: f102ae13-5341-11eb-a578-0242ac110002 マスター情報ファイル: mysql.slave_master_info SQL_遅延: 0 SQL_残り遅延: NULL Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。 マスター再試行回数: 86400 マスターバインド: 最終IOエラータイムスタンプ: 最終SQLエラータイムスタンプ: マスターSSL証明書: マスターSSLCrlパス: 取得Gtidセット: f102ae13-5341-11eb-a578-0242ac110002:1-7 実行されたGtidセット: f102ae13-5341-11eb-a578-0242ac110002:1-7 自動位置: 1 Replicate_Rewrite_DB: チャンネル名: マスター TLS バージョン: マスター公開キーパス: マスター公開キーの取得: 1 ネットワーク名前空間: セット内の1行(0.01秒) エラー: クエリが指定されていません テストの複製 mysql> データベース test_db_slave を作成します。 クエリは正常、1 行が影響を受けました (0.01 秒) mysql_master に test_db_master を作成する mysql> データベース test_db_master を作成します。 クエリは正常、1 行が影響を受けました (0.24 秒) mysql_slave 上のデータベースを表示する mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| | テスト_db_マスター | | テスト_db_スレーブ | +--------------------+ セット内の 6 行 (0.00 秒) マイSQL> mysql_master 上のデータベースを表示する mysql> データベースを表示します。 +--------------------+ | データベース | +--------------------+ | 情報スキーマ | |mysql | | パフォーマンススキーマ | |システム| | テスト_db_マスター | | テスト_db_スレーブ | +--------------------+ セット内の 6 行 (0.00 秒) マイSQL> この時点で、mysql レプリケーションの構成は完了です。 MySQLコンテナ間のレプリケーション構成については以上で終了です。MySQLコンテナのレプリケーション構成の詳細については、123WORDPRESS.COMの過去の記事を検索するか、以下の関連記事を引き続き閲覧してください。今後とも123WORDPRESS.COMをよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: HTML テーブル マークアップ チュートリアル (14): テーブル ヘッダー
>>: Tomcat Nativeを使用してTomcat IO効率を向上させる方法の詳細な説明
1. Fcitx入力フレームワークをインストールする関連する依存ライブラリとフレームワークは自動的に...
SQLはテーブル内の重複レコードをすべて見つけます1. テーブルには id と name の 2 つ...
質問: Vue にブログ投稿をアップロードするためのフォームがあり、タイトル、本文、説明、スニペット...
目次MySQL クライアント/サーバー プロトコルMySQL サーバーから高いパフォーマンスを得る必...
VMware で仮想マシンを作成し、Redhat Linux オペレーティング システムをインスト...
目次1. 穴に落ちる2. 無駄な努力3. 若さの衝動4. 希望の光5. 問題KO 6. 追記1. 穴...
文章のスタイルでは、このような状況がよく見られます コードは次のとおりです <div styl...
CSS を使ってさまざまなグラフィックを実現できるのは素晴らしいことです。画像を切り取る必要はなく、...
背景次の図に示すように、 react-color を使用してフロントエンド インターフェースのカラー...
来学期にMySQLを勉強します。事前に自宅で練習していませんでした。インストールに時間がかかるとは思...
序文実際、Linux では、控えめな「!」が驚くほど多くの用途で使用されています。この記事では、「!...
Vue プロジェクトの開発プロセスでは、ローカル デバッグの利便性のため、通常、vue.config...
最近Nginxを構築しているのですが、ドメイン名でアクセスできません。 nginx 構成ファイル n...
目次1. HTTPGET 2. HTTP POSTウェブソケット4. Egretのhttpとwebs...
目次fileReader に関する落とし穴iOS における FileReader の落とし穴 (イメ...