1. 程式人生 > >【附有安裝包連線】mysql 8.0的一些坑包括採用PHP 7.0 連線時報錯Unexpected server respose while doing caching_sha2 auth: 109

【附有安裝包連線】mysql 8.0的一些坑包括採用PHP 7.0 連線時報錯Unexpected server respose while doing caching_sha2 auth: 109

連結: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();
		
?>

在這裡插入圖片描述