web-dev-qa-db-ja.com

大規模なSQLファイルをインポートするときにMySQLサーバがなくなった

私はphpMyAdminを介して大きなSQLファイルをインポートしようとしました...しかし、それはエラーを示し続けました

「MySqlサーバーがなくなった」

何をすべきか?

234
FrancisMV123

述べたように ここ

MySQLサーバーの最も一般的な2つの理由(および修正)は次のとおりです(エラー2006)。

サーバーがタイムアウトし、接続を閉じました。直し方:

  1. mysqldのmy.cnf設定ファイルのwait_timeout変数が十分に大きいことを確認してください。 Debianの場合:Sudo nano /etc/mysql/my.cnfwait_timeout = 600秒(エラー2006がなくなったときにこの値を微調整または減らすことができます)を設定し、次にSudo /etc/init.d/mysql restartを設定します。確認しませんでしたが、wait_timeoutのデフォルト値は約28800秒(8時間)です。

  2. サーバーが正しくない、または大きすぎるパケットをドロップしました。 mysqldが大きすぎるまたは不正確なパケットを受信した場合、クライアントに問題が発生したと見なされ、接続が閉じられます。 my.cnfファイルのmax_allowed_pa​​cketの値を増やすことで、最大パケットサイズ制限を増やすことができます。 Debianの場合:Sudo nano /etc/mysql/my.cnfmax_allowed_packet = 64Mを設定して(エラー2006がなくなったときにこの値を微調整または減らすことができます)、次にSudo /etc/init.d/mysql restartを設定します。

編集:MySQLオプションファイルには、すでにコメントとして使用できるコマンドがないことに注意してください(例えばphp.iniのように)。そのため、my.cnfまたはmy.iniに何らかのchange/Tweakを入力し、それらをmysql/dataディレクトリまたは他の任意のパスに、[client][myslqd]...などの適切なオプショングループの下に配置する必要があります。
[mysqld]
wait_timeout = 600
max_allowed_packet = 64M
その後、サーバーを再起動してください。それらの値を取得するには、コンソールに入力します。
select @@wait_timeout;
select @@max_allowed_packet;

345
GBD

私にとっては、この解決策はうまくいかなかったので実行しました。

SET GLOBAL max_allowed_packet=1073741824;

私のSQLクライアントで。

MYSqlサービスの実行中にこれを変更できない場合は、サービスを停止して "my.ini"ファイルの変数を変更する必要があります。

例えば:

max_allowed_packet=20M
87
salsinga

デフォルト値で実行している場合は、mysql設定を最適化する余地がたくさんあります。

私がお勧めする最初のステップは、max_allowed_pa​​cketを128Mに増やすことです。

それから MySQL Tuning Primerスクリプト をダウンロードして実行します。それはより良いパフォーマンスのためにあなたの設定のいくつかの面に推奨を提供します。

MySQLとPHPの両方でタイムアウト値を調整することも検討してください。

インポートしているファイルのサイズ(ファイルサイズ)はどれくらいですか。PHPMyAdminの代わりにmysqlコマンドラインクライアントを使用してファイルをインポートできますか?

18
Daemon of Chaos

もしあなたがXAMPPに取り組んでいるのであれば、MySQLサーバが以下の変更で問題を解決したことを直すことができます..

my.iniファイルを開くmy.iniの場所は(D:\ xampp\mysql\bin\my.ini)です。

以下の変数値を変更してください。

max_allowed_packet = 64M
innodb_lock_wait_timeout = 500
17
Mohan Gathala

OS XでMAMPを使用している場合は、MySQLのテンプレートのmax_allowed_packet値を変更する必要があります。

  1. ファイル>テンプレートの編集> MySQL my.cnf

  2. それから、max_allowed_packetを検索し、値を変更して保存します。

8
askthebigo

私はこの短い/etc/mysql/my.cnfファイルで私の問題を解決しました:

[mysqld]
wait_timeout = 600
max_allowed_packet = 100M
6
Dan.faudemer

私は16 GBのSQLファイルでインポートしたとき、私はこのエラーと他の関連するものを持っていました。私にとっては、my.iniを編集し、[mysqld]セクションに次のように設定します(いくつかの異なる投稿に基づいて)。

max_allowed_packet      = 110M
innodb_buffer_pool_size=511M
innodb_log_file_size=500M
innodb_log_buffer_size = 800M
net_read_timeout        = 600
net_write_timeout       = 600

あなたがウィンドウズの下で動いているならば、コントロールパネル、サービスに行き、そしてMySQLのための詳細を見ると、あなたはmy.iniがどこにあるか見るでしょう。 my.iniを編集して保存したら、mysqlサービスを再起動します(またはコンピュータを再起動します)。

HeidiSQLを使用している場合は、それを使用してこれらの一部または全部を設定することもできます。

5
BenV136

これが起こることができるもう一つの理由はメモリを使い果たしています。/var/log/messagesをチェックして、あなたのmy.cnfがmysqldがあなたのマシンよりも多くのメモリを割り当てるように設定されていないことを確かめてください。

あなたのmysqldプロセスは実際にはカーネルによって強制終了され、それから気付かずに "safe_mysqld"プロセスによって再起動される可能性があります。

Topを使って、実行中のメモリ割り当てを見て、ヘッドルームが何であるかを確認します。

変更する前に、my.cnfのバックアップを作成してください。

5
TekOps

データにBLOBデータが含まれる場合:

コマンドラインからデータをインポートするとBLOBデータが詰まってしまい、「MySQLサーバーがなくなった」というエラーが発生することに注意してください。

これを回避するには、mysqldumpを--hex-blobフラグを付けて再作成します。

http://dev.mysql.com/doc/refman/5.7/ja/mysqldump.html#option_mysqldump_hex-blob

これは、他のテキストの中でも、バイナリではなく16進値でデータファイルを書き出します。

PhpMyAdminには、オプション「バイナリ列を16進数でダンプする(たとえば、「abc」が0x616263になる)」もあります。

2015年12月現在、GEOMカラムが変換されないという長年のバグがあります。 mysqldumpを使用してGEOMETRYカラムでテーブルをバックアップしますか? そのため、PhpMyAdminのようなプログラムを使用するのが唯一の回避策のようです(上記のオプションはGEOM列を正しく変換します)。

2
fooquency

失敗するまでに時間がかかる場合は、wait_timeout変数を大きくします。

すぐに失敗する場合は、max_allowed_packet変数を大きくします。それでもまだ機能しない場合は、コマンドが有効なSQLであることを確認してください。私のものはすべてを台無しにしたエスケープされていない引用符を持っていました。

また、可能であれば、1つのSQLコマンドの挿入数を1000などに制限することを検討してください。挿入数nごとにINSERT ...部分を再導入することで、単一のステートメントから複数のステートメントを作成するスクリプトを作成できます。

1
e18r

"max_allowed_pa​​cket"を1024Mに更新しましたが、まだうまくいきませんでした。デプロイメントスクリプトが実行されていたことがわかります。

mysql --max_allowed_packet=512M --database=mydb -u root < .\db\db.sql

このようにしない場合は、必ずコマンドラインからより大きな数を明示的に指定してください。

1
coderama

私は同様のエラーを得ました..これを解決するためにちょうどmy.iniファイルを開いてください。ここで行番号36で最大許容パケットサイズの値を変更してください。 max_allowed_pa​​cket = 20M

1
parag jain

Systemdのようなサービスマネージャが原因で、mysqldプロセスが再起動しないようにしてください。

私はcentos 7を使って自慢してこの問題を抱えていました。設定の微調整は役に立ちませんでした。結局それはあまりにも多くのメモリを消費するたびにmysqldサービスを殺すsystemdでした。

0
tvorog

私は長い間と重いデータで滞在するためにmysql接続を含むいくつかの大きな計算をしています。私はこの「Mysql Go away issue」に直面していました。だから私はクエリを最適化しようとしたが、それは私を助けていない私はデフォルトで低い値に設定されているmysql変数の制限を増やしました。

wait_timeout max_allowed_pa​​cket

これまでにあなたに合ったものを制限するためにそれはAny Number * 1024(Bytes)であるべきです。あなたは 'mysql -u username -p'コマンドを使って端末にログインすることができ、これらの変数の制限をチェックして変更することができます。

0

max_allowed_packetを増やしても解決しない場合.

Sequel Proを介して.sqlファイルを私のデータベースにインポートするとき、私はあなたと同じエラーを得ていました。

max_allowed_packet512Mにアップした後もエラーが解決しないので、代わりに次のようにコマンドラインでインポートを実行しました。

mysql --verbose -u root -p DatabaseName < MySQL.sql

以下のエラーが発生しました。

ASCII '\0' appeared in the statement, but this is not allowed unless option --binary-mode is enabled

私はいくつかの役に立つStackOverflow質問を見つけました:

私の場合、私の.sqlファイルは少し破損しているか何かでした。 MySQLのダンプは2つのZipファイルで構成されており、それらを連結して解凍する必要があります。解凍は最初は中断されていたと思います。ファイルには奇妙な文字とエンコーディングがいくつか残っています。新鮮なMySQLダンプを取得して解凍することは私にとってはうまくいった。

他の人がmax_allowed_packet変数を増やすことが助けにならないことを見つける場合のために、ここにこれを追加したいだけでした。

0
Joshua Pinter

For GoDaddy共有ホスティング

GoDaddyの共有ホスティングアカウントでは、PHP.iniなどのファイルを微調整するのは難しいです。しかし、別の方法があり、それは私にとっては完璧に機能しました。 (私はちょうど3100行と145桁を含む3.8Mbの.sqlテキストファイルをアップロードしました。phpMyAdminのIMPORTコマンドを使用して、私は恐ろしいMySQLサーバはエラーを取り除きました。それ以上の情報はありません。)

私はマットブッチャーが正しい答えを持っていたことがわかりました。 Mattのように、私はMySQLデータベースを一口サイズの塊にエクスポートすることから、大きなインポートを小さなものに分割するスクリプトを書くことまで、あらゆる種類のトリックを試してみました。しかし、これがうまくいったのです:

(1)CPANEL ---> FILES(グループ)---> BACKUP

(2a)「部分バックアップ」の見出しの下に...
(2b) "MySQLデータベースバックアップのダウンロード"の下
(2c)データベースを選択してバックアップをダウンロードします(このステップは任意ですが賢明です)。

(3a)「MySQLデータベースのバックアップの復元」の見出しの下で、直接2bの右側にあります。
(3b)ローカルドライブから.SQLインポートファイルを選択してください
(3c)本当の幸せはあなたのものになるでしょう(まもなく…)私のものは約5秒かかりました

私はこの方法で単一のテーブルをインポートすることができました。私のデータベースの他には何も影響を受けませんでした - しかしそれは上記のステップ(2)がに対して保護することを意図しているものです。

ノート:
a。 .SQLインポートファイルの作成方法がわからない場合は、phpMyAdminを使用してテーブルをエクスポートし、そのファイル構造を変更してください。

SOURCE: Matt Butcher 2010記事

0
cssyphus

私はデータベースを複製するときに私は今日同様のエラーを持っていました(MySQLサーバーは消えてしまいました...)が、私がmysql.server restartを再起動しようとするとエラーになりました

ERROR! The server quit without updating PID ...

これが私がそれを解決した方法です:私はApplications/Utilities /を開いてActivity Monitorを走らせました

 quit mysqld

その後でエラーの問題を解決することができました

mysql.server restart
0
Kingsley Ijomah