큰 MySql 백업 파일을 여러 파일로 어떻게 분할합니까?


14

250MB 백업 SQL 파일이 있지만 새 호스팅의 제한은 100MB에 불과합니다 ...

SQL 파일을 여러 SQL 파일로 분할 할 수있는 프로그램이 있습니까?

사람들이 잘못된 질문에 대답하는 것처럼 보입니다 ... 그래서 더 자세히 설명하겠습니다.

250MB 파일 만 있고 현재 데이터베이스에 데이터가없는 phpMyAdmin을 사용하는 새 호스팅 만 있습니다. 250MB 파일을 가져 와서 새 호스트에 업로드해야하지만 100MB SQL 백업 파일 업로드 크기 제한이 있습니다. 너무 큰 파일 하나를 가져 와서 각각 유효한 SQL 문만 포함하는 여러 파일로 분할하면됩니다 (두 파일간에 문을 분할 할 수 없음).


여러 개의 유효한 SQL 파일이어야합니까? 파일을 100MB 청크로 여러 아카이브에 압축하여 업로드했습니다.
Nifle

예, 하나의 파일에는 한 문장의 절반이 다른 파일에는 다른 문장의 절반이없는 한 여러 개의 유효한 SQL 파일이어야합니다.
Brian T Hannan

답변:


5

에서 어떻게 작은 파일로 mysqldump는 출력을 분할합니까?

먼저 스키마를 덤프하십시오 (확실히 2Mb에 맞습니까?)

mysqldump -d --all-databases

복원하십시오.

그런 다음 별도의 insert 문으로 데이터 만 덤프하므로 원격 서버에서 파일을 연결하지 않고도 파일을 분할하여 복원 할 수 있습니다.

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은 분할 파일에 포함 할 줄 수입니다. 그리고 두 개의 인수는 각각 파일의 소스와 대상입니다.

참고 : 분할 파일을 확인해야하며 명령을 분할하지 않습니다.


1
올바른 방향으로 힌트를 주셔서 감사합니다! 그러나 사용하는 대신을 사용하는 split것이 좋습니다 csplit. INSERT예를 들어 값 목록 사이에있을 수있는 특정 줄 번호 바로 뒤에 분할되지 않습니다 . 정규식 을 전달 하여 분할 할 행을 식별 할 수 있습니다 . 예를 들면 다음과 같이 사용하십시오 :`csplit -k dump.sql '/ ^ CREATE TABLE. * /' '{900}'`그러면 덤프 파일이 각 create table …명령문 전에 분할됩니다 . 필요에 따라 변경하십시오. ( "csplit : *} : 잘못된 반복 횟수" 오류가 발생하기 때문에 {900}대신 전달하는 방식으로 , MacOS에서는 문제일까요?){*}
Arvid

3

나는 mysqldumpsplitter (shell script)를 작성했다.이 스크립트는 빠르고 쉬운 방법으로 지시 된대로 데이터베이스 / 테이블을 분할합니다. 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는 내 첫 생각이지만 메모장이나 편집기에서 큰 파일을 열 수조차 없습니다. 모든 텍스트의 250MB 파일을 여는 데 몇 시간이 걸립니다 ... 모든 메모장과 같은 앱이 멈추고 다시는 돌아 오지 않습니다.
브라이언 T 한난

@ 브라이언 : 4 was my first thought, but I can't even open the large file in notepad or any editor -메모장 + +는 잘 처리 할 수 ​​있습니다. 에서 다른 모습 superuser.com/questions/34749/...
Sathyajith 바트

파일을 자동으로 분할 한 다음 작은 조각을 정리하려면 Swiss File Knife 유틸리티 ( stahlworks.com/dev/swiss-file-knife.html ) 의 분할 옵션을 살펴보십시오.
Linker3000

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

나는이 문제도 가지고 있었고 단일 .sql 파일을 여러 테이블로 분할하는 매우 메모리 및 CPU 효율적인 코드 조각을 코딩하기로 결정했습니다.

내가 찾은 다른 솔루션이 충분히 성능이 좋지 않아서 작성해야했습니다. 실제 16GB 덤프에서 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.