2015-01-16 3 views
2

안녕하세요, 저는 테이블을 백업하는 스크립트를 만들려고합니다. 테이블의 수가 꽤 크고 명령을 붙여 넣기를 복사하고 싶지 않습니다. 여기에 내 대본이있다. mysqldump bash 스크립트가 오류를 throw합니다.

#! /bin/bash 
#The following commands exports/dump tables 
# Usage: sh export-script DBName username password 
# 
# 
# 
export TABLES="A B C D...Z" 
# 
mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${TABLES} > dump.YYYY-MM-DD.sql 

그러나 나는 다음과 같은 오류가 발생 :

"ysqldump : 테이블 찾을 수 없습니다 :"Z

I 스크립트에 새로운 해요 놀랍게도 나는이에 대한 해결책을 찾을 수 없습니다를 간단한 문제. 위급 신호.

+0

스크립트는 터미널에 복사/붙여 넣기 할 때 문제없이 실행됩니다. – whizzyifti

+3

MS 윈도우가 스크립트 파일 생성에 관여했다면,'dos2unix mySqlDumperScript.sh'를 사용하십시오. 행운을 빕니다. – shellter

+0

@shellter 효과가있었습니다. 감사. – whizzyifti

답변

2

여기서는 export TABLES="A B C D...Z"을 줄임표가없는 테이블 목록으로 대체한다고 가정합니다. 죄송합니다. bashD...Z에서 D E F ... etc으로 확장 될 수있는 다른 스크립팅 환경처럼 동작해야하기 때문에 문의해야합니다.

지금처럼 ${TABLES} 인수를 두 번 인용 부호로 시도해보십시오

mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 "${TABLES}" > dump.YYYY-MM-DD.sql 

이 하나의 인수로 모든 테이블에 전달합니다. 문제가 해결되지 않으면, 내가 반복 권장 :이 각 테이블에 대해 별도의 dump_ SQL 파일을 생성하는 방법을

for table in ${TABLES} ; do 
    mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${table} > dump_${table}.YYYY-MM-DD.sql 
done 

알 수 있습니다. 모든 테이블에 대한 하나 개의 파일이 필요한 경우, 사용

/bin/rm -f dump.YYYY-MM-DD.sql 
for table in ${TABLES} ; do 
    mysqldump $1 --skip-add-drop-table --replace --no-create-info --user=$2 --password=$3 ${table} >> dump.YYYY-MM-DD.sql 
done 

난 그냥 의견은 당신이 sh ... 실행 건의 것으로 나타났습니다. sh으로 실행하지 마십시오. bash export-script DBName username password으로 실행하거나 export-script DBName username password으로 실행하고 프로세스 셸에서 #! 행을 통해 스크립트를 실행할 셸을 맨 위에 선택하게하십시오. 이 경우 bash과 함께 실행됩니다.

+0

라인 엔딩에 문제가 있다고 생각합니다. 나는이 스크립트를 작성하기 위해 윈도우를 사용했다는 의문에 대해 언급 했어야했다. 예, 파일이 #!로 시작하기 때문에 bash로 실행해야합니다. 당신의 도움을 주셔서 감사합니다. – whizzyifti