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 即可!

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