web-dev-qa-db-ja.com

拡張挿入によるMySQLインポートデータベースエラー

400MB(非圧縮)のMySQLデータベースをインポートしています。 BIGDUMPを使用していますが、次のエラーが発生します。

Stopped at the line 387.

At this place the current query includes more than 300 dump lines. That can happen if your dump file was created by some tool which doesn't place a semicolon followed by a linebreak at the end of each query, or if your dump contains extended inserts. Please read the BigDump FAQs for more infos.

ファイルには拡張挿入が含まれていると思いますが、古いサーバーから削除されているため、データベースを再生成する方法がありません。このデータベースをインポートしたり、インポートするように変換したりするにはどうすればよいですか?

助けてくれてありがとう。

最高のニック

EDIT:唯一の実行可能な答えは、拡張された挿入を分離することであるように見えますが、以下の答えが示唆するように、ファイルを分割する方法を理解する助けが必要です。助けてください。ありがとうございました。

16
Nick Woodhams

メモリバッファを増やし、SSH経由で通常のmysqlインポートを実行した後、データベースを正常にインポートできました。

絶対パスで次のコマンドを使用しました。

mysql -u <username> -p < /home/dir/dumpfile.sql

最高のニック

4
Nick Woodhams

.sqlファイルに変更を加える必要はありません。テキストエディタでbigdump.phpを開き、行を見つけるだけです。

define ('MAX_QUERY_LINES',300);

300を好きなものに置き換えます。

36

300を挿入した後、新しいステートメントを開始するように、ダンプファイルを編集するだけです。

INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (1, 'a', 'b'),
    (2, 'c', 'd'),
    (3, 'e', 'f'),
    -- snip --
    (300, 'w', 'x');
INSERT INTO `myTable` (`id`, `field1`, `field2`) VALUES
    (301, 'y', 'z'),
    (302, ... etc

これを行うには、<backup>.sqlファイルを任意のテキストエディタで開くだけです。プレーンテキストです。バックアップが.gzまたは.bzファイルである場合もありますが、それらは単なるzipファイルです。これらのgzip圧縮またはbzip圧縮されたファイルを解凍すると、単一の.sqlファイルになります。簡単に編集できます。

任意の行数の後に各ステートメントを分割するスクリプトを作成するのは、おそらくそれほど難しいことではありません。基本的なプログラムロジックは次のようになります。おそらく次のようになります。

  1. 「INSERT」で始まる行を見つけます。
  2. 単語「VALUES」の終わりまで行をコピーします
  3. 次のすべての行をステップスルーし、カウントアップします。
  4. カウンターが300に達した場合は、最後の行の最後にセミコロンを追加し、前の「INSERT ... VALUES」ステートメントに貼り付けます。カウンターを1にリセットし、手順3に進みます。
  5. 「INSERT」で始まる行に到達した場合は、カウンターを1にリセットして、ステップ2に進みます。

ただし、これを手動で行うだけで、将来のすべてのバックアップで拡張挿入が使用されないようにすることができます。また、phpMyAdminを使用すると、エクスポートを作成するときに最大ステートメントサイズを設定できるため、基本的に上記の処理が行われます。

ただし、メモリ制限を使用して行ったことは、おそらくはるかに簡単な解決策です。これらの制限を変更できない同様の状況にある他の人は、上記を試してください。

9
nickf

私にとっては次のように機能しました。

検索する

$max_query_lines = 300;

その後、単にに置き換えられます

$max_query_lines = 3000;
4
Khaan

古い質問ですが、インターネット検索で見つけましたが、phpMyAdminが設定の名前を変更したようであるため、探していた答えがまだありません。

PhpMyAdminエクスポートで「拡張挿入」を無効にするには、「データ挿入時に使用する構文」設定を最初のオプションに設定する必要があります。

include column names in every INSERT statement 
Example: INSERT INTO tbl_name (col_A,col_B,col_C) VALUES (1,2,3)
0
cometfish

'max_query_lines'および 'INSERT'ソリューションをありがとう!

「どちらのソリューションにもいくつかの欠点があります。拡張挿入がないと、出力ダンプは拡張挿入があるダンプよりも何倍も大きくなります。max_query_linesを増やすと、bigdumpスクリプトのメモリ使用量が増え、サーバーのメモリが不足する可能性があります。」

ソース: http://www.etctips.com/error-at-this-place-the-current-query-includes-more-than-xxx-dump-lines/

0
Codo Ekran

開いた bigdump.phpそして次の行を変更します:

$max_query_lines = 300;

これに:

$max_query_lines = 300000;
0
skysolution