У меня есть следующий сценарий 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"