好的,我需要对一个数据库进行mysqldump操作,这是我拥有的内容:
mysqldump -uroot -psdfas@N$pr!nT --databases app_pro > /srv/DUMPFILE.SQL
但我收到了这个错误
-bash: !nT: event not found
似乎对密码有些困难...是否还有其他方法可以进行mysql转储
用单引号将 -psdfas@N$pr!nT
包裹起来:
mysqldump -uroot '-psdfas@N$pr!nT' --databases app_pro > /srv/DUMPFILE.SQL
问题在于bash解释了!
。而单引号中的字符串不会被解释。你需要转义密码中的 '!' 符号:
-psdfas@N$pr\!nT
$pr
位将会被解释为变量替代,因此你需要同时转义 $
或者单引号括起整个密码,或者(最好的方法)在单独的提示符中输入它。 - Gordon Davissonps
的人都是可见的。在命令行上放置密码是一个非常糟糕的想法。 - Gordon Davisson正如其他人已经说过的,您不应该在命令行上指定密码,因为任何其他进程都可以读取它。对于mysql来说,一个简单有效的解决方案是在运行mysql或mysqldump的用户的主目录中使用.my.cnf
文件。
首先以安全的方式创建它:
sudo touch /root/.my.cnf
sudo chown 0:0 /root/.my.cnf
sudo chmod 600 /root/.my.cnf
然后确保 /root/.my.cnf
文件中包含以下内容:
[mysql]
user=root
password=sdfas@N$pr!nT
[mysqldump]
user=root
password=sdfas@N$pr!nT
对于您的“普通”(非root)mysql帐户,您可以并且应该执行此操作。然后,您永远不必再输入密码,仍然可以保持安全。只需在您自己的主目录中放置一个名为.my.cnf的文件,并在其中放置您的凭据,并确保只有您能够读取和写入该文件:
touch ~/.my.cnf
chmod 600 /root/.my.cnf
尝试
mysqldump -u root --password='sdfas@N$pr!nT' app_pro > /srv/DUMPFILE.SQL
$pr
变量,并计算为空字符串,从而将密码更改为sdfas@N!nT
。使用单引号就可以了。 - Marc B根据说明,参数应该有双破折号。(http://dev.mysql.com/doc/refman/5.1/en/mysqldump.html)
尝试这个:
mysqldump --user=root --password=psdfas@N$pr!nT --databases app_pro > /srv/DUMPFILE.SQL
当你在命令行中使用!时,它的意思是查找以以下字母开头的最后一个运行命令,并将其放置在此处。 进入您的命令行并运行“history”,然后运行其他一些命令,如cd、ls等。 然后输入!h,您上次运行的以字母'h'开头的命令(在本例中为“history”)将被执行。
您需要转义那个感叹号(!)
您可以关闭历史扩展功能:
set +o histexpand