大きなMySqlバックアップファイルを複数のファイルに分割するにはどうすればよいですか?


14

250 MBのバックアップSQLファイルがありますが、新しいホスティングの制限は100 MBしかありません...

SQLファイルを複数のSQLファイルに分割できるプログラムはありますか?

人々が間違った質問に答えているようです...それで私はもっと明確にします:

私は250 MBのファイルしか持っておらず、phpMyAdminを使用した新しいホスティングのみを持っていますが、現在データベースにはデータがありません。250 MBのファイルを取得して新しいホストにアップロードする必要がありますが、100 MBのSQLバックアップファイルのアップロードサイズには制限があります。大きすぎる1つのファイルを取得して、有効なSQLステートメントのみを含む複数のファイルに分割するだけです(2つのファイル間でステートメントを分割することはできません)。


複数の有効なSQLファイルである必要がありますか?ファイルを100MBのチャンクでいくつかのアーカイブに圧縮し、それをアップロードします。
ニフル

はい、それは複数の有効なSQLファイルでなければなりません... 1つのファイルに1つのステートメントの半分があり、他の半分が別のファイルにない限り。
Brian T Hannan

回答:


5

私は小さなファイルにmysqldumpをからの出力を分割するにはどうすればよいですか?

最初にスキーマをダンプします(確かに2Mbに収まりますか?)

mysqldump -d --all-databases

そしてそれを復元します。

その後、別個の挿入ステートメントでデータのみをダンプするので、リモートサーバーでファイルを連結する必要なく、ファイルを分割して復元できます。

mysqldump --all-databases --extended-insert=FALSE --no-create-info=TRUE

いいアドバイス!完全に理にかなっています。テーブル間に複雑な依存関係があり、スキーマとデータの両方のエクスポートの分割が機能しない場合に非常に便利です。
リードリチャーズ

7

バックアップファイルを分割する最も簡単な方法はsqldumpsplitter、dbファイルを複数のdbファイルに分割できるソフトウェアを使用することです。ここからダウンロード

または、この端末コマンドを使用します。

split -l 600 ./path/to/source/file.sql ./path/to/dest/file-

ここで、600は分割ファイルに含める行数です。また、2つの引数はそれぞれファイルのソースと宛先です。

注:分割されたファイルを確認する必要があります。コマンドは分割しないでください。


1
正しい方向にヒントを与えてくれてありがとう!ただし、を使用する代わりに、を使用するsplitことをお勧めしcsplitます。特定の行番号の直後では分割されませんINSERT。たとえば、値のリストの間にある場合があります。分割する行を識別する正規表現を渡すことができます。次のように使用します。: `csplit -k dump.sql '/ ^ CREATE TABLE。* /' '{900}'`これにより、各create table …ステートメントの前にダンプファイルが分割されます。これを必要に応じて変更してください。(ちなみに、「csplit:*}:繰り返し数が間違っていますというエラーが表示されるの{900}ではなく、MacOSで問題が発生している可能性があります。){*}
Arvid

3

私はmysqldumpsplitter(シェルスクリプト)を作成しました。これは、指示に従ってデータベース/テーブルをすばやく簡単な方法で分割します。mysqldumpからのハウツー抽出の考えられるすべての使用例を参照してください。

sh mysqldumpsplitter.sh --source mysqldump-file.sql --extract DB --match_str database-name


0

1)別の方法(scpまたはftpなど)でファイルをアップロードし、ローカルファイルから復元するオプションはありますか?

2)ISPはCD上のファイルを取得してロードしますか?

3)ファイルをローカルサーバーに復元し、特定の基準を使用してそこから一連のバックアップファイルを作成して、個々のサイズを抑えることができますか?

4)ファイルを手動で分割して、ファイルの最後にあるSQLコマンドを整理できますか?


オプション2、3、および4について考えていました。2は最後の手段です。3はおそらく私がやろうとしている次のことでしょう。4は最初の考えでしたが、メモ帳やエディターで大きなファイルを開くことさえできません。すべてのテキストの250 MBファイルを開くのに数時間かかります...すべてのメモ帳のようなアプリはフリーズして、二度と戻りません。
Brian T Hannan

@ブライアン:-Notepad 4 was my first thought, but I can't even open the large file in notepad or any editor ++はそれらをうまく処理できます。それ以外は、superuser.com
questions / 34749 /…を

ファイルを自動的に分割してから小さな断片を片付けたい場合は、スイスファイルナイフユーティリティの分割オプション(stahlworks.com/dev/swiss-file-knife.html)を
ご覧ください

0

Eclipseで大きなファイルを分割できます。私はWindowsで105GBのファイルを正常に試しました:

MySQLDumpSplitterライブラリをプロジェクトに追加するだけです:http ://dl.bintray.com/verace/MySQLDumpSplitter/jar/

インポート方法に関する簡単なメモ:

- In Eclipse, Right click on your project --> Import
- Select "File System" and then "Next"
- Browse the path of the jar file and press "Ok"
- Select (thick) the "MySQLDumpSplitter.jar" file and then "Finish"
- It will be added to your project and shown in the project folder in Package Explorer in Eclipse
- Double click on the jar file in Eclipse (in Package Explorer)
- The "MySQL Dump file splitter" window opens which you can specify the address of your dump file and proceed with split.

0

私もこの問題を抱えており、1つの.sqlファイルを複数(テーブルごとに1つ)に分割する、非常にメモリとCPUに効率的なコードをコーディングすることにしました。

私が見つけた他の解決策は十分に機能していないため、私はそれを書かなければなりませんでした。実際の16 GBのダンプでは、2分未満で分割できました。

コードと手順はgithubのプロジェクトページにあります


0

bashまたはperlスクリプトを実行できる場合、いくつかのオプションがあります。yoodey.comからこれを試してください

#!/usr/bin/perl -w
#
# splitmysqldump - split mysqldump file into per-database dump files.
use strict;
use warnings;
my $dbfile;
my $dbname = q{};
my $header = q{};
while (<>) {    

# Beginning of a new database section:
    # close currently open file and start a new one
    if (m/-- Current Database\: \`([-\w]+)\`/) {
    if (defined $dbfile && tell $dbfile != -1) {
        close $dbfile or die "Could not close file!"
    }
    $dbname = $1;
    open $dbfile, ">>", "$1_dump.sql" or die "Could not create file!";
    print $dbfile $header;
    print "Writing file $1_dump.sql ...\n";
    }
    if (defined

$dbfile && tell $dbfile != -1) {
    print $dbfile $_;
    }
    # Catch dump file header in the beginning
    # to be printed to each separate dump file.
    if (!

$dbname) { $header .= $_; }
}
close $dbfile or die "Could not close file!"

-1

ファイルを分割する代わりに、ローカルマシンでMySQLクライアントを使用して、リモートのMySQL DBに接続できます。私はHeidiSQLを使用しており、非常に優れていることがわかりました。

もちろん、インターネット経由で250MBのSQLステートメントを送信するには、しばらく時間がかかる場合があります。

BigDumpを試すこともできます

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.