使用mysqldump控制台转义密码


55

我正在通过bash脚本运行mysqldump,并且遇到了包含特殊字符的密码问题。

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

我该如何逃避密码?

Answers:


84

我找到了答案。您必须引用密码,如下所示:

mysql -u root -p'PASSWORD'

如果密码包含以下任意字符,则必须执行此操作: * ? [ < > & ; ! | $ ( )


您知道如何在密码中转义撇号吗?
Steve Mayne

3
@SteveMayne我认为它只是反斜杠
psynnott

3
括号也需要用引号引起来。
费利克斯·加侬-格雷尼尔

1
在Windows上,我发现必须使用双引号。单引号无效。(MySQL 5.6)
TheStoryCoder 2015年

1
密码中的空格也需要''
Hafenkranich

12

当您使用引号,确保没有空间:
-p'PASSWORD'
之间--password='PASSWORD'

正确:
mysql -u root -p'PASSWORD'
mysql -u root --password='PASSWORD'

不起作用:
mysql -u root -p 'PASSWORD'
mysql -u root --password = 'PASSWORD'

您还可以定义一个变量,然后将其用于命令(它们之间仍然没有空格) MSQLPWD='PASSWORD'
mysql -u root -p$MSQLPWD


2

取决于您的外壳。您使用的是Microsoft Windows还是Linux?如果您使用的是Linux / BASH,则可能$$被解释为当前进程ID。您是否尝试过在每个美元符号前加反斜杠?例如

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

请注意,如果要压缩到STDOUT,gzip可能需要“ -c”选项。


我使用的密码不是PA $$ W0RD,但是我以它为例。我使用的实际密码带有&符,这就是问题所在。我按照您的建议使用了反斜杠,但没有用。
psynnott 2010年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.