Специальные символы в пароле 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"