mysqldump 특정 테이블을 어떻게 사용합니까?


답변:


540

mydb에서 테이블 t1, t2 및 t3을 덤프하는 경우

mysqldump -u... -p... mydb t1 t2 t3 > mydb_tables.sql

mydb에 많은 테이블이 있고 t1, t2 및 t3을 제외한 모든 것을 덤프하려면 다음을 수행하십시오.

DBTODUMP=mydb
SQL="SET group_concat_max_len = 10240;"
SQL="${SQL} SELECT GROUP_CONCAT(table_name separator ' ')"
SQL="${SQL} FROM information_schema.tables WHERE table_schema='${DBTODUMP}'"
SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"
TBLIST=`mysql -u... -p... -AN -e"${SQL}"`
mysqldump -u... -p... ${DBTODUMP} ${TBLIST} > mydb_tables.sql

시도 해봐 !!!

업데이트 2014-03-06 10:15 EST

@RoryDonohueGROUP_CONCAT 함수의 최대 길이를 연장해야 한다고 지적했습니다 . 세션 변수 group_concat_max_len 을 최대 10K 길이의 답변에 추가했습니다 . 감사합니다, @RoryDonohue.


43
몇 가지 테이블 만 제외하려면 --ignore-table = Table1 --ignore-table = Table2 --ignore-table = Table3 등을 사용할 수 있습니다.
codewaggle

@codecowboy, 당신은 변경할 수 있습니다 SQL="${SQL} AND table_name NOT IN ('t1','t2','t3')"SQL="${SQL} AND table_name NOT LIKE 'foo\_%'". 방금 테스트했으며 작동합니다. 조건에 '% foo %'를 변경하여 이름에 'foo'가 포함 된 모든 테이블 ( 'food', 'fool'등)을 가져올 수 있습니다.
Buttle Butkus

1
인수 가 존재하는 경우 중복되고 과도하게 테이블 을 제외 시키는 방법이 --ignore-table아닙니까? 그렇다면 대답에서 스크립트를 스크랩하고 --ignore-table대신 권장 하는 것이 낫지 않습니까?
Mark Amery

@codewaggle Illegal use of option --ignore-table=<database>.<table>테이블을로 지정하지 않으면 오류가 발생 합니다 schemaname.tablename.
WAF

멋진 것들, SQL 변수가 여러 줄이 아닌 이유는 무엇입니까?
sdkks 2016 년

72

RolandoMySQLDBA의 답변 을 확장하기위한 참고 사항 .

그가 포함한 스크립트 는 테이블 목록 을 포함 ( and table_name in) 또는 제외 ( and table_name NOT in)하기 위한 훌륭한 접근 방법입니다 .

하나 또는 두 개의 테이블 만 제외해야하는 경우 --ignore-table옵션을 사용하여 개별적으로 제외 할 수 있습니다 .

mysqldump -u -p etc. --ignore-table=Database.Table1 --ignore-table=Database.Table2 > dump_file.sql

29

몇 개 이상의 테이블이 있으면 다음과 같이 실행하는 것이 훨씬 좋습니다.

mysql databasename -u [user] -p[password] -e 'show tables like "table_name_%"' 
       | grep -v Tables_in 
       | xargs mysqldump [databasename] -u [root] -p [password] > [target_file]

또는 다음과 같이 생각하십시오.

mysqldump -u [user] -p[password] databasename `echo "show tables like 'table_name_%';" 
       | mysql -u[user] -p[password] databasename 
       | sed '/Tables_in/d'` > [target_file]

이러한 명령은 한 줄로만 입력해야합니다.


11

아래 명령을 사용하여 간단하게 수행 할 수 있습니다.

mysqldump -uusername -ppassword dbname \
  --ignore-table=schema.tablename1    \
  --ignore-table=schema.tablename2    \
  --ignore-table=schema.tablename3 > mysqldump.sql

4
--ignore-table은 mysqldump에서 특정 테이블을 제외하고 포함하지 않는 것입니다. :)
Praveen Prasannan

3
그러나 제외 할 모든 테이블을 나열 할 수 있으며 남아있는 테이블 만 덤프합니다
Colin 't Hart
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.