Caracteres especiais na senha mysql usando mysqldump

Caracteres especiais na senha mysql usando mysqldump

Eu tenho o seguinte script 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"

O problema é que estou recebendo o seguinte erro:

/bin/bash: -c: line 0: syntax error near unexpected token `)'
/bin/bash: -c: line 0: `mysqldump -uroot -pbyt)uy6 database_name '

Eu testei bastante e descobri que o erro é causado pelo caractere especial da senha. Como estou obtendo a senha do arquivo .my.cnf, não consigo escapar dela codificando os caracteres de escape.

Alguém pode me oferecer uma maneira de procurar esses caracteres especiais na variável $password e adicionar a essas barras de escape ("\").

EDIT: esqueci de mencionar que estou executando isso via virtualização parcial do OpenVZ usando o comando vzctl exec, razão pela qual precisei de um método que me permita escapar dos caracteres especiais conforme solicitei. O método que desenvolvi foi um simples uso do comando sed:

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

Obrigado a todos pela ajuda.

Atenciosamente!

Responder1

Você não precisa fazer nada disso. Como HBruijn mencionou em um comentário, o $HOME/.my.cnfarquivo já contém suas credenciais e as ferramentas de linha de comando do MySQL irão utilizá-las automaticamente sem que você precise fazer nada especial.

Então basta fazer:

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

informação relacionada