mysqldump를 사용하는 mysql 비밀번호의 특수 문자

mysqldump를 사용하는 mysql 비밀번호의 특수 문자

다음 SSH 스크립트가 있습니다.

#Here I am getting the mysql password for the root user
password=$(cat /root/.my.cnf | grep "password" |  awk -F\" '{print $2}') 

#here I am trying to dump the database remotely
mysqldump -uroot -p$password $db |  ssh root@$destination_server "cat > /backup/mysql/$db.sql"

문제는 다음과 같은 오류가 발생한다는 것입니다.

/bin/bash: -c: line 0: syntax error near unexpected token `)'
/bin/bash: -c: line 0: `mysqldump -uroot -pbyt)uy6 database_name '

꽤 많이 테스트해본 결과 비밀번호에 특수문자 때문에 오류가 발생하는 것으로 나타났습니다. .my.cnf 파일에서 비밀번호를 가져오고 있으므로 이스케이프 문자를 하드코딩하여 이스케이프할 수 없습니다.

$password 변수에서 특수 문자를 검색하고 이스케이프 슬래시("\")에 추가할 수 있는 방법을 알려주실 수 있는 분 계시나요?

편집: vzctl exec 명령을 사용하여 OpenVZ 부분 가상화를 통해 이 작업을 실행한다는 사실을 언급하는 것을 잊어버렸습니다. 이는 요청한 대로 특수 문자를 이스케이프 처리할 수 있는 방법이 필요한 이유입니다. 내가 개발자에게 제공한 방법은 sed 명령을 간단히 사용하는 것이었습니다.

sed 's/[!-+]/\\&/g' 

도움을 주셔서 감사합니다.

친애하는!

답변1

이 작업을 수행할 필요가 없습니다. HBruijn이 의견에서 언급했듯이 $HOME/.my.cnf파일에는 이미 자격 증명이 포함되어 있으며 MySQL의 명령줄 도구는 특별한 작업을 수행할 필요 없이 자동으로 해당 자격 증명을 사용합니다.

그러니 그냥 하세요:

mysqldump $db |  ssh root@$destination_server "cat > /backup/mysql/$db.sql"

관련 정보