Dockerを使用してMySQL 8.0をデプロイする方法の例

Dockerを使用してMySQL 8.0をデプロイする方法の例

1. 公式サイトを参照してdockerをインストールする

2. MySQLイメージをプルします(デフォルトでは最新のイメージをプルします)8.0.11

docker プル mysql

3. ホスト上に永続的なmysqlデータとmysql.cnfを作成する

mkdir /usr/local/mysqlData/test/cnf
mkdir /usr/local/mysqlData/test/data
vi /usr/loal/mysqlData/test/cnf/mysql.cnf

ローカルファイル共有を設定するには:

Docker -> 設定... -> ファイル共有


4. 操作権限を追加する

chmod 777 /usr/local/mysqlData/test/data注: マウント時の権限検証 (操作権限)

5. イメージを実行し、初期パスワードを設定し、ローカルポートをDockerポートにマップし、ローカルデータディスクをマウントします( msyqlサービスを開始します)。

docker run -itd -p 3307:3306 --name test_mysql -v /usr/local/mysqlData/test/conf:/etc/mysql
 -v /usr/local/mysqlData/test/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql

実行結果:


6. test_mysqlコンテナに入る

Docker 実行 -it test_mysql bash

図に示すように:

7. コンテナ内のmysqlにログインする


8. ユーザー情報を表示する

mysql> mysql.user からユーザー、ホスト、認証文字列を選択します。

+------------------+----------+--------------------------------------------------------------------------------------+

| ユーザー | ホスト | 認証文字列 |

+------------------+----------+--------------------------------------------------------------------------------------+

| ルート | % | $A$005$7o{'|'AomAw(QvF#.p5wLtCnrG6yX6XQdDVQivGr96POVL.gKnhIAhUhl3. |

| mysql.infoschema | localhost | *ここで使用できるパスワードは無効です |

| mysql.session | localhost | *ここで使用できるパスワードは無効です |

| mysql.sys | localhost | *ここで使用できるパスワードは無効です |

| ルート | ローカルホスト | $A$005$0.-%i)H{uYi@zFo7uYF82fYw7DsA93vYLr4uZv6I1tSKao0sbzzcDap3 |

+------------------+----------+--------------------------------------------------------------------------------------+

セット内の行数は 5 です (0.00 秒)

9. 権限を設定する(リモート接続できるようにルートに権限を割り当てる)

mysql> GRANT OPTION で root@'%' に *.* のすべての権限を付与します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

10.Mysql 5.6以降ではパスワードアルゴリズムが変更されているため、Navicat接続の使用を容易にするためにパスワードアルゴリズムを更新する必要があります。

mysql> GRANT OPTION で root@'%' に *.* のすべての権限を付与します。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

mysql> ALTER ユーザー 'root'@'%' IDENTIFIED BY '123456' パスワードは期限切れではありません。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)

mysql> ユーザー 'root'@'%' を変更し、mysql_native_password によって '123456' で識別しました。
クエリは正常、影響を受けた行は 0 行 (0.11 秒)

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

11. 図に示すように、Navicat を使用して MySQL に接続します。



12. データベースとテーブルを作成し、データを追加する




マウントされたローカル データ ディスクの内容を表示します。


13. コンテナを削除した後もデータが残っているかどうかをテストする

docker rm -f test_msyql 


コンテナは削除されました。 test_mysql を再デプロイし、手順 5 を参照して新しいコンテナーに入り、データベースにアクセスします。

xushijiandeiMac:data xushijian$ docker run -itd -p 3307:3306 --name test_mysql -v /usr/local/mysqlData/test/conf:/etc/mysql -v /usr/local/mysqlData/test/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=123456 mysql
65b7a60050aaef5765ed055acfd071c7c76f60e85dc25d0e73e0d56eae14aed1
xushijiandeiMac:data xushijian$ docker exec -it test_mysql bash
ルート@65b7a60050aa:/#mysql -uroot -p
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは8です
サーバーバージョン: 8.0.11 MySQL コミュニティサーバー - GPL

Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の 5 行 (0.01 秒)

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

データベースが変更されました
mysql> user_user から * を選択します。
+---------+------------+------------+---------+
| ユーザーID | ユーザー名 | 電話番号 | メモ |
+---------+------------+------------+---------+
| 1 | まっすぐではない | 13980000000 | テスト |
+---------+------------+------------+---------+
セット内の1行(0.06秒)

追加の構成なしでもデータを使用できることがわかり、データの永続性が実現されます。

Alibaba Cloud 上の Docker に MySQL をデプロイする (オーケストレーション テンプレート経由でデプロイ)

<1. 設定はステップ 3 と同様です (ディレクトリのみが変わります)

マスター:
 イメージ: 'mysql:latest'
 環境:
  -MYSQL_ROOT_PASSWORD=123456
 ポート:
  - '3307:3306/tcp'
 ボリューム:
  - '/usr/local/mysqlData/master/conf:/etc/mysql:rw'
  - '/usr/local/mysqlData/master/data:/var/lib/mysql:rw'
 ラベル:
  aliyun.スケール: '1'

<2. 以下のように展開が完了しました

[root@c13a6d832fd0a49398c62002361d75c60-node1 ~]# クリア
[root@c13a6d832fd0a49398c62002361d75c60-node1 ~]# docker ps
コンテナID イメージ コマンド 作成ステータス ポート名


8597b7539a3a mysql:latest "docker-entrypoint..." 3 分前 3 分前にアップ 0.0.0.0:3307->3306/tcp mysql_master_1


<3. コンテナに入り、権限を設定します。以降のプロセスはローカルマシンを参照します。

[root@c13a6d832fd0a49398c62002361d75c60-node1 /]# docker exec -it mysql_master_1 bash
ルート@2fc0bbf48941-mysql-master-1:/# mysql -uroot -p
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは8です
サーバーバージョン: 8.0.11 MySQL コミュニティサーバー - GPL

Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

マイSQL>

<4. 外部ネットワークからアクセスできるようにポート3307を開きます

クラウドサーバー ECS -> セキュリティグループ -> リージョンの選択 -> ルールの設定 -> セキュリティグループの追加


図に示すように、セキュリティ グループを追加します。


5. 外部ネットワークアクセス(下図参照)


正常に接続されました。

マスタースレーブ環境の構築:

メインライブラリ:

[root@c13a6d832fd0a49398c62002361d75c60-node1 ~]# docker exec -it mysql_master_1 bash
ルート@2fc0bbf48941-mysql-master-1:/# mysql -uroot -p
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは9です
サーバーバージョン: 8.0.11 MySQL コミュニティサーバー - GPL

Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
4 列セット (0.30 秒)

mysql> データベーステストを作成します。
クエリは正常、1 行が影響を受けました (0.12 秒)

mysql> データベースを表示します。
エラー 1064 (42000): SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'database' 付近で使用する正しい構文を確認してください。
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

ライブラリから:

[root@c13a6d832fd0a49398c62002361d75c60-node1 ~]# docker exec -it mysql-slave_slave_1 bash
ルート@c8661e16e3fd-mysql-スレーブ-スレーブ-1:/# mysql -uroot -p
パスワードを入力してください: 
MySQL モニターへようこそ。コマンドは ; または \g で終わります。
MySQL接続IDは10です
サーバーバージョン: 8.0.11 MySQL コミュニティサーバー - GPL

Copyright (c) 2000, 2018, Oracle およびその関連会社。無断複写・転載を禁じます。

OracleはOracle Corporationおよびその関連会社の登録商標です。
その他の名称は各社の商標である場合があります。
所有者。

ヘルプを表示するには、「help;」または「\h」と入力します。現在の入力ステートメントをクリアするには、「\c」と入力します。

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
4 列セット (0.40 秒)

mysql>スレーブステータスを表示\G
************************** 1. 行 ****************************
        Slave_IO_State: マスターがイベントを送信するのを待機しています。マスター/スレーブ構成が成功しました。
         マスターホスト: 47.94.225.124
         マスターユーザー: 担当者
         マスターポート: 3307
        接続再試行: 60
       マスターログファイル: binlog.000003
     読み取りマスターログ位置: 155
        リレー ログ ファイル: c8661e16e3fd-mysql-slave-slave-1-relay-bin.000004
        リレーログ位置: 363
    リレーマスターログファイル: binlog.000003
       スレーブIO実行中: はい
      スレーブSQL実行中: はい
       レプリケート_Do_DB: 
     レプリケート_無視_DB: 
      テーブルの複製: 
    無視テーブルを複製: 
   Replicate_Wild_Do_Table: 
 Replicate_Wild_Ignore_Table: 
          最終エラー番号: 0
          最終エラー: 
         スキップカウンタ: 0
     実行マスターログ位置: 155
       リレーログスペース: 762
       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: a482f5fe-80fb-11e8-9fb1-0242ac12020c
       マスター情報ファイル: mysql.slave_master_info
          SQL_遅延: 0
     SQL_残り遅延: NULL
   Slave_SQL_Running_State: スレーブはすべてのリレーログを読み取りました。さらに更新を待機しています。
      マスター再試行回数: 86400
         マスターバインド: 
   最終IOエラータイムスタンプ: 
   最終SQLエラータイムスタンプ: 
        マスターSSL証明書: 
      マスターSSLCrlパス: 
      取得済み_Gtid_Set: 
      実行されたGtidセット: 
        自動位置: 0
     Replicate_Rewrite_DB: 
         チャンネル名: 
      マスター TLS バージョン: 
    マスター公開キーパス: 
    マスター公開キーの取得: 0
セット内の 1 行 (0.00 秒)

mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
+--------------------+
セット4行(1.01秒)

mysql> データベースを表示します。
エラー 1064 (42000): SQL 構文にエラーがあります。MySQL サーバーのバージョンに対応するマニュアルで、1 行目の 'database' 付近で使用する正しい構文を確認してください。
mysql> データベースを表示します。
+--------------------+
| データベース |
+--------------------+
| 情報スキーマ |
|mysql |
| パフォーマンススキーマ |
|システム|
| テスト |
+--------------------+
セット内の行数は 5 です (0.00 秒)

マスタースレーブライブラリ原理の分析:


I/O スレッドはマスター ライブラリの binlog を要求し、取得した binlog をリレー ログ ファイルに書き込みます。マスター ライブラリはログ ダンプ スレッドを生成し、binlog をスレーブ ライブラリの I/O スレッドに転送します。

SQL スレッドはリレー ログ ファイル内のログを読み取り、それを特定の操作に解析して、マスターとスレーブの操作の一貫性を実現し、最終的にデータの一貫性を保ちます。

つまり、スレーブIOスレッドのリクエスト -> ログのリレー -> バイナリログの取得 -> スレーブSQLスレッド、解析

参照:

https://docs.docker.com/ Docker公式サイトのドキュメント

https://blog.csdn.net/gf0515/article/details/80466213 Mac Navicat が Docker MySql8.0 に接続する

Docker mysql マスタースレーブレプリケーション

https://blog.csdn.net/qq_28804275/article/details/80891951 マスタースレーブ環境の構築

docker mysql Dockerfile mysql オープンソースイメージ Dockerfile と設定

https://www.cnblogs.com/Aiapple/p/5792939.html マスタースレーブレプリケーションの原理と高可用性分析

http://www.cnblogs.com/Aiapple/p/5793786.html 実戦

これで、MySQL 8.0 を Docker でデプロイする例についての記事は終了です。MySQL 8.0 を Docker でデプロイする方法の詳細については、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • MySQL8 ベースの docker-compose デプロイメント プロジェクトの実装
  • Dockerを使用してDjango+MySQL8開発環境をデプロイする方法の詳細な説明
  • DockerにMySQL 8.0をインストールする方法
  • MySQL 5.7 の Docker バージョンを MySQL 8.0.13 にアップグレードし、データを移行する
  • DockerにMySQL8をインストールする方法
  • Docker デプロイメント MySQL8 クラスター (マスター 1 台とスレーブ 2 台) の実装手順

<<:  MySQLにおけるMTRの概念

>>:  Vueプロジェクトでvuexを使用する方法

推薦する

Baidu 入力メソッドが API を公開、自由に移植して使用できると主張

百度入力方式の担当者は、百度入力方式のオープンAPIの最大の利点は操作が便利であることであり、プラッ...

MySQL のインデックスとデータ テーブルを管理する方法

目次テーブルの競合を見つけて修正するインデックス統計の更新テーブルの競合を見つけて修正するデータ テ...

flex-grow、flex-shrink、flex-basis、9グリッドレイアウトを理解する

1. flex-grow、flex-shrink、flex-basis プロパティflex-grow...

ウェブサイトのAboutページの紹介コンテンツの書き方

公式、電子商取引、ソーシャル ネットワーキング、個人のいずれの Web サイトでも、訪問者に貴重な時...

SQL 集計、グループ化、並べ替え

目次1. 集計クエリ1. COUNT関数2. SUM関数3. AVG関数4. MAX関数とMIN関数...

Docker を使用して Go Web アプリケーションをデプロイする方法

目次なぜ Docker が必要なのでしょうか? Docker デプロイメントの例コードの準備Dock...

WeChatアプレットはふるいを振る効果を実現

この記事では、WeChatアプレットの具体的なコードを参考までに共有します。具体的な内容は次のとおり...

Linuxのファイル操作の知識ポイントを詳しく解説

ファイル操作に関連するシステムコール作成するint creat(const char *ファイル名,...

WeChatアプレットが複数行テキストのスクロール効果を実現

この記事の例では、WeChatアプレットで複数行のテキストスクロールを実装するための具体的なコードを...

ウェブタイポグラフィにおける致命的な意味的ミス 10 選

<br />これは、Steven D が書いた Web フロントエンド開発デザインの基本...

CSSはマウスが画像に移動したときにマスク効果を実現します

1.マスクレイヤーのHTMLコードと画像をdivに配置する.img_div に入れました。 <...

CSS スタイルの競合を解決するいくつかの方法 (要約)

1. セレクターを調整するコンビネータを使用すると、セレクターの説明をより正確に記述できます (C...

経験者のHTMLの書き方と理由の分析

1. ナビゲーション: 順序なしリストとその他のラベル要素ナビゲーションを記述するために最も一般的に...

Docker を使用して Spring Boot をデプロイする方法

Docker テクノロジの開発により、マイクロサービスの実装にさらに便利な環境が提供されます。Doc...

高速レイアウトのための CSS ビューポート単位

CSS ビューポート ユニットはここ数年登場しており、時が経つにつれて、ますます多くの開発者が使用し...