Специальные символы в пароле mysql с использованием mysqldump

У меня есть следующий сценарий 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 и добавить к этим escape-слэшам ("\").

РЕДАКТИРОВАТЬ: я забыл упомянуть, что я выполняю это через частичную виртуализацию OpenVZ с помощью команды vzctl exec, поэтому мне нужен метод, который позволит мне экранировать специальные символы, как я просил. Метод, который я разработал, был простым использованием команды sed:

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

Спасибо за вашу помощь.

С уважением!

1 ответ

Вам не нужно делать ничего из этого. Как упомянул HBruijn в комментарии, $HOME/.my.cnf файл уже содержит ваши учетные данные, и инструменты командной строки MySQL будут использовать их автоматически, без необходимости делать что-то особенное.

Так что просто сделайте:

mysqldump $db |  ssh root@$destination_server "cat > /backup/mysql/$db.sql"
Другие вопросы по тегам