11

У меня есть резервный файл SQL размером 250 МБ, но ограничение на новый хостинг составляет всего 100 МБ ...

Существует ли программа, позволяющая разбить файл SQL на несколько файлов SQL?

Кажется, что люди отвечают на неправильный вопрос ... поэтому я уточню больше:

У меня ТОЛЬКО файл 250 МБ, и только новый хостинг использует phpMyAdmin, который в настоящее время не имеет данных в базе данных. Мне нужно взять файл 250 МБ и загрузить его на новый хост, но есть ограничение размера загрузки файла резервной копии SQL 100 МБ. Мне просто нужно взять один файл, который слишком большой, и разбить его на несколько файлов, каждый из которых содержит только полные допустимые операторы SQL (никакие операторы не могут быть разделены между двумя файлами).

9 ответов9

6

Простейший способ разбить файл резервной копии - использовать программный sqldumpsplitter , который позволяет разбить файл БД на несколько файлов БД. Скачать здесь

Или используйте эту терминальную команду.

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

Здесь 600 - это количество строк, которые вы хотите иметь в ваших разделенных файлах. И два аргумента - источник и место назначения файлов соответственно.

ПРИМЕЧАНИЕ: вы должны проверить файлы разделения, вы не разделяете никакие команды.

5

От Как я могу разделить вывод из mysqldump на меньшие файлы?

Сначала выведите схему (она наверняка умещается в 2Mb, нет?)

mysqldump -d --all-databases

и восстановить его.

Впоследствии дамп только данных в отдельных операторах вставки, так что вы можете разделить файлы и восстановить их без необходимости объединять их на удаленном сервере

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

Я написал mysqldumpsplitter (сценарий оболочки), который быстро и легко разбивает базы данных / таблицы в соответствии с инструкциями. Просмотрите все возможные варианты использования инструкции по извлечению из mysqldump.

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

Этот код будет делать именно то, что вы хотите (и это с открытым исходным кодом):

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

Он позволяет вам разбить любой файл SQL на несколько файлов меньшего размера (вы можете определить максимальный размер). Синтаксис SQL будет сохраняться правильно, и он работает с синтаксисом запроса «множественная вставка».

Надеюсь это поможет!

0

Вы можете разбить большой файл в Eclipse. Я попытался файл 105GB в Windows успешно:

Просто добавьте библиотеку 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) Есть ли у вас возможность загрузить файл другим способом, например, scp или ftp, а затем восстановить его из локального файла?

2) Ваш провайдер возьмет файл на CD и загрузит его для вас?

3) Можете ли вы восстановить файл на локальном сервере, а затем сделать из него серию файлов резервных копий, используя определенные критерии, чтобы уменьшить размеры отдельных файлов?

4) Вы могли бы разделить файл вручную, а затем привести в порядок команды SQL в конце файлов?

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

У меня тоже была эта проблема, и я решил написать чрезвычайно эффективный код памяти и процессора, который разбивает один файл .sql на несколько (по одному на таблицу).

Я должен был написать это, так как любое другое решение, которое я нашел, не было достаточно хорошим. На реальном 16ГБ дампе мне удалось разделить его менее чем за 2 минуты.

Код и инструкции доступны на странице проекта на github.

-1

Вместо разделения файла вы можете использовать клиент MySQL на локальном компьютере и подключить его к удаленной базе данных MySQL. Я использую HeidiSQL и нашел его очень хорошим.

Конечно, отправка 250 МБ операторов SQL через Интернет может занять некоторое время.

Вы также можете попробовать BigDump

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .