最近在使用MySQL8和PHP搭建項目時,遇到了一個問題,就是無法連接到MySQL8數據庫。
我們首先查看了php.ini配置文件,確保了mysqli擴展已經開啟。然后,我們嘗試使用mysqli_connect()函數連接數據庫,卻發現一直返回false。
//連接數據庫 $conn = mysqli_connect('localhost', 'root', 'password', 'database_name'); //判斷是否連接成功 if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } else { echo "Connected successfully"; }
我們并沒有看到“Connected successfully”的輸出,而是出現了“Connection failed: Access denied for user 'root'@'localhost'”錯誤。
我們查看了MySQL8的配置文件my.cnf,發現其中有關授權的部分發生了變化:
[mysqld] # Specifies the authentication method that MySQL will use. default_authentication_plugin= mysql_native_password
MySQL 8默認使用caching_sha2_password進行身份驗證,但PHP mysqli擴展不支持它。我們需要將mysqld段中的default_authentication_plugin設置為mysql_native_password,然后重啟MySQL:
sudo vi /etc/mysql/my.cnf # 修改如下配置 [mysqld] # Specifies the authentication method that MySQL will use. default_authentication_plugin= mysql_native_password sudo systemctl restart mysql
這樣,我們就成功地連接到了MySQL8數據庫。