2014-01-15 1 views
3

우리 데이터베이스의 모든 테이블 구조를 덤프하려고합니다. 그런 다음 구체적으로 원하는 데이터 만 덤프하려고합니다.하지만 잘못된 것으로 나타납니다. 데이터 덤프에서 제외 된 테이블에 대해 빈 테이블을 만들지 않습니다. 나는이 모든 테이블의 구조를 덤프하려면이 명령을하고있는 중이 야모든 테이블과 일부 데이터의 MySQL 덤프 구조

SHOW TABLES FROM mydb 
WHERE Tables_in_mydb NOT LIKE '%_history' 
AND Tables_in_mydb NOT LIKE '%_log'; 

및 :

은 내가 (전화 showtables.txt)에 대한 데이터를 덤프 할 테이블을 지정하는 텍스트 파일을 텍스트 파일에서 해당 쿼리에 의해 반환 된 테이블의 데이터 :

mysqldump -u root -pmypassword mydb --no-data > mydump.sql; mysql -u root -pmypassword < showtables.txt -N | xargs mysqldump mydb -u root -pmypassword > mydump.sql -v 

나는 showtables 쿼리의 결과에 포함 된 모든 테이블의 덤프를 얻고있다,하지만 난의 나머지 부분의 구조를 받고 있지 않다 테이블들.

구조 부분을 단일 명령으로 실행하면 정상적으로 작동하고 모든 테이블에 대해 구조가 덤프됩니다. 그러나 데이터 덤프와 결합하면 작동하지 않는 것 같습니다.

내가 잘못 생각한 부분을 가르쳐 주시겠습니까?

감사합니다.

답변

4

명령 줄 인수의 순서가 잘못되었습니다 (파일의 리디렉션이 끝나야 함), xargs에 대한 추가 매개 변수가 필요하므로 mysqldump에 데이터베이스 이름을 지정할 수 있습니다.

은 또한 그렇지 않으면 당신은 각 테이블에 대한 mydump.sql 파일을 덮어 쓰기 할 것, >> 덤프 데이터를 추가해야합니다

mysqldump -u root -pmypassword mydb --no-data > mydump.sql 
mysql -u root -pmypassword -N < showtables.txt | xargs -I {} mysqldump -v -u root -pmypassword mydb {} >> mydump.sql 

출처 : http://www.cyberciti.biz/faq/linux-unix-bsd-xargs-construct-argument-lists-utility/

0

을 존의 대답 떨어져 근무, xargs의 -I은 각 테이블에 대해 별도의 mysqldump 명령을 실행합니다. 이전 명령의 출력을 다음 명령에 추가하는 xargs 기본값을 허용하는 것이 더 쉽습니다. mysqldump의 마지막 인수는 덤프하려는 모든 테이블의 목록입니다.

내 솔루션은 또한 요새 호스트를 통해 연결하는 것을 보여줍니다. SSH 연결을 통해 스트리밍하기 전에 gzip을 사용하는 것이 압축되지 않은 SQL을 전송하는 것보다 훨씬 빠릅니다.

FILE=~/production.sql.gz 
HOST=ext-db-read-0.cdzvblmx0n9h.us-west-1.rds.amazonaws.com 
USER=username 
PASS="s3cret" 
DB=myapp_prod 
EXCLUDE="'activities', 'changelogs'" 

ssh bastion.mycompany.com <<EOF > $FILE 
    mysqldump -h $HOST -u $USER -p$PASS $DB --no-data | gzip 
    mysql -h $HOST -u $USER -p$PASS -N -e "SHOW TABLES WHERE Tables_in_$DB NOT IN ($EXCLUDE)" $DB | xargs mysqldump -v -h $HOST -u $USER -p$PASS $DB | gzip 
EOF 

당신이 gzip -d을 통해 단지 파이프를에 .gz 저장하지 않으려면 : 직접

ssh bastion.mycompany.com <<EOF | gzip -d > $FILE etc

또는 로컬 DB에 :

ssh bastion.mycompany.com <<EOF | gzip -d | mysql -uroot myapp_development

관련 문제