1

重複の可能性:
LARGE sql ファイルを mysql テーブルにインポートする方法

PHPを使用して、odbcを介して多くの行を持ついくつかのテーブルをエクスポートしました。サイズは約3GBです。次に、そのテーブルを mysql db にインポートする必要があります。しかし、私がしようとすると

mysql -u root -p DB_development < HUGEdb.sql

しばらくすると、「殺された」と言われます。

phpmyadmin インターフェース経由ではダメです。

私のSQLファイルは次のようになります:

INSERT INTO `LINK_LA_TYP` VALUES
 ('1','8917181','1','24','2'),
 ('1','8934610','1','24','1'),
 ('1','9403766','1','30','1'),
 ('1','9422299','1','30','2'),
  many many many so far lines
 ('1','63139389','321','10017','1');

そのようなテーブルをインポートする方法はありますか? (ソースと bigdump は役に立ちません)

4

3 に答える 3

2

それがあなたにとってどのように役立つかはわかりませんが、おそらく助けになります。単なる提案です。

mydump:https ://github.com/qeremy/mydump

「mydump」を使用してデータをエクスポートできます。挿入制限に従ってデータがエクスポートされます(_cfg.php:21を参照)。エクスポート後、ダンプファイルをディレクトリに解凍します。たとえばlocal/muydump、次のような簡単なスクリプトが必要になります。

$files = glob("local/mydump/*.sql");
foreach ($files as $file) {
   $sql = file_get_contents($file);
   $db->query($sql);
}

私はいくつかのデータベースでこのスクリプトを使用していくつかのGBデータを転送することを達成しました(ただし、どれくらいの時間がかかったかは覚えていません)。

于 2012-08-15T14:07:25.720 に答える
2

あなたはバッファを殺しています!MyAdmin を使用しても、PHP メモリを増やす必要があります。これを試す前に、おそらく次のようなことがありました:PHPコードを記述し、行をループし、変数をクリアするたびに(レコードの各行に1つの変数)、PHP.iniからPHP Exec TimeをMAXに変更します

このようなもの

$mysqlCode= "INSERT INTO `LINK_LA_TYP` VALUES ('1','8917181','1','24','2')";
mysql_query("$mysqlCode");
$mysqlCode=null;

PS: バッファをプッシュしないことを強くお勧めします。サーバーに過負荷がかかる可能性があります。メモリを殺すよりも、実行時間を最大にしてガベージコレクタを更新し続ける方がよいでしょう。

于 2012-08-15T13:43:08.273 に答える
1

ステートメントの長さがmax_allowed_pa​​cket (1 つのパケットまたは生成された/中間の文字列の最大サイズ) を超える場合、このステートメントを実行することはできません。この場合、この非常に大きなステートメントを多くの小さなステートメントに分割する必要があります。

于 2012-08-15T13:47:06.423 に答える