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 コード

推薦する

トラフィックの多いウェブサイト向けのソリューション

まず、サーバーのハードウェアが現在のトラフィックをサポートするのに十分かどうかを確認します。通常の ...

Linux における nohup と & の使い方と違いの詳細な説明

例:例として、Python コード loop_hello.py を使用します。このコードは、ループ回...

アイデアを war パッケージにパッケージ化し、tomcat にデプロイしてアクセス パスの問題 (図とテキスト)

Web プロジェクトを war にパッケージ化するアイデアにとって最も重要なことは、アトリフィカを...

CentOS7 は yum を使用して mysql 8.0.12 をインストールします

この記事では、centos7にyumを使用してMySQL 8.0.12をインストールする詳細な手順を...

高性能なウェブサイトのための14のテクニック

オリジナル: http://developer.yahoo.com/performance/rule...

Windows で削除された MySQL 8.0.17 のルート アカウントとパスワードを回復する方法

少し前にSQLの独学を終え、MySQL 8.0.17をダウンロードしました。インストールして設定した...

フローティング要素が親要素の高さを崩す原因と解決策の詳細な説明

フローティング要素は、親要素の高さを縮小します。要素を float float:left/right...

HTML における画像タグの使用方法の詳細な説明

HTML では、<img> タグはテキスト内の画像タグを定義するために使用されます。その...

史上最もクリエイティブな404ページのデザインは、ウェブサイトのユーザーエクスペリエンスを効果的に向上させます

ウェブを閲覧しているときに 404 ページに遭遇することはあまりないので、見落としがちです。しかし、...

JavaScript 関数呼び出しの典型的なサンプルコード

目次JavaScript 関数呼び出しの典型的な例JS関数の定義と呼び出し方法要約するJavaScr...

Linux シェル環境での Zabbix API の使用

Linux シェル環境で直接呼び出すことができます。公式 Web サイトによると、Zabbix のデ...

MySQL テーブルの断片化を解消し、スペースを再利用する方法

目次MySQL テーブルの断片化の原因行の断片化行内断片化空き領域の断片化MySQL で極度に断片化...

Tomcat 7.0 で仮想ディレクトリを設定し、仮想パスを構成する方法

Tomcat7.0は仮想ディレクトリを設定します(1)現在、当社のウェブサイトはデフォルトのディレク...

docker を使って sonarqube を構築する方法

目次1. Dockerをインストールする2. ソナーイメージをインストールする3. ソナーを使ってコ...

HTML テーブル マークアップ チュートリアル (38): ヘッダーの境界線の色属性 BORDERCOLOR

テーブルを美しくするために、ヘッダーに異なる境界線の色を設定できます。基本的な構文<TH 境界...