J'exécute un mysqldump via un script bash et j'ai rencontré un problème avec un mot de passe contenant des caractères spéciaux.
mysqldump -hlocalhost -uUSERNAME -pPA$$W0RD DATABASE |
gzip > /home/USERNAME/backups-mysql/BACKUP.gz
Comment puis-je échapper le mot de passe?
J'ai trouvé la réponse. Vous devez citer le mot de passe, comme ceci:
mysql -u root -p'PASSWORD'
Vous devez le faire si le mot de passe contient l’un des caractères suivants: * ? [ < > & ; ! | $ ( )
lorsque vous utilisez les guillemets, assurez-vous qu'il n'y a pas d'espace:
entre -p
et 'PASSWORD'
ou
entre --password=
et 'PASSWORD'
correct:mysql -u root -p'PASSWORD'
mysql -u root --password='PASSWORD'
ne marche pas:mysql -u root -p 'PASSWORD'
mysql -u root --password = 'PASSWORD'
vous pouvez également définir une variable, puis l'utiliser pour la commande (toujours sans espace) MSQLPWD='PASSWORD'
mysql -u root -p$MSQLPWD
Cela dépend de votre shell. Utilisez-vous Microsoft Windows ou Linux? Si vous utilisez Linux/BASH, il est probable que $$ soit interprété comme votre ID de processus actuel. Avez-vous essayé de mettre une barre oblique inverse devant chaque signe dollar? par exemple.
mysqldump \
-hlocalhost \
-uUSERNAME \
-pPA\$\$W0RD \
DATABASE \
| gzip -c \
> /home/USERNAME/backups-mysql/BACKUP.gz
Notez que gzip nécessite probablement l’option "-c" si vous voulez compresser en STDOUT.
Essayez de supprimer (\
) ces caractères spéciaux.