我使用php Prelude> take 3 "Hello"
"Hel"
登录MySQL数据库(全部在localhost上)
mysqli_connect
MySQL Server ini文件:
<?php
//DEFINE ('DB_USER', 'user2');
//DEFINE ('DB_PASSWORD', 'pass2');
DEFINE ('DB_USER', 'user1');
DEFINE ('DB_PASSWORD', 'pass1');
DEFINE ('DB_HOST', '127.0.0.1');
DEFINE ('DB_NAME', 'dbname');
$dbc = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME);
if(!$dbc){
die('error connecting to database');
}
?>
在MySQL Server ini文件中使用[mysqld]
# The default authentication plugin to be used when connecting to the server
default_authentication_plugin=caching_sha2_password
#default_authentication_plugin=mysql_native_password
,根本无法使用user1或user2登录;
在MySQL Server ini文件中使用错误:mysqli_connect():服务器请求客户端未知的身份验证方法[caching_sha2_password] ...
caching_sha2_password
,可以使用user1登录,但使用user2,同样的错误;
如何在mySql Server上使用mysql_native_password
登录?
答案 0 :(得分:75)
我通过SQL命令解决了这个问题:
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
由https://dev.mysql.com/doc/refman/8.0/en/alter-user.html
引用如果您要创建新用户
CREATE USER 'jeffrey'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
由https://dev.mysql.com/doc/refman/8.0/en/create-user.html
引用这对我有用
答案 1 :(得分:13)
目前,php mysqli扩展不支持新的caching_sha2身份验证功能。 你必须等到他们发布更新。
检查mysql开发人员的相关帖子:https://mysqlserverteam.com/upgrading-to-mysql-8-0-default-authentication-plugin-considerations/
他们没有提到PDO,也许你应该尝试与PDO联系。
答案 2 :(得分:5)
ALTER USER 'mysqlUsername'@'localhost' IDENTIFIED WITH mysql_native_password BY 'mysqlUsernamePassword';
在ALTER USER
之后删除cort('),并在mysql_native_password BY
之后删除cort(')
这对我也有用。
答案 3 :(得分:1)
它为我工作(PHP 5.6 + PDO / MySQL Server 8.0 / Windows 7 64位)
编辑文件C:\ProgramData\MySQL\MySQL Server 8.0\my.ini
:
default_authentication_plugin=mysql_native_password
在Windows以及MySQL Shell中重置MySQL服务...
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
答案 4 :(得分:1)
就像许多人一样,我遇到了同样的问题。尽管用户设置为使用mysql_native_password,并且可以从命令行进行连接,但是我可以使mysqli()连接的唯一方法是添加
default-authentication-plugin = mysql_native_password
在我在ubuntu 19.10上的设置中的/etc/mysql/mysql.conf.d/mysqld.cnf的[mysqld]部分
答案 5 :(得分:0)
我运行了以下命令
ALTER USER 'root' @ 'localhost' identified with mysql_native_password BY 'root123';
,最后在本地服务中重新启动MySQL。
答案 6 :(得分:0)
如果您使用的是Windows,并且根本无法使用caching_sha2_password
,则可以执行以下操作:
安装程序将为您进行所有需要的配置更改。
答案 7 :(得分:0)
我在Ubuntu 18.04中尝试过 并且是唯一对我有用的解决方案:
ALTER USER my_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';
答案 8 :(得分:0)
我认为在不使用caching_sha2_password加密的情况下配置mysql服务器是没有用的,我们必须找到一种通过网络发布,发送或获取安全信息的方法。正如您在下面的代码中看到的那样,我不使用变量$ db_name,而Im使用具有标准配置密码的mysql服务器中的用户。 只需创建一个Standar用户密码并配置所有特权即可。它可以工作,但是我却毫不掩饰地说。
<?php
$db_name="db";
$mysql_username="root";
$mysql_password="****";
$server_name="localhost";
$conn=mysqli_connect($server_name,$mysql_username,$mysql_password);
if ($conn) {
echo "connetion success";
}
else{
echo mysqli_error($conn);
}
?>
答案 9 :(得分:0)
对于Ubuntu 19.10 只需
cd /etc/mysql/mysql.conf.d
然后使用nano或类似的东西编辑mysqld.cnf
sudo nano mysqld.cnf
使用
重新启动Mysql服务sudo /etc/init.d/mysql restart
仅此而已。它对我有用
答案 10 :(得分:0)
现在您可以升级到PHP7.4,默认情况下,MySQL将与caching_sha2_password
一起使用,因此默认的MySQL安装将与mysqli_connect
一起使用。
答案 11 :(得分:0)
我正在使用 Laravel 5.8 并通过在 .env 文件中添加 DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock 来解决此错误,MAMP 服务器如下所示
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=8889
DB_DATABASE=dbname
DB_USERNAME=root
DB_PASSWORD=root
DB_SOCKET=/Applications/MAMP/tmp/mysql/mysql.sock
答案 12 :(得分:-1)
如果您使用的是Mac,请按以下步骤进行修复。经过大量的反复试验。希望这对其他人有帮助。
调试:
$mysql --verbose --help | grep my.cnf
$ which mysql
/usr/local/bin/mysql
解决方案: 纳米/usr/local/etc/my.cnf
添加:default-authentication-plugin = mysql_native_password
-------
# Default Homebrew MySQL server config
[mysqld]
# Only allow connections from localhost
bind-address = 127.0.0.1
default-authentication-plugin=mysql_native_password
------
最终运行:brew服务重启mysql