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

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

EDIT: Я забыл упомянуть, что я выполняю это через частичную виртуализацию OpenVZ, используя команду vzctl exec, поэтому мне нужен был метод, который позволит мне экранировать специальные символы, как я и просил. Метод, который я разработал, был простым использованием команды sed:

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

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

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

решение1

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

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

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

Связанный контент