Windows LaraDock mysql8.0 無法連接問題 navicat

.env  

DB_HOST=mysql

 

1、使用docker-compose up命令運行phpMyAdmin容器

# use with mysql

docker-compose up -d mysql phpmyadmin

2、打開瀏覽器並通過端口8080訪問本地主機:http://localhost:8080 ,服務器:mysql, 用戶名:root,密碼:root 登錄

3、如果宿主機安裝了 Navicat 之類的數據庫管理軟件,主機地址使用 127.0.0.1 ,就可以連接 mysql 數制庫。

4、但是在 mysql8.0 時,這些數據庫管理軟件還不支持,可能會報錯:

mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password]mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client

這是因爲 mysql 8.0 將密碼驗證方式由以前的 mysql_native_password 改爲了 caching_sha2_password 。可以進入 mysql 容器 bash,登錄 mysql ,將驗證方式修改成原來的。

#在

docker-compose exec mysql bash

 

mysql -uroot -p

mysql> grant all PRIVILEGES on *.* to root@'%' WITH GRANT OPTION;

mysql> ALTER user 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';

mysql> ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';

mysql> FLUSH PRIVILEGES;

mysql> exit;

現在就可以用 root  登錄了。爲了使新建用戶的驗證方式默認爲 mysql_native_password ,可以修改 my.cnf 文件,在 [mysqld] 部分中添加:

default_authentication_plugin = mysql_native_password

 

5、laradock 默認裝的是 mysql 最新版本(mysql8),也可以更換成低版本的 mysql 。

# 修改 .env 文件

MYSQL_VERSION=5.7 # 默認爲 latest

 

#停止mysql容器

docker-compose stop mysql

 

# 刪除舊數據庫數據

rm -rf ~/.laradock/data/mysql

 

# 重新構建新 mysql

docker-compose build mysql

 

# 重新創建容器

docker-compose up -d nginx mysql

 

# 查看現有 mysql 版本

docker inspect laradock_mysql_1

6、在 php 程序中連接數據庫時,如果 DB_HOST 爲 127.0.0.1 或 localhost,則會報錯:SQLSTATE[HY000] [2002] Connection refused ,SQLSTATE[HY000] [2002] No such file or directory,那時因爲 php 容器裏是沒有 mysql 的,需要用 mysql 容器的 IP。

 

7、刪除了 NO_AUTO_CREATE_USER 模式

在 5.7.* 的日誌中提到已廢除該模式,在 8.0.11 中刪除了,遷移時會拋出如下異常:

Illuminate\Database\QueryException : SQLSTATE[42000]: Syntax error or access violation: 1231 Variable 'sql_mode' can't be set to the value of 'NO_AUTO_CREATE_USER'

解決方案:將 config/database.php 配置文件中 mysql 的 strict 的值改爲 false 即可!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章