今天遇到一个神奇的错误如下:
[error][yii\db\Exception] PDOException: SQLSTATE[HY000] [2059] Authentication plugin 'sha256_password' cannot be loaded: /usr/lib64/mysql/plugin/sha256_password.so: 无法打开共享对象文件: 没有那个文件或目录
主机,CentOS 7 + php7.2,由于web服务器和数据库服务器分离,所以就没有安装mysql,系统中是默认的mariadb。
用户密码模式为mysql自带验证模式。
ALTER USER 'username'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
FLUSH PRIVILEGES;
⚠️ 注意,这种方法可能会降低MySQL的安全性,因为mysql_native_password
插件不提供与caching_sha2_password
相同的安全性。
当链接远程的数据库服务器时,仍然提示了上面的错误。
yum install https://dev.mysql.com/get/mysql80-community-release-el7-9.noarch.rpm
sudo yum install mysql-community-server
重启php-fpm
service php-fpm reload
在你的Yii配置文件(config/db.php)中,你可以指定使用'mysql_native_password'作为认证插件。以下是一个例子:
return [
'class' => 'yii\db\mysql\Connection',
'dsn' => 'mysql:host=localhost;dbname=mydatabase',
'username' => 'myusername',
'password' => 'mypassword',
'charset' => 'utf8',
'attributes' => [
// 使用 'mysql_native_password' 插件进行认证
\yii\db\Connection::ATTR_AUTH_PLUGIN => 'mysql_native_password',
],
];
本文由 systemofdown 创作,采用 知识共享署名 3.0 中国大陆许可协议 进行许可。 可自由转载、引用,但需署名作者且注明文章出处。