web-dev-qa-db-ja.com

大規模なMySQLインポートの接続タイムアウトを防ぐ方法

開発中、ローカルWAMPサーバーがテストサーバーから最新のデータを取得する方法は、データベースのダンプが作成され、sourceコマンドを使用してそのダンプをアップロードして.sqlファイルをロードすることです。

最近、インポートの最後に、変更される前に外部キー制約などの元の設定を保存した@old変数に関するエラーが発生しました(したがって、インポートがエラーをスローしないように外部キー制約をオフにします)テーブルを再作成し、テーブルの1つがまだ作成されていない場合に外部キーを作成しようとします。原因は製品テーブルがますます多くのデータを取得しており、ある時点でインポート中にセッションがタイムアウトしたことが原因であることがわかりました。

すべてのタイムアウトを停止し、サインインしている間セッションを永久に継続する設定を(my.iniファイルのSQLクエリの一部として)設定できるかどうか疑問に思っています。

19
Memor-X

大規模なMySQLデータベースをインポートするための戦略

PHPMyAdminインポート

これを読んでいるなら、PHPMyAdminは大規模なMySQLデータベースインポートのオプションではありませんでした。それにもかかわらず、常に試してみる価値はありますか? PHPMyAdminインポートの失敗の最も一般的な原因は、インポート制限を超えていることです。ローカルで作業している場合、または独自のサーバーを使用している場合は、MySQLインストールフォルダーにあるmy.iniファイルに通常あるMySQL ini設定を変更してみてください。 WindowsでWAMPを使用している場合、MySQL> my.iniの下のWAMPコントロールパネルを使用してそのファイルにアクセスできます。新しい設定が使用されるように、忘れずにWAMPを再起動してください。ここで増やしたい設定は次のとおりです。

max_allowed_packet
read_buffer_size

強化されたMySQLインポート設定を使用しても、PHP設定。PHP.iniにアクセスできる場合、最大実行時間と関連設定を編集できます。 WAMPでは、PHP> php.ini。

max_execution_time
max_input_time
memory_limit

Big DumpスタガードMySQLダンプインポーターの使用

基本的なPHPMyAdminのインポートが機能しない場合は、Ozerov.deのBig Dumpスクリプトを試して、MySQLのインポートをずらしてください。この便利なスクリプトは、インポートを小さなブロックで実行します。これは、大規模なMySQLダンプを正常にインポートするためにしばしば必要なことです。 http://www.ozerov.de/bigdump/ から無料でダウンロードできます。

Big Dumpの使用プロセスは非常に簡単です。基本的に、SQLインポートファイルとBig Dumpスクリプトを一緒にサーバーに配置し、Big Dumpスクリプトにいくつかの構成を設定してから、スクリプトを実行します。 Big Dumpが残りを処理します!

それ以外の場合のこの優れたオプションに関する重要なポイントの1つは、拡張挿入を含むMySQLエクスポートではまったく機能しないことです。したがって、拡張挿入を防止するオプションがある場合は、試してみてください。それ以外の場合は、別の方法を使用して大きなMySQLファイルをインポートする必要があります。

MySQLコンソールでコマンドラインに移動

WAMPを実行している場合(および実行していない場合でも)、MySQLコンソールを使用して大規模なMySQLデータベースを追跡してインポートするオプションが常にあります。この投稿を書いているときに、この方法で4GBのデータベースをインポートしています。インポートする4GBのSQLファイルがある場合、この方法でさえ時間がかかるため、実際に書くのに時間がかかるのはこのためです!

一部の開発者(通常は私)は、黒い画面を開いて、その中に不可解なコマンドを入力することを恐れています。しかし、それは解放的である可能性があり、MySQLデータベースに関して言えば、多くの場合、これが最善の方法です。 WAMPでは、MySQL> MySQL ConsoleのWAMPコントロールパネルからMySQLコンソールにアクセスします。次に、MySQLデータベースをインポートするために必要な2つのシンプルなMySQLコンソールコマンドをコマンドラインスタイルで学習します。

use `db_name`

コマンドuseの後にデータベース名を指定すると、使用するデータベースをMySQLコンソールに通知します。インポート先のデータベースを既にセットアップしている場合は、useコマンドを発行することから始めます。データベースの名前がmy_great_databaseであるとします。この場合、MySQLコンソールで次のコマンドを発行します。コマンドはセミコロンで終わる必要があることに注意してください。

mysql-> use my_great_database;

mysql-> source sql_import_file.sql

コマンドsourceの後にSQLファイルの場所を指定すると、以前にuseコマンドで指定したデータベースにSQLファイルがインポートされます。パスを指定する必要があるため、ローカルサーバーでWAMPを使用している場合は、C:\ sql\my_import.sqlなどの取得しやすい場所にSQLファイルを配置することから始めます。このパス例の完全なコマンドは次のとおりです。

mysql-> source C:\sql\my_import.sql;

そのコマンドを実行すると、SQLファイルのインポートが開始されます。 MySQLコンソールを閉じる前に、クエリを実行してインポートを完了させます。

MySQLコマンドラインの詳細なドキュメントは、ここにあります: http://dev.mysql.com/doc/refman/5.5/en/mysql.html

別の解決策は、 MySQL Workbench を使用することです。

37
Christian Mark

このソリューションは私のために働いた:

max_allowed_packet  <-- --> upped size to 8M
read_buffer_size  <-- -->  upped from 256 to 512

LocalhostでXamppコントロールパネルを使用します。 MySQL configでmy.iniファイルに変更を加えた後、Xampp(またはWamp)を終了し、変更を有効にするために再起動することを忘れないでください。

(ヘッドバンギングの4日間と私は最終的にそれを修正しました!)

インポート時の症状:#2006 MySqlサーバーがなくなりました。ただし、87テーブル行のうち10テーブル行のみがインポートされていました。

7
CloudyBright

MySQL Workbench の使用を検討してください。無料で、非常に大きなスクリプトを非常にうまく処理します(メニューから次を選択します:File->SQLスクリプトを開く-サイズが大きい場合は、実行するかどうかを尋ねられます)。長年にわたって大規模なSQLダンプを処理してきました。

4
Hanzaplastique