약 440 megs의 모든 테이블로 구성된 mysql 데이터베이스의 mysqldump 백업이 있습니다. mysqldump에서 테이블 중 하나의 내용을 복원하고 싶습니다. 이게 가능해? 이론적으로 원하는 테이블을 다시 작성하는 섹션을 잘라낼 수는 있지만 해당 크기의 텍스트 문서를 효과적으로 편집하는 방법조차 모릅니다.
답변
원하는 테이블 만 추출하기 위해 sed를 사용할 수 있습니다.
테이블 이름이 mytable
mysql.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
답변
-
지원
$ mysqldump -A | gzip > mysqldump-A.gz
-
단일 테이블 복원
$ mysql -e "truncate TABLE_NAME" DB_NAME $ zgrep ^"INSERT INTO \`TABLE_NAME" mysqldump-A.gz | mysql DB_NAME