链接: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();
?>