私は私のオフィスでいくつかのファイルを処理してリモートのMySQLサーバーに結果を報告するためにサーバーを実行しています。
ファイルの処理にはしばらく時間がかかり、プロセスは次のエラーで途中で終了します。
2006, MySQL server has gone away
MySQLの設定、wait_timeoutについて聞いたことがありますが、それを私のオフィスのサーバーまたはリモートのMySQLサーバーで変更する必要がありますか?
接続を確認し、必要に応じて再確立する方が簡単な場合があります。
詳しくは PHP:mysqli_ping をご覧ください。
私は何度もこれに遭遇しました、そして、私は通常その答えが max_allowed_packet
の非常に低いデフォルト設定であることがわかりました。
/etc/my.cnf
([mysqld]
の下)で8または16Mに上げると、通常は修正されます。 (MySql 5.7のデフォルトは4194304
で、これは4MBです。)
[mysqld]
max_allowed_packet=16M
注:行が存在しない場合は作成してください。
注:これはサーバーの実行中に設定できます。
set global max_allowed_packet=104857600
を使用してください。これは100MBに設定します。
私は同じ問題を抱えていましたが、max_allowed_packet
の下のmy.ini/my.cnf
ファイルの[mysqld]
を変更するとうまくいきます。
行を追加する
max_allowed_packet = 500M
完了したらrestart the MySQL service
。
私は7GB以上のサイズのMySQLデータベースを復元するためにMySQLコマンドラインで次のコマンドを使用しました、そして、それは働きます。
set global max_allowed_packet=268435456;
エラー:2006( CR_SERVER_GONE_ERROR )
メッセージ:MySQLサーバーは消えました
一般的に、この問題を解決するために接続を再試行してから再度クエリを実行することができます。
私はあなたがPDOを使用していると仮定します。もしそうなら、あなたはそれからPDO例外をキャッチし、カウンターをインクリメントし、そしてカウンターがしきい値の下にあるかどうかをもう一度試みます。
タイムアウトの原因となっているクエリがある場合は、次のコマンドを実行してこの変数を設定できます。
SET @@GLOBAL.wait_timeout=300;
SET @@LOCAL.wait_timeout=300; -- OR current session only
300は、クエリにかかる最大時間と思われる秒数です。
編集:あなたがまた使用したいかもしれない他の2つの設定はnet_write_timeout
とnet_read_timeout
です。
このエラーはwait_timeoutの期限切れが原因で発生します。
Mysqlサーバーに行き、そのwait_timeoutを確認してください。
mySQL>変数のように表示する 'wait_timeout'
mysql> set global wait_timeout = 600#10分または必要な最大待機時間
http://sggoyal.blogspot.in/2015/01/2006-mysql-server-has-gone-away.html
私は私のDigitalOcean Ubuntuサーバーでこれと同じエラーを受けていました。
Max_allowed_packetとwait_timeoutの設定を変更してみましたが、どちらも修正していません。
私のサーバーのRAMが不足していることがわかりました。私は 1GBのスワップファイル を追加しました。
それが原因であるかどうかを確認するためにfree -h
であなたの記憶をチェックしてください。
Windowsでは、xamppを使用している人はこのパスxampp/mysql/bin/my.iniを使用し、max_allowed_packet(セクション[mysqld]の下)を選択サイズに変更してください。例えば
max_allowed_packet=8M
再度php.ini(xampp/php/php.ini)で、upload_max_filesizeを選択サイズに変更します。例えば
upload_max_filesize=8M
私がこれを発見するまでしばらくの間私に頭痛を与えてください。それが役に立てば幸い。
私にとってはRAM問題でした。
12個のCPUコアと32 GBのRAMを搭載したサーバーでも同じ問題がありました。私はもっと研究してRAMを解放しようとしました。これはUbuntu 14.04でRAMを解放するために使ったコマンドです。
sync && echo 3 | Sudo tee /proc/sys/vm/drop_caches
そして、それはすべてを直しました。 1時間ごとに実行するようにcronの下に設定しました。
crontab -e
0 * * * * bash /root/ram.sh;
そして、このコマンドを使って空きRAMの空き容量を確認することができます。
free -h
そして、あなたはこのような何かを得るでしょう:
total used free shared buffers cached
Mem: 31G 12G 18G 59M 1.9G 973M
-/+ buffers/cache: 9.9G 21G
Swap: 8.0G 368M 7.6G
これは一般にMySQLサーバーの接続性の問題またはタイムアウトを示します。通常、my.cnfのwait_timeoutおよびmax_allowed_packetを変更することで解決できます。似ています。
私はこれらの値を提案するでしょう:
wait_timeout = 28800
max_allowed_packet = 8M
私の場合、それはopen_files_limit
変数の低い値で、データファイルへのmysqldのアクセスをブロックしていました。
私はそれをチェックしました:
mysql> SHOW VARIABLES LIKE 'open%';
+------------------+-------+
| Variable_name | Value |
+------------------+-------+
| open_files_limit | 1185 |
+------------------+-------+
1 row in set (0.00 sec)
変数を大きな値に変更した後、サーバーは再び稼働していました。
[mysqld]
open_files_limit = 100000
64ビットのWAMPSERVERを使用している場合、WAMPは[wampmysqld64]の下で設定された値ではなく[[wampmysqld64]]の下で設定された値を使用するため、max_allowed_packetを複数検索してください。 mysqldump]、私にとっては問題でしたが、間違ったものを更新していました。これをmax_allowed_packet = 64Mのように設定します。
うまくいけば、これは他のWampserverユーザがそこにいるのを助けます。
Vagrant Boxの場合は、十分なメモリをボックスに割り当ててください。
config.vm.provider "virtualbox" do |vb|
vb.memory = "4096"
end
考えられないシナリオは、TCPを強制的に接続にリセットするファイアウォールがクライアントとサーバーの間にあることです。
私はその問題を抱えていました、そして私たちの会社のF5ファイアウォールが5分以上アイドル状態である非アクティブセッションを終了するように設定されているのを見つけました。
繰り返しますが、これはありそうもないシナリオです。
Mysqlサーバーがログアウトした理由から、Mysqlサーバーのログをチェックすることは常に良い考えです。
それはあなたに教えてくれるでしょう。
私はこのエラー "#2006 - MySQLサーバーがなくなった"の解決策を見つけました。解決策は2つのファイルをチェックするだけです
Windowsでこれらのファイルのパスは
C:\wamp64\apps\phpmyadmin4.6.4
この2つのファイルでは、この値は次のとおりです。
$cfg['Servers'][$i]['Host']must be 'localhost' .
私の場合は、
$cfg['Servers'][$i]['Host'] = '127.0.0.1';
次のように変更してください。
"$cfg['Servers'][$i]['Host']" = 'localhost';
両方を確認してください。
そして最後のセット:
$cfg['Servers'][$i]['AllowNoPassword'] = true;
その後、Wampserverを再起動してください。
Phpmyadminのユーザー名とパスワードを変更する
あなたは直接config.inc.phpファイルを通してphpmyadminのユーザー名とパスワードを変更することができます
この2行
$cfg['Servers'][$i]['user'] = 'root';
$cfg['Servers'][$i]['password'] = '';
ここで新しいユーザー名とパスワードを入力できます。変更後、ファイルを保存してWAMPサーバーを再起動してください。
あなたのmy.ini/my.cnf
の下のligneのコメントを外してください、これはあなたの大きなファイルをより小さな部分に分割します
# binary logging format - mixed recommended
# binlog_format=mixed
に
# binary logging format - mixed recommended
binlog_format=mixed
UbuntuデスクトップのさまざまなMySQLクライアントソフトウェアでエラー2006メッセージが表示されました。 JDBCドライバのバージョンが古すぎることがわかりました。
これはあなたの.sqlファイルサイズの問題かもしれません。
Xamppを使用している場合xamppコントロールパネルに移動します - > MySql configをクリック - > my.iniを開きます。
パケットサイズを大きくしてください。
max_allowed_packet = 2M -> 10M
このエラーにはいくつかの原因があります。
wait_timeout
- サーバが接続を閉じる前にアクティブになるのを待つ秒数。interactive_timeout
- サーバーが対話式接続を待つ秒数です。max_allowed_packet
- パケットの最大サイズまたは生成された/中間の文字列。最大のBLOBと同じ大きさを1024の倍数で設定します。my.cnfの例
[mysqld]
# 8 hours
wait_timeout = 28800
# 8 hours
interactive_timeout = 28800
max_allowed_packet = 256M
free -h
でRAMに関する情報を確認してくださいCONN_MAX_AGE
を使います( docs を参照)SHOW VARIABLES LIKE '%time%';
mysqladmin variables
log_warnings = 4
log_error_verbosity = 3
MAMP 5.3では、my.cnfが見つからず、それらを追加してもmax_allowed_packetが変数に格納されているため機能しません。
1つの解決策は以下のとおりです。
次のクエリを実行し、max_allowed_packetを7gbに設定します。
グローバルmax_allowed_packet = 268435456を設定します。
場合によっては、次の値も増やす必要があります。
set global wait_timeout = 600;
set innodb_log_file_size =268435456;
XAMPPを使用しているユーザーの場合、C:\ xampp\mysql\bin\my.iniには2つのmax_allowed_packetパラメータがあります。
このエラーは基本的に2つの理由で起こります。
あなたは以下のこのコードを試すことができます。
# Simplification to execute an SQL string of getting a data from the database
def get(self, sql_string, sql_vars=(), debug_sql=0):
try:
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
except (AttributeError, MySQLdb.OperationalError):
self.__init__()
self.cursor.execute(sql_string, sql_vars)
return self.cursor.fetchall()
特に2番目の理由のために、それはその背後にある理由が何であれエラーを軽減します。
それが低RAMによるものである場合は、コード、データベース構成からデータベース接続効率を上げるか、または単にRAMを上げる必要があります。
Xamppサーバーを使用している場合:
Xampp-> mysql-> bin-> my.iniに移動します
以下のパラメータを変更します:
max_allowed_packet = 500M
innodb_log_file_size = 128M
これは私を大いに助けました:)