У меня есть следующий 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 файла, я не могу выйти из него жестким кодированием символы ESC.
Может любой предлагать мне способ, возможно, искать те специальные символы в переменной $password и добавить к тем наклонным чертам Escape (" \").
Править: Я забыл упоминать, что я выполняю это через OpenVZ частичная виртуализация при помощи vzctl исполнительной команды, которая является причиной, почему мне был нужен метод, который позволит мне выходить из специальных символов, как я запросил. Метод у меня есть разработчик, был простым использованием команды sed:
sed 's/[!-+]/\\&/g'
Спасибо всем за Вашу справку.
С уважением!
Ничего из этого делать не нужно. Как HBruijn упомянул в комментарии, файл $ HOME / .my.cnf
уже содержит ваши учетные данные, и инструменты командной строки MySQL будут использовать их автоматически, без каких-либо дополнительных действий.
Так что просто сделайте:
mysqldump $db | ssh root@$destination_server "cat > /backup/mysql/$db.sql"