提供密码时MySQL连接问题

时间:2012-04-04 15:35:07

标签: php mysql bash

当我尝试连接到本地MySQL数据库时,我得到了这三种方法的不同结果:

  1. 当我从提示符处连接以下内容时,它会起作用:

    mysql -u root -p

  2. 这种方式提示我输入密码,输入后我就连接了。

    1. 当我连接PHP并提供服务器(localhost),用户名(root)和密码时,它可以正常工作。

    2. 当我连接PHP以运行这样的命令时不起作用

      exec('mysql -P 3306 -u root -p'。$ password。'databasename<'。$ scriptfilename);

    3. 当我在第一行提供密码时,我也无法从提示符开始工作。

      当我在mysql.user表中查询用户root时,有3个条目:

      根@ :: root@127.0.0.1 根@本地

      在同一行提供密码时出现错误:

        

      ERROR 1045(28000):用户'root'@'localhost'拒绝访问(使用密码:YES)

      有人知道发生了什么事吗?

3 个答案:

答案 0 :(得分:1)

只需添加如下主机参数:

exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename);

答案 1 :(得分:1)

如果您的密码包含shell将解释的特殊字符,除非您将其转义,否则您将遇到问题。例如,大量标点符号会导致问题,例如!><|等。

一般情况下,如果您可以提供帮助,请不要在命令行中输入密码!

引用MySQL的 5.3.2.2. End-User Guidelines for Password Security 文档:

  

在命令行中使用-pyour_pass或--password = your_pass选项。

     

这很方便但不安全,因为您的密码对系统状态程序(例如ps)可见,其他用户可以调用它来显示命令行。

另一种选择是将密码存储在只有相关用户可以读取的文件中,并使用客户端配置文件:

  

将您的密码存储在选项文件中。

[client]
password=your_pass

然后命令行将是:

mysql --defaults-file=/path/to/file_with_password

答案 2 :(得分:0)

您可以尝试使用--password =而不是-p,我发现它更可靠