MacOS で Docker を使用して MySQL マスター スレーブ データベースを作成する方法

MacOS で Docker を使用して MySQL マスター スレーブ データベースを作成する方法

1. MySQLイメージを取得する

ターミナルから最新のMySQLイメージを取得する

docker pull mysql/mysql-server

2. MySQLデータベースコンテナ設定ファイルに対応するディレクトリを作成する

MySQL コンテナ設定ファイルを保存するために、現在のユーザーの下にディレクトリのセットを作成します (この手順は Linux では省略できます)。次の図を参照してください。

注意: MySQL バージョン 8 以降では、マッピング ファイルに mysql-files を追加する必要があります。そうしないと、MySQL データベース コンテナーの作成に失敗します。

MacOS は、my.cnf ファイルを直接変更するための vi/vim をサポートしておらず、また vim をインストールするための apt-get もサポートしていないため、ローカルに 2 つの新しい my.cnf マッピング ファイルを作成する必要があります。 (Linuxでは、vimを使用して設定ファイルを直接変更できます)

マスター データベースに対応する my.cnf 構成ファイルは次のとおりです。

[mysqld]
サーバーID = 1
ログ bin = mysql bin
読み取り専用=0
複製無視DB=mysql
複製無視db=sys
複製無視DB=情報スキーマ
レプリケート-無視-db=パフォーマンススキーマ

スレーブ ライブラリに対応する my.cnf 構成ファイルは次のとおりです。

[mysqld]
サーバーID = 2
ログ bin = mysql bin
読み取り専用=1
複製無視DB=mysql
複製無視db=sys
複製無視DB=情報スキーマ
レプリケート-無視-db=パフォーマンススキーマ

3. 2つのMySQLデータベースコンテナを作成する

マスターデータベースコンテナを作成する

docker run --name mysql-master -d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_master_slave/master/data:/var/lib/mysql -v /Users/yumaster/test/mysql_master_slave/master/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_master_slave/master/mysql-files:/var/lib/mysql-files mysql/mysql-server

スレーブデータベースコンテナを作成する

docker run --name mysql-slave -d -p 3308:3306 -e MYSQL_ROOT_PASSWORD=123456 -v /Users/yumaster/test/mysql_master_slave/slave/data:/var/lib/mysql -v /Users/yumaster/test/mysql_master_slave/slave/conf/my.cnf:/etc/mysql/my.cnf -v /Users/yumaster/test/mysql_master_slave/slave/mysql-files:/var/lib/mysql-files mysql/mysql-server

次の図に示すように、2 つの MySQL コンテナが正常に作成されました。

この時点で Docker ダッシュボードを開くと、2 つのコンテナがすでに実行されていることがわかります。そしてポートは先ほど作成した対応するポートです

Navicat 経由で接続すると、接続されたユーザー アカウントにリモート接続する権限がないため、エラー 1130 が発生します。 MySQLデータベースのユーザーテーブルのホスト項目を変更する必要があります

localhostを%に変更

具体的な手順:

mysql> mysqlを使用する
テーブル名と列名の補完のためのテーブル情報の読み取り
-Aでこの機能をオフにすると起動が速くなります。

データベースが変更されました
mysql> user='root' のユーザーからホストを選択します。
+-----------+
| ホスト |
+-----------+
| ローカルホスト |
+-----------+
セット内の1行(0.01秒)

mysql> ユーザーを更新し、host='%' を設定します。user = 'root';
クエリは正常、1 行が影響を受けました (0.01 秒)
一致した行: 1 変更された行: 1 警告: 0

mysql> user='root' のユーザーからホストを選択します。
+------+
| ホスト |
+------+
| % |
+------+
セット内の 1 行 (0.00 秒)

mysql> 権限をフラッシュします。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

4. マスタースレーブデータベース構成

マスターデータベース構成:

//マスターデータコンテナに入る docker exec -it mysql-master mysql -uroot -p123456
// データを同期するためのユーザーを作成します。各スレーブは、標準の MySQL ユーザー名とパスワードを使用してマスターに接続します。レプリケーション操作を実行するユーザーには、REPLICATION SLAVE 権限が付与されます。 mysql8より前のバージョンの暗号化ルールはmysql_native_passwordで、mysql8以降の暗号化ルールはcaching_sha2_passwordです。
CREATE USER 'slave'@'%' IDENTIFIED BY '123456'; (スレーブがマスターとの接続を作成するときにエラーが発生する可能性があります)
または CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
// ユーザーを承認する GRANT REPLICATION SLAVE ON *.* to 'slave'@'%';
// ステータスを確認し、File と Position の値を記憶します。Show master ステータスは Slave で使用されます。
// スレーブがマスター ライブラリ接続を設定するときに使用されるマスター コンテナーの IP を照会します。docker examine mysql-master | grep IPA;

マスターのステータス、ファイル mysql-bin.000003 位置 661

スレーブ スレーブ データベース構成:

//スレーブデータコンテナに入る docker exec -it mysql-slave mysql -uroot -p123456
//マスターライブラリリンク変更マスターを
マスターをmaster_host='172.17.0.2'、master_user='slave'、master_password='123456'、master_log_file='mysql-bin.000003'、master_log_pos=661、master_port=3306に変更します。
//スレーブ同期を開始します。start slave;
//ステータスを確認します show slave status\G;
// show slave status\G コマンドの結果が次のように表示された場合:
//スレーブIO実行中: はい
//スレーブSQL実行中: はい
//上記 2 つの項目が両方とも Yes の場合、問題はありません。
//それ以外の場合は、スレーブ データを再構成します。stop slave;
すべてのスレーブをリセットします。

スレーブ同期を正常に開始しました

5. マスタースレーブ検証

マスター上にデータベースを作成し、テーブルを作成し、データを挿入すると、対応するスレーブも増加します。

データベースmaster_slave_demoを作成します。
master_slave_demo を使用します。
テーブルuserinfo(username varchar(50),age int)を作成します。
ユーザー情報に値('Toulon',25)を挿入します。
ユーザー情報から*を選択します。

コマンドを実行する前は、マスター データベースとスレーブ データベースの数は同じです。

マスターがコマンドを実行した後、スレーブは対応するデータを追加します

メインデータベースに新しく追加されたデータが同期され、MySQL のマスタースレーブレプリケーションが設定されていることがわかります。 (テスト環境、MacOS M1 ARM64 マシン、Docker、MySQL 8.0.27)

これで、MacOS 上で Docker を使用して MySQL マスター スレーブ データベースを作成する方法についての記事は終了です。Docker を使用して MySQL マスター スレーブ データベースを作成する方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、次の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法
  • MySQL マスター/スレーブ データベース同期構成と一般的なエラー
  • MySQLマスタースレーブデータベース構築方法の詳細な説明
  • PHP で実装された MySQL マスタースレーブデータベース状態検出機能の例

<<:  ブラウザの互換モードでボタン内のテキストが垂直方向に中央揃えにならない問題について簡単に説明します。

>>:  スネークゲームを作るための Pygame コード

推薦する

iframeを使用してページを呼び出すとページがキャッシュされるかどうかの簡単な分析

最近、毎日変更されるページを iframe を使用して呼び出す必要があるプロジェクトがあります。その...

Linuxのseqコマンドを使用して数字のシーケンスを生成します(推奨)

Linux の seq コマンドは、数字のリストを非常に高速に生成でき、使いやすく柔軟性に優れてい...

CSS 兄弟要素フローティング分析の概要

float:左/右/なし; 1. 同じレベルフローティング(1)ブロックレベル要素を同じ行に表示する...

EclipseにTomcatサーバー設定を追加する方法

1. ウィンドウ -> 設定を選択してEclipseの設定パネルを開きます。 2. 「設定」ウ...

ファイルアップロードスタイルの詳細を実装するjs

目次1. 概要2. オブジェクト作成のパラメータ3. 監視例4. 使用方法5. ソースコード1. 概...

MySQL 最適化における B ツリー インデックスの知識ポイントのまとめ

SQL を最適化する必要があるのはなぜですか?当然ですが、SQL ステートメントを記述する場合、次の...

Docker を使って LEMP 環境を素早く構築する方法の例

LEMP(Linux + Nginx + MySQL + PHP)は、基本的に今日のWeb開発者にと...

HTMLはマウスをホバーしたときにテキストを表示するためにtitle属性を使用します。

コードをコピーコードは次のとおりです。 <a href=# title="ここに表示...

Vueは動的コンポーネントを使用してTAB切り替え効果を実現します

目次問題の説明Vueの動的コンポーネントとはアプリケーションシナリオの説明実装手順ステップ 1 (新...

VMwareがモジュールディスクを早期に開けない場合の解決策の詳細な説明

VMWare (Virtual Machine ware) は、「仮想 PC」ソフトウェア会社です。...

portainer を使用してリモート docker に接続するチュートリアル

Portainer は、Docker ホストと Docker Swarm クラスターの管理に使用でき...

CentOS はローカル yum ソースを使用して LAMP 環境を構築するグラフィック チュートリアル

この記事では、ローカル yum ソースを使用して CentOS 上に LAMP 環境を構築する方法に...

MySQL 5.7.17 とワークベンチのインストールと設定のグラフィックチュートリアル

この記事では、MySQL 5.7.17ワークベンチのインストールと設定方法を参考までに紹介します。具...

WIN10 での JDK インストールと環境変数の設定手順 (詳細版)

目次1. JDKをダウンロードする(例としてjdk1.8.0を使用する) 2. JDK をインストー...

ウェブページにコンテンツが多すぎる場合に、下から上へ素早く戻る方法

Web フロントエンド開発では、ページに多くの記事を表示することが避けられません。記事の最後にあるク...