[mysql] 전체 mysql mysqldump 파일에서 단일 테이블을 복원 할 수 있습니까?

약 440 megs의 모든 테이블로 구성된 mysql 데이터베이스의 mysqldump 백업이 있습니다. mysqldump에서 테이블 중 하나의 내용을 복원하고 싶습니다. 이게 가능해? 이론적으로 원하는 테이블을 다시 작성하는 섹션을 잘라낼 수는 있지만 해당 크기의 텍스트 문서를 효과적으로 편집하는 방법조차 모릅니다.



답변

원하는 테이블 만 추출하기 위해 sed를 사용할 수 있습니다.

테이블 이름이 mytablemysql.dump 파일에 거대한 덤프가 들어있는 파일 이라고 가정 해 보겠습니다 .

$ sed -n -e '/CREATE TABLE.*`mytable`/,/CREATE TABLE/p' mysql.dump > mytable.dump

이 파일에 복사합니다 mytable.dump사이에 위치 무엇을 CREATE TABLE mytable하고 다음 CREATE TABLE다음 표에 해당.

그런 다음 mytable.dump테이블 구조가 포함 된 파일 mytable과 데이터 (목록 INSERT) 를 조정할 수 있습니다 .


답변

uloBasEI의 sed 명령의 수정 된 버전을 사용했습니다. 여기에는 이전 DROP 명령이 포함되며 mysql이 테이블에 데이터 덤프를 완료 할 때까지 읽습니다 (UNLOCK). wp_users 를 여러 WordPress 사이트로 가져 오기 위해 다시 일했습니다 .

sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' mydump.sql > tabledump.sql


답변

이것은 더 쉽게 할 수 있습니까? 이것이 내가 한 방법입니다.

임시 데이터베이스를 작성하십시오 (예 : 복원).

mysqladmin -u root -p 복원 생성

임시 데이터베이스에서 전체 덤프를 복원하십시오.

mysql -u 루트 -p 복원 <fulldump.sql

복구하려는 테이블을 덤프하십시오.

mysqldump 복원 mytable> mytable.sql

다른 데이터베이스에서 테이블을 가져 오십시오.

mysql -u 루트 -p 데이터베이스 <mytable.sql


답변

간단한 해결책은 별도로 복원하려는 테이블의 덤프를 작성하는 것입니다. mysqldump 명령을 사용하여 다음 구문으로 수행 할 수 있습니다.

mysqldump -u [user] -p[password] [database] [table] > [output_file_name].sql

그런 다음 정상적으로 가져 오면 덤프 된 테이블 만 가져옵니다.


답변

어떤 식 으로든 그렇게하는 모든 프로세스는 덤프의 전체 텍스트를 거쳐 어떤 방식 으로든 구문 분석해야합니다. 난 그냥 grep 것

INSERT INTO `the_table_i_want`

그리고 출력을 mysql에 파이프하십시오. INSERT가 올바른 방법인지 확인하기 위해 덤프의 첫 번째 테이블을 살펴보십시오.

편집 : 좋아, 이번에는 포맷을했습니다.


답변

@bryn 명령을 시도해야하지만`구분 기호를 사용하면 접두사 또는 접미사가있는 테이블을 추출합니다. 이것은 내가 일반적으로하는 일입니다.

sed -n -e '/DROP TABLE.*`mytable`/,/UNLOCK TABLES/p' dump.sql > mytable.sql

또한 테스트 목적으로 가져 오기 전에 테이블 이름을 변경할 수 있습니다.

sed -n -e 's/`mytable`/`mytable_restored`/g' mytable.sql > mytable_restored.sql

가져 오려면 mysql 명령을 사용하십시오.

mysql -u root -p'password' mydatabase < mytable_restore.sql


답변

  1. 지원

    $ mysqldump -A | gzip > mysqldump-A.gz
  2. 단일 테이블 복원

    $ mysql -e "truncate TABLE_NAME" DB_NAME
    $ zgrep ^"INSERT INTO \`TABLE_NAME" mysqldump-A.gz | mysql DB_NAME