MySQL の一般的なエラーのトラブルシューティングに役立つヒント
MySQL は、Oracle が所有する、広く使用されているオープン ソースのリレーショナル データベース管理システム (RDMS) です。これは長年にわたって Web ベースのアプリケーションのデフォルトの選択肢であり、他のデータベース エンジンと比較して依然として人気があります。
MySQL は Web アプリケーション向けに設計され、最適化されています。Facebook、Twitter、などの主要な Web ベースのアプリケーションの不可欠な部分を形成しています。ウィキペディアやYouTubeなど。
あなたのサイトまたは Web アプリケーションはMySQL を利用していますか?この詳細な記事では、MySQL データベース サーバーの問題と一般的なエラーのトラブルシューティング方法を説明します。問題の原因を特定する方法とその解決策について説明します。
1. ローカル MySQL サーバーに接続できない
MySQL でよくあるクライアントからサーバーへの接続エラーの 1 つは、「エラー 2002 (HY000): ソケット '/var/run/mysqld/mysqld.sock' (2) を介してローカル MySQL サーバーに接続できません」です。強い>」。

このエラーは、ホスト システム上で実行されている MySQL サーバー (mysqld)
が存在しないか、または間違った Unix ソケット ファイル名または TCP/IP< を指定したことを示します。 サーバーに接続しようとするときのポート。
次に示すように grep コマンドを併用して、データベース サーバー ホスト上の mysqld
という名前のプロセスをチェックして、サーバーが実行されていることを確認します。
$ ps xa | grep mysqld | grep -v mysqld
上記のコマンドで出力が表示されない場合は、データベース サーバーが実行されていません。したがって、クライアントはそれに接続できません。サーバーを起動するには、次の systemctl コマンドを実行します。
$ sudo systemctl start mysql #Debian/Ubuntu $ sudo systemctl start mysqld #RHEL/CentOS/Fedora
MySQL サービスのステータスを確認するには、次のコマンドを使用します。
$ sudo systemctl status mysql #Debian/Ubuntu $ sudo systemctl status mysqld #RHEL/CentOS/Fedora

上記のコマンドの出力から、MySQL サービスが失敗していることがわかります。このような場合は、再起動してステータスをもう一度確認してください。
$ sudo systemctl restart mysql $ sudo systemctl status mysql

さらに、次のコマンドで示されているようにサーバーが実行されているにもかかわらず、上記のエラーが表示される場合は、TCP/IP ポートがファイアウォールまたはポート ブロッキング サービスによってブロックされていることも確認する必要があります。 。
$ ps xa | grep mysqld | grep -v mysqld
示されているように netstat コマンドに実行します。
$ sudo netstat -tlpn | grep "mysql"
2. MySQL サーバーに接続できない
よく発生するもう 1 つの接続エラーは、「(2003) Can't connect to MySQL Server on ‘server’ (10061)」です。これは、ネットワーク接続が拒否されたことを意味します。
ここでは、上に示したように、 システム上でMySQL サーバーが実行されていることを確認することから始めます。また、サーバーでネットワーク接続が有効になっていること、および接続に使用しているネットワーク ポートがサーバーで構成されているものであることも確認してください。
MySQL サーバーに接続しようとしたときに発生する可能性があるその他の一般的なエラーは次のとおりです。
ERROR 2003: Can't connect to MySQL server on 'host_name' (111) ERROR 2002: Can't connect to local MySQL server through socket '/tmp/mysql.sock' (111)
これらのエラーは、サーバーは実行されている可能性があるが、 サーバーがリッスンしているものとは異なるTCP/IP ポート、名前付きパイプ、または Unix ソケット ファイルを使用して接続しようとしていることを示します。
3. MySQL でのアクセス拒否エラー
MySQL では、ユーザー アカウントはユーザー名と、ユーザーがサーバーに接続できるクライアント ホストまたは複数のホストに関して定義されます。さらに、アカウントにはパスワードなどの認証資格情報が含まれる場合もあります。
「アクセスが拒否されました」エラーの原因はさまざまですが、一般的な原因の 1 つは、接続時にサーバーがクライアント プログラムの使用を許可する MySQL アカウントに関連するものです。これは、ユーザー名接続で指定されたには、データベースにアクセスする権限がありません。
MySQL では、クライアント ユーザーがサーバーに接続し、サーバーによって管理されているデータにアクセスできるアカウントを作成できます。この点に関して、アクセス拒否エラーが発生した場合は、使用しているクライアント プログラム、および場合によっては接続元のホストを介してユーザー アカウントがサーバーに接続できるかどうかを確認してください。 。
以下に示すように SHOW GRANTS
コマンドを実行すると、特定のアカウントが持つ権限を確認できます。
> SHOW GRANTS FOR 'tecmint'@'localhost';
MySQL シェルで次のコマンドを使用すると、特定のデータベース上の特定のユーザーにリモート IP アドレスに対する権限を付与できます。
> grant all privileges on *.test_db to 'tecmint'@'192.168.0.100'; > flush privileges;
さらに、アクセス拒否エラーは、MySQL への接続の問題が原因で発生することもあります。前に説明したエラーを参照してください。
4. MySQL サーバーへの接続が失われた
このエラーは、ネットワーク接続の不良、接続タイムアウト、またはBLOB 値が大きいなどの理由で発生する可能性があります。 最大許可パケット。ネットワーク接続に問題が発生した場合、特にリモート データベース サーバーにアクセスしている場合は、ネットワーク接続が良好であることを確認してください。
それが接続タイムアウトの問題である場合、特にMySQL がサーバーへの初期接続を使用しようとしている場合、connect_timeout パラメータの値を増やします。 。ただし、BLOB 値が max_allowed_packet より大きい場合は、/etc の max_allowed_packet により高い値を設定する必要があります。図に示すように、[mysqld]
または [client]
セクションにある /my.cnf 構成ファイル。
[mysqld] connect_timeout=100 max_allowed_packet=500M
MySQL 構成ファイルにアクセスできない場合は、MySQL シェルで次のコマンドを使用してこの値を設定できます。
> SET GLOBAL connect_timeout=100; > SET GLOBAL max_allowed_packet=524288000;
5. MySQL 接続が多すぎる
MySQL クライアントで「接続が多すぎます」エラーが発生した場合、利用可能なすべての接続が他のクライアントによって使用されていることを意味します。接続数 (デフォルトは < です)151) は max_connections
システム変数によって制御されます。/etc/my.cnf でその値を増やしてより多くの接続を許可することで問題を解決できます。 > 設定ファイル。
[mysqld] max_connections=1000
6. MySQL のメモリ不足
MySQL クライアント プログラムを使用してクエリを実行し、問題のエラーが発生した場合は、MySQL にクエリ結果全体を保存するのに十分なメモリがないことを意味します。
最初のステップは、クエリが正しいことを確認することです。正しい場合は、次の手順を実行します。
- MySQL クライアントを直接使用している場合は、
--quick switch
で起動して、キャッシュされた結果を無効にするか、 - MyODBC ドライバーを使用している場合、設定ユーザー インターフェイス (UI) にはフラグの詳細タブがあります。 「結果をキャッシュしない」にチェックを入れます。
もう 1 つの優れたツールは、MySQL チューナー です。これは、実行中の MySQL サーバーに接続し、パフォーマンスを高めるための構成方法を提案する便利なスクリプトです。
$ sudo apt-get install mysqltuner #Debian/Ubuntu $ sudo yum install mysqltuner #RHEL/CentOS/Fedora $ mysqltuner
MySQL の最適化とパフォーマンス チューニングのヒントについては、記事「15 の役立つ MySQL/MariaDB パフォーマンス チューニングと最適化のヒント」を参照してください。
7. MySQL がクラッシュし続ける
この問題が発生した場合は、MySQL サーバーが停止したことが問題なのか、それともクライアントに問題があるのかを確認する必要があります。サーバークラッシュの多くは、データファイルまたはインデックスファイルの破損が原因であることに注意してください。
サーバーのステータスをチェックして、サーバーが稼働し続けている時間を確認できます。
$ sudo systemctl status mysql #Debian/Ubuntu $ sudo systemctl status mysqld #RHEL/CentOS/Fedora
あるいは、次の mysqladmin コマンドを実行して、MySQL サーバーの稼働時間を確認します。
$ sudo mysqladmin version -p

他の解決策には、MySQL サーバーを停止し、デバッグを有効にしてからサービスを再度開始することが含まれますが、これらに限定されません。問題を再現するために使用できるテスト ケースを作成してみることができます。さらに、追加のターミナル ウィンドウを開き、次のコマンドを実行して、他のクエリを実行している間に MySQL プロセスの統計を表示します。
$ sudo mysqladmin -i 5 status OR $ sudo mysqladmin -i 5 -r status
結論: 問題またはエラーの原因を特定する
ここでは、いくつかの一般的な MySQL の問題とエラーを検討し、それらのトラブルシューティングと解決方法も提供しましたが、エラーの診断で最も重要なことは、エラーの意味を (何が原因であるかという点で) 理解することです。 。
では、どうやってこれを判断できるのでしょうか?次の点は、問題の原因を正確に確認する方法について説明します。
- 最初の最も重要なステップは、ディレクトリ
/var/log/mysql/
に保存されている MySQL ログを調べることです。 tail などのコマンドライン ユーティリティを使用して、ログ ファイルを読み取ることができます。 - MySQL サービスの開始に失敗した場合は、systemctl を使用してそのステータスを確認するか、systemd で journetctl コマンド (
-xe
フラグを指定) を使用して問題を調べます。 リ> - 問題の原因については、
/var/log/messages
などのシステム ログ ファイルを調べることもできます。 - htop などのツールを使用して、どのプログラムがすべての CPU を占有しているか、マシンをロックしているかを確認したり、メモリ、ディスク容量、ファイル記述子、その他の重要なリソースが不足していないかどうかを検査してみてください。
- 問題が何らかの暴走プロセスであると仮定すると、MySQL が正常に動作するように、いつでも (pkill または kill ユーティリティを使用して) プロセスの強制終了を試みることができます。
- mysqld サーバーが問題を引き起こしていると仮定して、コマンド
mysqladmin -u root ping
またはmysqladmin -u root processlist
を実行できます。それからの応答を取得するため。 - MySQL サーバーへの接続時にクライアント プログラムに問題がある場合は、正常に動作しない理由を確認し、トラブルシューティングの目的でクライアント プログラムから出力を取得してみてください。
次の MySQL 関連記事もお読みください。
- 初心者向けに MySQL/MariaDB を学ぶ – パート 1
- CentOS 7 で Netdata を使用して MySQL/MariaDB データベースを監視する方法
- すべての MySQL データベースを古いサーバーから新しいサーバーに移行する方法
- Mytop – Linux で MySQL/MariaDB のパフォーマンスを監視するための便利なツール
- Linux 向けの 12 の MySQL/MariaDB セキュリティのベスト プラクティス
詳細については、問題と一般的なエラーに関する MySQL リファレンス マニュアルを参照してください。このマニュアルには、上で説明したものなど、MySQL の使用中に発生する可能性のある一般的な問題とエラー メッセージが包括的にリストされています。