다음 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"