背景 先週、会社で 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. 入力および出力プロパティの概要2. 入力属性3. プロパティバインディングは親コンポー...
従来の Linux イメージで作成された ECS クラウド サーバーには、NTP と YUM が設定...
目次0. 背景1. インストール2. Baidu Cloudアカウントにログインする3. ファイルを...
1.mysql-5.7.19-winx64.zip(これは無料のインストールバージョンで、約318 ...
JDK とは何ですか?まあ、この質問がわからないのであれば、なぜこれをインストールするのか本当にわか...
問題の説明nginx を設定することで、異なるポートを介して異なる Web アプリケーションにアクセ...
通常の開発では、凸型の丸い角、つまり border-radius 属性を使用するのが一般的です。凹角...
外部アクセスポートをランダムにマップする -P フラグを使用すると、Docker は 49000 か...
Web ページのアクセシビリティは、フロントエンドでのみ評価および実装できるもののようです。ユーザビ...
目次1. a タグを使用して PDF をプレビューまたはダウンロードします。書き方は、携帯電話でクリ...
目次序文 - Vue ルーティング1. 最も基本的なルーティング構成1. router/index....
序文私はプログラマーとしてスタートした PHP プログラマーです。これまで、トレーニング コースで勉...
この記事では、円形カルーセルを実装するためのJavaScriptの具体的なコードを参考までに紹介しま...
復帰文字 ( Ctrl+M ) に不安を感じても心配しないでください。それらを排除する簡単な方法がい...
序文echarts は私が最もよく使用するチャート作成ツールであり、非常に完全なエコシステムとコンテ...