250 MBのバックアップSQLファイルがありますが、新しいホスティングの制限はわずか100 MBです...
SQLファイルを複数のSQLファイルに分割できるプログラムはありますか?
人々が間違った質問に答えているようです...それで私はもっと明確にします:
私には250 MBのファイルのみがあり、phpMyAdminを使用した新しいホスティングのみがあり、現在データベースにはデータがありません。 250 MBのファイルを取得して新しいホストにアップロードする必要がありますが、100 MBのSQLバックアップファイルのアップロードサイズの制限があります。私は単に、大きすぎる1つのファイルを取得して、それぞれが完全な有効なSQLステートメントのみを含む複数のファイルに分割する必要があります(2つのファイル間でステートメントを分割することはできません)。
から mysqldumpからの出力をどのように小さいファイルに分割しますか?
最初にスキーマをダンプします(確かに2Mbに収まりますか?)
mysqldump -d --all-databases
そしてそれを復元します。
その後、個別の挿入ステートメントでデータのみをダンプするため、リモートサーバーでファイルを連結する必要なく、ファイルを分割して復元できます。
mysqldump --all-databases --extended-insert=FALSE --no-create-info=TRUE
バックアップファイルを分割する最も簡単な方法は、ソフトウェアsqldumpsplitter
を使用することです。これにより、dbファイルを複数のdbファイルに分割できます。ダウンロード ここ
または、この端末コマンドを使用します。
split -l 600 ./path/to/source/file.sql ./path/to/dest/file-
ここで、600は分割ファイルに含める行数です。また、2つの引数はそれぞれファイルのソースと宛先です。
注:分割ファイルを確認する必要があります。コマンドを分割しないでください。
私は mysqldumpsplitter (シェルスクリプト)と書き、指示に従ってデータベース/テーブルをすばやく簡単に分割しました。 mysqldumpから抽出する方法 の考えられるすべての使用例を参照してください。
sh mysqldumpsplitter.sh --source mysqldump-file.sql --extract DB --match_str database-name
このコードはあなたが望むものを正確に実行します(そしてそれはオープンソースです):
https://web.archive.org/web/20160313044916/http://rodo.nl/index.php?page=mysql-splitter
これにより、SQLファイルをいくつかの小さなファイルに分割できます(最大サイズを定義できます)。SQL構文は正しく保持され、「複数挿入」クエリ構文で機能します。
お役に立てれば!
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!"
私もこの問題を抱えており、単一の.sqlファイルを複数(テーブルごとに1つ)に分割する、非常にメモリとCPUに効率的なコードをコーディングすることにしました。
私が見つけた他の解決策は十分に機能していなかったので、私はそれを書かなければなりませんでした。実際の16 GBのダンプでは、2分未満で分割できました。
コードと手順は githubのプロジェクトページ にあります。