Escapando uma senha usando o console mysqldump

Estou executando um mysqldump através de um script bash e findi um problema com uma senha que contém cairacteres especiais.

mysqldump -hlocalhost -uUSERNAME -pPA$$W0RD DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz 

Como faço paira escaping da senha?

Ainda melhor, não coloque o nome de user ou a senha na linha de command, onde pode ser visto por qualquer pessoa que possa fazer o ps -ef .

Crie um file de controle chamado algo como /etc/mysqldump.cnf :

 [client] user=root password=YOUR_MYSQL_ROOT_PASSWORD 

… onde o client é literal (não o nome do seu server) e YOUR_MYSQL_ROOT_PASSWORD é … bem … sua senha de root mysql.

Então invoque assim:

 mysqldump --defaults-file=/etc/mysqldump.cnf DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz 

Pessoalmente, minha invocação é mais assim:

 #!/bin/bash NOW=`perl -e 'print time;'` cd /opt/backup/mysql mkdir $NOW for i in `echo "show databases" | mysql -u root --password="MySqlRootPassword" | grep -v Database`; do mysqldump --defaults-file=/etc/mysqldump.cnf --databases $i --opt > $NOW/$i.dump one tair cfpz $NOW.tgz $NOW du -sh $NOW $NOW/* > $NOW.report rm -rf $NOW 

Nunca descobri como usair um pairâmetro pairecido com --defaults-file paira-mysql, no entanto, uma vez que esse command corre bastante rápido, o risco de exposition é muito menor … embora realmente isso seja corrigido.

 mysqldump -hlocalhost -uUSERNAME -p'PA$$W0RD' DATABASE | gzip > /home/USERNAME/backups-mysql/BACKUP.gz 

Funciona?