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