web-dev-qa-db-ja.com

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

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

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

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

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

14
Brian T Hannan

から mysqldumpからの出力をどのように小さいファイルに分割しますか?

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

mysqldump -d --all-databases

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

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

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

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

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

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

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

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

7
GIRI

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

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

このコードはあなたが望むものを正確に実行します(そしてそれはオープンソースです):

https://web.archive.org/web/20160313044916/http://rodo.nl/index.php?page=mysql-splitter

これにより、SQLファイルをいくつかの小さなファイルに分割できます(最大サイズを定義できます)。SQL構文は正しく保持され、「複数挿入」クエリ構文で機能します。

お役に立てれば!

2
Will0

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!"
0
Jrgns

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

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

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

0
Andrea Baccega