ウェブサイト検索

MySQL の一般的なエラーのトラブルシューティングに役立つヒント


MySQL は、Oracle が所有する、広く使用されているオープン ソースのリレーショナル データベース管理システム (RDMS) です。これは長年にわたって Web ベースのアプリケーションのデフォルトの選択肢であり、他のデータベース エンジンと比較して依然として人気があります。

こちらもお読みください: 最新の MySQL を RHEL/CentOS および Fedora にインストールする方法

MySQL は Web アプリケーション向けに設計され、最適化されています。FacebookTwitterなどの主要な Web ベースのアプリケーションの不可欠な部分を形成しています。ウィキペディアYouTubeなど。

あなたのサイトまたは Web アプリケーションはMySQL を利用していますか?この詳細な記事では、MySQL データベース サーバーの問題と一般的なエラーのトラブルシューティング方法を説明します。問題の原因を特定する方法とその解決策について説明します。

1. ローカル MySQL サーバーに接続できない

MySQL でよくあるクライアントからサーバーへの接続エラーの 1 つは、「エラー 2002 (HY000): ソケット '/var/run/mysqld/mysqld.sock' (2) を介してローカル MySQL サーバーに接続できません」 です。 >」。

このエラーは、ホスト システム上で実行されている MySQL サーバー (mysqld) が存在しないか、または間違った Unix ソケット ファイル名または TCP/IP< を指定したことを示します。 サーバーに接続しようとするときのポート。

次に示すように ps コマンドと 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 の問題とエラーを確認し、それらのトラブルシューティングと解決方法も提供しましたが、エラーの診断で最も重要なことは、エラーの意味を (何が原因であるかという点で) 理解することです。 。

では、どうやってこれを判断できるのでしょうか?次の点は、問題の原因を正確に確認する方法について説明します。

  1. 最初の最も重要な手順は、ディレクトリ /var/log/mysql/ に保存されている MySQL ログを調べることです。 tail などのコマンド ライン ユーティリティを使用して、ログ ファイルを読み取ることができます。
  2. MySQL サービスの開始に失敗した場合は、systemctl を使用してステータスを確認するか、systemd で journetctl コマンド (-xe フラグを指定) を使用して問題を調べます。
  3. /var/log/messages などのシステム ログ ファイルを調べて、問題の原因を調べることもできます。
  4. Mytop、glances、top、ps、htop などのツールを使用して、どのプログラムがすべての CPU を占有しているか、マシンをロックしているかを確認したり、メモリ、ディスク領域、ファイル記述子、またはその他の重要なリソースが不足していないかどうかを調べてください。 。
  5. 問題が何らかの暴走プロセスであると仮定すると、MySQL が正常に動作するように、いつでも (pkill または kill ユーティリティを使用して) プロセスの強制終了を試みることができます。
  6. mysqld サーバーが問題を引き起こしていると仮定すると、コマンド mysqladmin -u root ping または mysqladmin -u root processlist を実行して、それからの返答。
  7. MySQL サーバーへの接続時にクライアント プログラムに問題がある場合は、正常に動作しない理由を確認し、トラブルシューティングの目的でクライアント プログラムから出力を取得してみます。

次の MySQL 関連記事もお読みください。

  1. 初心者向けに MySQL/MariaDB を学ぶ – パート 1
  2. CentOS 7 で Netdata を使用して MySQL/MariaDB データベースを監視する方法
  3. すべての MySQL データベースを古いサーバーから新しいサーバーに移行する方法
  4. Mytop – Linux で MySQL/MariaDB のパフォーマンスを監視するための便利なツール
  5. 12 Linux 向けの MySQL/MariaDB セキュリティのベスト プラクティス

詳細については、問題と一般的なエラーに関する MySQL リファレンス マニュアルを参照してください。このマニュアルには、上で説明したものなど、MySQL の使用中に発生する可能性のある一般的な問題とエラー メッセージが包括的にリストされています。