Linux の MySQL 設定の変更が有効にならない問題の解決方法

Linux の MySQL 設定の変更が有効にならない問題の解決方法


背景

AWS EC2 を使用するプロジェクトサービスがあります。セキュリティとパフォーマンスを考慮して、最近 Tencent Cloud の MySQL データベースを AWS RDS に移行する予定です。AWS のエクスポート ルールとセキュリティ グループにより、デフォルトの 3306 ポートとバインド アドレスを変更して、特定の IP アドレスへのアクセスを制限する必要があります。変更方法について Stackoverflow で検索しましたが、インターネット上のほとんどの情報は古く、現在の主流の MySQL バージョンに準拠していません (MySQL 5.7.27 を使用し、オペレーティング システムは Ubuntu 18.04.1 LTS)

プロセス

Stackoverflowで最も人気のある回答は非常にシンプルで、わずか3つのステップで変更できます。

/etc/my.cnf // 設定ファイルを見つける port = 3306 // 内容を変更する sudo service mysql restart // MySQL を再起動

しかし、リアルタイムではそれほど単純ではありません。上記の回答は古いバージョンでは機能するかもしれませんが、新しいバージョンでは /etc/my.cnf の下に何も見つかりません。ファイルが存在しないのです。

その後、公式ドキュメントをチェックして、/etc/mysql/my.cnf ディレクトリに設定ファイルを見つけました。ただし、設定ファイルを見つけたからといってすべてがうまくいくとは思わないでください。ファイルを開くと、スタイルが変更されていることがわかります。設定ファイルにはコンテンツがなく、他の 2 つの設定フォルダーを参照しているためです。/etc/mysql/my.cnf の具体的な内容は次のとおりです。

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

わかりました。少なくとも手がかりは得られました。パスをたどって、2 つのディレクトリ内の各ファイルを確認します。最終的に、mysql.conf.d/mysqld.cnf が探しているファイルのようです (公式ドキュメントでもこれが確認されています)。ファイルを開くと、変更する必要があるファイル プロパティが表示されます。

[mysqld]
利益 = 3306
bind-address = 127.0.0.1 // ローカルアクセスのみ許可

設定パラメータを必要なものに変更した後、問題は解決したと思いました。sudo service mysql restart を使用してサービスを再起動すると、イントラネット マシンにまだアクセスできないことがわかりました。netstat -ntlp を使用してローカル アドレスと外部アドレスを確認したところ、変更した設定が有効になっていないことがわかりました。手がかりがここで途切れたかのように、私は深い自信喪失に陥りました。

その後、一部のネットユーザーは、ファイル権限の問題かもしれないと指摘しました。ファイル権限が大きすぎる場合(グローバルに書き込み可能)、MySQLはセキュリティ上の理由から構成ファイルを読み込まず、独自の構成コピーファイルを読み取ります。コマンドを実行すると、次の警告が表示されました。

mysql --help | grep my.cnf
mysql: [警告] 誰でも書き込み可能な設定ファイル '/etc/mysql/mysql.conf.d/mysqld.cnf' 
無視されます。
優先順位、my.cnf、$MYSQL_TCP_PORT、
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

上記は、ファイルがグローバルに書き込み可能であるというリスクがあるため MySQL によって無視されることを意味し、MySQL が構成ファイルを読み取る順序をリストします。ここで、MySQL には複数の my.cnf 構成ファイルがあり、そのうちのいくつかはグローバル構成であり、いくつかはローカル構成であることがわかります。手がかりを見つけた後、処理ははるかに簡単になります。ファイルの権限を変更し、mysql --help を再度確認すると、警告が消えていることがわかります。具体的なコマンドは次のとおりです。

sudo chmod 644 /etc/mysql/mysql.conf.d/mysqld.cnf
mysql --help | grep my.cnf
優先順位、my.cnf、$MYSQL_TCP_PORT、
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

その後、sudo service mysql restart を実行し、Local Address と Foreign Address が my.cnf で設定した内容になっていることを確認しましたが、変更した設定は正常に実装されており、ファイルがグローバルに読み取り可能であるというセキュリティ問題が原因であることが確認できました。

要約する

最後に、MySQL セキュリティ ルールが原因で、構成の変更が有効になりませんでした。もちろん、ほとんどの場合、このルールはわかりません (公式 Web サイトのドキュメントを完全に読んでいなければ)。この問題の後、トラブルシューティングで回り道をせずに、できるだけ早く実際の問題を見つけるのに役立つ次の要約を用意しました。

  1. 問題が発生した場合は、まず公式ウェブサイトの最新のドキュメントを確認してください。
  2. 情報時間を確認してください。インターネット上の多くの情報は長すぎて、誤解を招く可能性があります。
  3. 警告メッセージを注意深く読み、トラブルシューティングツールとコマンドを習得する
  4. 基礎知識は非常に重要です。問題が深くなるほど、プログラマーの内面の強さが試されます。

さて、今回の記事は以上です。この記事の内容が皆さんの勉強や仕事に少しでも参考になれば幸いです。123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • Linux に Apache と PHP をインストールする; Apache+PHP+MySQL 構成戦略
  • MySQL 5.7.13 のインストールと設定方法のグラフィック チュートリアル (Linux)
  • LinuxでのMySQLのインストールと設定 MySQL設定パラメータの詳細な説明
  • 最も完全な MySQL 5.7.13 のインストールおよび構成方法のグラフィック チュートリアル (Linux) を強くお勧めします。
  • Linux サーバー上の MySQL 設定ファイルのパスを表示する方法
  • Linux mysql5.6バージョンのインストールと設定のプロセス
  • Linux での MySQL データベース サーバーのマスター スレーブ同期を指定する構成例
  • Linux での Apache、MySQL、PHP のインストールと設定に関する詳細なメモ
  • CentOS Linux で Apache2+PHP5+MySQL5+GD ライブラリを設定する方法
  • Linux 仮想マシンでの MySQL 5.7 のインストールと設定のチュートリアル

<<:  Windows 10 で MySQL 8.0.12 の解凍バージョンをインストールして構成する方法 (グラフィック チュートリアル付き)

>>:  mysqlを完全にアンインストールします。個人テストです!

推薦する

MySQL ステートメントコメントの紹介

MySQL は次の 3 種類のコメントをサポートしています。 1. 行末の「#」文字から。 2. 「...

HTML iframe で親ページと子ページ間の双方向メッセージングを実装する例

ある日、リーダーはメイン ページに iframe を埋め込み、親ページと子ページ間で双方向にメッセー...

DockerはGitを使用してJenkinsのリリースとテストプロジェクトの詳細なプロセスを実装します

目次1. Dockerをインストールする2. カスタムネットワークアドレスを作成する3. Docke...

チェックボックスとラジオボタンの配置を実装する方法

ブラウザによって動作が異なるだけでなく、フォントやテキスト サイズによっても動作が異なります。フォー...

組み込み Linux で QT アプリケーションを再起動する簡単な方法 (QT4.8 qws ベース)

アプリケーション ソフトウェアには通常、次のようなビジネス要件があります。新しいバージョンの APP...

Vueのv-onパラメータの問題についてお話しましょう

Vue での v-on:clock の使用現在、vue.js フレームワークを学習しています。後で参...

Docker環境にJenkinsコンテナをインストールする詳細なチュートリアル

推奨される Docker 学習教材: https://www.runoob.com/docker/d...

Windows 10でDockerコンテナのポートにアクセスできない問題に対する完璧な解決策

Windows 10 で Docker コンテナのポートにアクセスできない問題を解決する (ポート ...

MySQL トランザクション分析

取引トランザクションはビジネス ロジックの基本単位です。各トランザクションは一連の SQL ステート...

Windows Server 2019 のインストール (グラフィカル チュートリアル)

Windows Server 2019 は、Microsoft が公式にリリースした最新のサーバー...

Linux tac コマンドの実装例

1. コマンドの紹介tac (cat の逆順) コマンドは、ファイルの内容を行単位で逆順に出力します...

Windows環境でのMySQL 8.0.13無料インストールバージョンの設定チュートリアル

目次圧縮ファイルをダウンロードするアドレス: https://dev.mysql.com/downl...

Js でオブジェクトのディープ オブジェクトを安全に取得するメソッドの例

目次序文文章パラメータ例Lodash 実装:トーキー機能: castPath関数: stringTo...

MySQL でタイムゾーンを表示および変更する方法

今日、プログラムが間違った時刻を挿入し、フィールドがデフォルト値 CURRENT_TIMESTAMP...