【附有安裝包連線】mysql 8.0的一些坑包括採用PHP 7.0 連線時報錯Unexpected server respose while doing caching_sha2 auth: 109
阿新 • • 發佈:2018-11-11
連結:https://pan.baidu.com/s/1cMzgEKXb9Cpkjbz9APOhiw 提取碼:ld0x 【mysql 8.0】
注: 此版本使用caching_sha2_password的身份驗證機制。在以往的版本中採用的是mysql_native_password 這種驗證機制。
這是這個坑導致後面,Navicat連線會報錯:
1251--Client does not support authentication protocol requested by server
PHP連線時也報錯:
Unexpected server respose while doing caching_sha2 auth: 109
另外,採用這種機制的驗證方式似乎對密碼的設定要求也提高了,不能是純數字!!!!!!!!!!(我的密碼設定成數字+字元了)否則會報這個錯:
ERROR 1819 (HY000): Your password does notsatisfy the current policy requirements
解決策略
更改驗證方式,先進入mysql,輸入:
select host,user,plugin,authentication_string from mysql.user;
得到:
為了直觀,我建立了個php使用者,可以看到它預設的方式總是caching…bra bra bra,root是我修改過的。
確認是這個caching搞的鬼後:輸入
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '!1234' //更改驗證方式
回車,輸入下面這個重新整理
FLUSH PRIVILEGES;
修改mysql配置檔案
[mysql] default-character-set=utf8 [mysqld] #skip-grant-tables port = 3306 basedir=F:\mysql-8.0.11-winx64 datadir=F:\mysql-8.0.11-winx64\data max_connections=200 character-set-server=utf8 default-storage-engine=INNODB default_authentication_plugin=mysql_native_password //加入這句話 [client] port=3306 default-character-set=utf8
重啟mysql服務
撈的重啟方式就不說了,這裡記錄一下cmd以及Linux的重啟命令
windows:
//後啟動
net start mysql
//先停止
net stop mysql
Linux
//啟動
1、使用 service 啟動:service mysqld start
2、使用 mysqld 指令碼啟動:/etc/inint.d/mysqld start
//停止
1、使用 service 啟動:service mysqld stop
2、使用 mysqld 指令碼啟動:/etc/inint.d/mysqld stop
3、 mysqladmin shutdown
//重啟
1、 使用 service 啟動:service mysqld restart
2、使用 mysqld 指令碼啟動:/etc/inint.d/mysqld restart
上面修改後,可以再次用navicat連線試試,我的就可以了。如果有人好報錯,報的是1045,那多半是密碼問題,(1)你輸入的密碼不對 ,你忘了!這種的話,百度一下大量解決辦法,總有一個適合你
1045 access denied for user 'root'@'localhost'
(2)如果是剛剛安裝的,還沒動過密碼的,那這個好辦。mysql 8.0安裝後會生成一個臨時密碼,在mysql資料夾下找到data檔案,找到err為字尾的檔案,按Ctrl+F搜尋password你就可以看到了,就在冒號後面的那一串亂碼。
修改後再次測試PHP連線:
<?php
$servername = "localhost";
$username = "root";
$password = "!1234";
$dbname = "hunsha";
// 建立連線
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("連線失敗: " . $conn->connect_error);
}
$sql = "SELECT password FROM user";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// 輸出資料
while($row = $result->fetch_assoc()) {
echo "password: " . $row["password"]. "<br>";
}
} else {
echo "0 結果";
}
$conn->close();
?>