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