我的mac中存在一些问题。其中一个问题是安装了两个MySQL实例。第一个mysql在localhost执行,第二个在MAMP。因此,当我尝试使用php连接mysql时:
...它连接到MAMP实例。
当我尝试使用终端连接到MySQL时,它连接到localhost实例。所以我无法做我想做的事情......当我创建一个名为' dbname'并尝试从我的html连接到它,它会产生一个错误:mysqli_connect():( 42000/1049):未知的数据库' dbname'
我该怎么做才能让它发挥作用?
答案 0 :(得分:1)
当您连接到本地主机时,默认情况下它会尝试不使用TCP / IP来提供连接,而是使用UNIX套接字 - 如果您的连接没有严格说明,则必须使用TCP / IP。这意味着,例如,如果你在localhost的不同端口上有两个mysqld实例,那么仅仅指定端口是不够的,因为那时mysql将尝试连接一个wring socket。
示例:您在localhos上有一个mysql实例:3306,在localhost:3307上有第二个。然后,命令:
mysql -uUSER -pPASSWORD -P3307
会将您连接到错误的 3306实例,因为它将使用默认套接字而不是使用端口。它可能看起来像是来自mysql客户端的疏忽,但socket在这种情况下具有优先级(即localhost)。要解决此问题,您有两种选择:
第一个选项是直接指定套接字。这可以直接使用-S
参数完成,例如:
mysql -uUSER -pPASSWORD -S/path/to/correct/socket
您可以在配置文件中看到所需实例的套接字路径。由于您使用的是Mac,您甚至可以创建文件,有关详细信息,请参阅this question。
第二个选项是 - 强制mysql客户端使用TCP / IP连接。要实现这一点,您可以在连接选项中明确指定主机IP地址:
mysql -uUSER -pPASSWORD -h127.0.0.1 -P3307
那将是3307
端口。但是,这可能会导致错误:
“在'读取初始通信数据包时失去与MySQL服务器的连接,系统错误:0”
然后,很可能,这意味着错误配置的实例。然后,您可以将bind-address=127.0.0.1
添加到my.cnf
文件中,如果不存在的话。同样,有关该问题的更多详细信息可以在this question中找到。