mysql8.x docker リモートアクセスの詳細な設定

mysql8.x docker リモートアクセスの詳細な設定

環境条件

MySQL 8.x は docker 経由でデプロイされており、起動時の docker-compose.yml は次のようになります。

バージョン: "3.2"
サービス:
    マイスク:
        コンテナ名: mysql
        イメージ: "mysql:8.0"
        ポート:
            - 「3306:3306」
        指示:
            [
                "--文字セットサーバー=utf8mb4",
                "--collat​​ion-server=utf8mb4_unicode_ci",
                "--sql_mode=STRICT_TRANS_TABLES、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_ENGINE_SUBSTITUTION"、
            ]
        ボリューム:
            - タイプ: バインド
              ソース: ./mysql
              ターゲット: /var/lib/mysql
            - タイプ: バインド
              ソース: ./mysql-docker.cnf
              ターゲット: /etc/mysql/conf.d/docker.cnf
        環境:
            - MYSQL_RANDOM_ROOT_PASSWORD=はい
            -MYSQL_USER=私のユーザー
            -MYSQL_PASSWORD=パスワード
            -MYSQL_DATABASE=mydb
        再起動: 常に

docker-compose コマンドを初めて起動すると、mysql 8.x イメージが自動的にダウンロードされます。

起動が成功すると、ポート 3306 もマッピングされていることがわかります。

この時点で、mysql は正常にインストールされ、起動されます。​

エラーが発生しました

次に、Navicat などのデータベース クライアントを介して MySQL サーバーに接続すると、まったく接続できないことがわかりました。発生したエラーの種類は次のとおりです。

  1. エラー 1045 (28000): ユーザー 'myuser' のアクセスが拒否されました
  2. 10060 エラー
  3. 10061 エラー

回避策

データベースのユーザー権限を設定することでリモート アクセスの問題を解決する方法はインターネット上に多数ありますが、それらにはコア ステップしかなく、プロセスが欠けています。

1. mysql dockerにログインする

上記の docker-compose.yml からわかるように、mysql ルート ユーザーのパスワードは設定されていません。
ボリューム マッピング セクションでは、コンテナー内の /etc/mysql/conf.d/docker.cnf ファイルを外部にマッピングしたことがわかります。このファイルの内容は次のとおりです。

[mysqld]
ホストキャッシュをスキップする
名前解決をスキップ

MySQL にログインするときにパスワードが不要になるように、次の行を追加します。

[mysqld]
ホストキャッシュをスキップする
名前解決をスキップ
スキップ許可テーブル

追加後、コンテナを再起動します。

docker-compose ダウン
docker-compose を起動 -d

2. ルートパスワードを設定する

コンテナに入り、root アカウントで mysql サーバーにログインします。

docker exec -it mysql /bin/bash
mysql -uroot # ここで Enter キーを押すと、パスワードを入力せずにサーバーにログインできます。mysql> flush privileges;
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

mysql> ALTER USER 'root'@'localhost' は 'mysqlroot' によって mysql_native_password で識別されます。
クエリは正常、影響を受けた行は 0 行 (0.01 秒)

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

最初に権限をフラッシュする必要があることに注意してください。そうしないと、パスワードの変更は成功しません。​

次に、コンテナを終了し、マップされた /etc/mysql/conf.d/docker.cnf ファイルを復元します。

[mysqld]
ホストキャッシュをスキップする
名前解決をスキップ

新しく追加された行を削除し、コンテナを再起動します。

docker-compose ダウン
docker-compose を起動 -d

3. ルートリモートアクセス権限を設定する

コンテナを再起動した後、再度コンテナに入り、ルート ユーザーのリモート アクセス権限を設定します。

docker exec -it mysql /bin/bash
mysql -uroot -p # 前の手順で設定したパスワードmysqlrootを入力する必要があります

mysql> ALTER USER 'root'@'%' は 'mysqlroot' によって mysql_native_password で識別されます。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

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

前の手順で 'root'@'localhost' の代わりに 'root'@'%' を使用してリモート アクセス権限を構成します。

設定後は、mysql docker コンテナを再起動せずに navicat で接続できるようになります。

4. 一般ユーザーmyuserのリモートアクセスを設定する

上記の手順に従って、通常のユーザー myuser のリモート接続を構成します。

mysql> ALTER USER 'myuser'@'%' は 'mypass' によって mysql_native_password で識別されます。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

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

mysql> grant オプションを使用して、*.* のすべての権限を 'myuser'@'%' に付与します。
クエリは正常、影響を受けた行は 0 行 (0.00 秒)

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

設定が成功すると、myuser アカウントも navicat 経由でリモート接続できるようになります。

mysql8.x docker リモートアクセスの詳細設定に関するこの記事はこれで終わりです。より関連性の高い mysql8.x docker リモートアクセスのコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Docker は 2003 年の問題を解決するために MySQL リモート接続を導入しました
  • Docker で MySQL をインストールし、リモート接続を実装するチュートリアル
  • Docker はリモート接続のサンプルコードを実現するために MySQL をデプロイします

<<:  Win10の明るさ調整効果を模倣するHTML+CSS+JSサンプルコード

>>:  完璧なアロエベラジェルを選ぶには?完璧なアロエベラジェルの本物と偽物の見分け方

推薦する

JSを段階的に学ぶ方法についての簡単な説明

目次概要1. jsの位置づけを明確に理解する2. 明確な学習パス3. 自己規律と粘り強さ4. 練習し...

MySQLを定期的にバックアップしてQiniuにアップロードする方法

ほとんどのアプリケーション シナリオでは、緊急時に備えて重要なデータをバックアップし、安全な場所に保...

CentOS 7 に Percona Server+MySQL をインストールする

1. 環境の説明(1) CentOS-7-x86_64、カーネルバージョン uname -r は、 ...

Web ページのスクロール バーが右側に設定されているのはなぜですか?

私たちが毎日使っているブラウザや Word 文書のスクロール バーはなぜ右側にあるのでしょうか。多く...

スクリプトを使用して、ワンクリックでDockerイメージをパッケージ化してアップロードします。

著者は1年以上マイクロフロントエンドプロジェクトに取り組んできました。チームは10個のマイクロアプリ...

node.jsのインストールとHbuilderXの設定の詳細な説明

npm インストールチュートリアル: 1. Node.jsインストールパッケージをダウンロードする公...

html+cssレイアウトの3つの方法(ナチュラルレイアウト/フローレイアウト/ポジショニングレイアウト)

1. 自然なレイアウト<br />レイアウトは変更せずに自動的に左揃えになります。 2....

MySQL マスタースレーブレプリケーションの読み書き分離構造の詳細な説明

MySQL マスタースレーブ設定MySQL のマスター/スレーブ レプリケーションと読み取り/書き込...

メタタグの詳しい説明(メタタグの役割)

個人のウェブサイトがどんなに素晴らしいものであっても、サイバースペースの広大な海に浮かぶ小さなボート...

Node.jsはブレークポイント再開を実装する

目次ソリューション分析スライス履歴書のダウンロード具体的な解決プロセス論理的分析フロントエンドサーバ...

Docker に MySQL と MariaDB をインストールする方法

MySQLとMariaDBの関係MariaDB データベース管理システムは MySQL のブランチで...

MySQLパラダイムの使用に関する詳細な説明

1. パラダイムこのパラダイムの英語名は Normal Form であり、1970 年代にリレーショ...

Reactイベントスロットリング効果が失敗する理由と解決策

目次ここでの問題は次の通りです:解決策1:解決策2: コンストラクタで初期化を割り当てる採掘場の概要...

mysql 5.7.11 winx64.zip インストールと設定方法のグラフィックチュートリアル

MySql データベース システムをインストールして構成します。 1. ダウンロード http://...

MySQL に大量のデータを挿入するときに重複データを除外する方法

目次1. 問題を発見する2.重複したデータを残さずにすべて削除する3. 削除テーブルから重複データを...