67

I am running a mysqldump via a bash script and have encountered a problem with a password that contains special characters.

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

How do I escape the password?

5 Answers 5

102

I found the answer. You have to quote the password, like this:

mysql -u root -p'PASSWORD'

You must do this if the password has any of the following characters: * ? [ < > & ; ! | $ ( )

5
  • Do you know how to escape apostrophes within the password? May 14, 2013 at 20:00
  • 3
    @SteveMayne i think its just a backslash before it
    – psx
    May 15, 2013 at 6:33
  • 3
    parenthesis also need to be in quotes. Jun 5, 2014 at 17:12
  • 2
    On Windows I found I had to use double quotes. Single quotes did not work. (MySQL 5.6) Mar 25, 2015 at 8:08
  • 1
    blanks in the password also require the ' ' Oct 22, 2018 at 12:43
13

when you use the quotes, make sure there is no space :
between -p and 'PASSWORD' or
between --password= and 'PASSWORD'

correct:
mysql -u root -p'PASSWORD'
mysql -u root --password='PASSWORD'

does not work:
mysql -u root -p 'PASSWORD'
mysql -u root --password = 'PASSWORD'

you can also define a variable and then use it for the command (still with no spaces in between) MSQLPWD='PASSWORD'
mysql -u root -p$MSQLPWD

0
2

Depends on your shell. Are you using Microsoft Windows or Linux? If you are using Linux/BASH then it is likely that $$ is being interpreted as your current process ID. Have you tried putting a backslash in front of each dollar sign? e.g.

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

Note that gzip probably requires the "-c" option if you want to compress to STDOUT.

1
  • The password I am using is not PA$$W0RD but I used this as an example. The actual password I am using has an ampersand and this is what is causing the problem. I used the backslash as you suggested but it did not work.
    – psx
    Mar 25, 2010 at 11:35
2

Try backslashing (\) those special chars.

0

IF you are using mysqldump.exe on windows you should use the double quotes, not single quotes like

mysqldump.exe --user=roo --password="WE&&^6HJg&^7" .....

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .