一般的にエラー:
エラー: 2006 ( CR_SERVER_GONE_ERROR) - MySQL サーバーがなくなりました
クライアントがサーバーに質問を送信できなかったことを意味します。
mysql輸入
を介してデータベース ファイルをインポートしている特定のケースmysqlでは、SQL ファイル内のクエリの一部が大きすぎてインポートできず、サーバーで実行できなかったため、最初に発生したエラーでクライアントが失敗した可能性があります。
したがって、次の可能性があります。
続行して残りのクエリを実行するには、強制オプション ( -f) を追加します。mysql
これは、キャッシュに関連する大規模なクエリがデータベースに含まれている場合に便利です。
max_allowed_packetwait_timeoutサーバー構成でとを増やし~/.my.cnfます (例: )。
オプションを使用してデータベースをダンプ--skip-extended-insertし、大規模なクエリを分割します。その後、再度インポートします。
--max-allowed-packetのオプションを適用してみてくださいmysql。
一般的な理由
一般に、このエラーは次のようないくつかのことを意味する可能性があります。
サーバーへのクエリが正しくないか大きすぎる
解決策: variableを増やしmax_allowed_packetます。
変数が[mysqld]ではなく、セクションの下にあることを確認してください[mysql]。
テストに大きな数を使用することを恐れないでください ( など1G)。
MySQL/MariaDB サーバーを再起動することを忘れないでください。
次のようにして、値が正しく設定されていることを再確認します。
mysql -sve "SELECT @@max_allowed_packet" # or:
mysql -sve "SHOW VARIABLES LIKE 'max_allowed_packet'"
クライアント側の TCP/IP 接続からタイムアウトが発生しました。
解決策: variableを増やしwait_timeoutます。
サーバーへの接続が閉じられた後にクエリを実行しようとしました。
解決策: アプリケーションの論理エラーを修正する必要があります。
ホスト名の検索に失敗したか (DNS サーバーの問題など)、またはサーバーが--skip-networkingオプションで起動されました。
もう 1 つの可能性は、ファイアウォールが MySQL ポートをブロックしていることです (たとえば、デフォルトでは 3306)。
実行中のスレッドが強制終了されたため、再試行してください。
クエリの実行中にサーバーが停止するというバグが発生しました。
別のホストで実行されているクライアントには、接続に必要な権限がありません。
B.5.2.9 MySQL server has gone away .
デバッグ
以下に、専門家レベルのデバッグのアイデアをいくつか示します。
ログを確認します。
sudo tail -f $(mysql -Nse "SELECT @@GLOBAL.log_error")
または ping 関数 ( PHP など)を使用して接続をテストしますmysql。telnetmysql_ping
MySQL 通信を盗聴するために使用tcpdumpします (ソケット接続では機能しません)。例:
sudo tcpdump -i lo0 -s 1500 -nl -w- port mysql | strings
Linux では、 を使用しますstrace。BSD/Mac ではdtrace/dtrussを使用します。
sudo dtruss -a -fn mysqld 2>&1
参照: DTracing MySQL の概要
MySQL サーバーまたはクライアントをデバッグする方法の詳細については、「26.5 MySQL のデバッグと移植」を参照してください。
参考までに、クライアント コマンドsql-common/client.cのエラーをスローする原因となったファイルのソース コードを確認してください。CR_SERVER_GONE_ERROR
MYSQL_TRACE(SEND_COMMAND, mysql, (command, header_length, arg_length, header, arg));
if (net_write_command(net,(uchar) command, header, header_length,
arg, arg_length))
{
set_mysql_error(mysql, CR_SERVER_GONE_ERROR, unknown_sqlstate);
goto end;
}