Caracteres especiais na senha do mysql usando mysqldump

1

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 devido ao caractere especial na senha. Como estou obtendo a senha do arquivo .my.cnf, não consigo escapar codificando os caracteres de escape.

Alguém pode me oferecer uma maneira de talvez procurar por esses caracteres especiais na variável $ senha 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, que é a razão pela qual eu precisei de um método que me permitiria escapar dos caracteres especiais conforme solicitado. O método que eu tenho desenvolvedor foi um simples uso do comando sed:

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

Obrigado a todos pela sua ajuda.

Atenciosamente!

    
por Simeon Mitev 24.02.2015 / 10:53

1 resposta

1

Você não precisa fazer nada disso. Como HBruijn mencionou em um comentário, o arquivo $HOME/.my.cnf já contém suas credenciais e as ferramentas de linha de comando do MySQL as usarão automaticamente sem a necessidade de fazer nada especial.

Então faça:

mysqldump $db |  ssh root@$destination_server "cat > /backup/mysql/$db.sql"
    
por 24.02.2015 / 14:40