Назад | Перейти на главную страницу

Специальные символы в пароле 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, я не могу избежать его, жестко закодировав escape-символы.

Может ли кто-нибудь предложить мне способ поиска этих специальных символов в переменной $ password и добавления к этим escape-символам ("\").

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

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

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

Наилучшие пожелания!

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

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

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