docker-compose啟動mysql並配置遠端訪問
配置檔案
```
version: "3.8" services: mysql_docker_server: image: mysql restart: always container_name: mysql_server ports: - 3307:3306 command: #這行程式碼解決無法訪問的問題 --default-authentication-plugin=mysql_native_password # --character-set-server=utf8mb4 # --collation-server=utf8mb4_general_ci # --explicit_defaults_for_timestamp=true # --lower_case_table_names=1 volumes: - d:/code/docker_project/mysqlData/data/:/var/lib/mysql/ - d:/code/docker_project/mysqlData/conf/:/etc/mysql/conf.d/ - d:/code/docker_project/mysqlData/init/:/docker-entrypoint-initdb.d/ # 資料庫還原目錄 可將需要還原的sql檔案放在這裡 # - d:/code/docker_project/mysqlData/mysql/source:/docker-entrypoint-initdb.d environment: - MYSQL_ROOT_PASSWORD=kemi1016 # - MYSQL_USER=kemi # - MYSQL_PASSWORD=Kemi1016 # - MYSQL_DATABASE=db - TZ=Asia/Shanghai```
## 解決問題
docker compose mysql sha256_password
參考文章
[docker-compose啟動mysql並配置遠端訪問 - 簡書](https://www.jianshu.com/p/eeb96feac9ec)
參考文章內容
version: "3.7"
services:
mysql:
container_name: mysql
image: mysql:latest #從私有倉庫拉映象
restart: always
command: --default-authentication-plugin=mysql_native_password #這行程式碼解決無法訪問的問題
volumes:
- /data/mysql/data/:/var/lib/mysql/ #對映mysql的資料目錄到宿主機,儲存資料
- /data/mysql/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf #把mysql的配置檔案對映到容器的相應目錄
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
- LANG=C.UTF-8
啟動mysql: sudo docker-compose -f mysql.yml up -d 沒有報錯即啟動成功
檢視執行的docker容器:sudo docker ps
已Bash進入容器:sudo docker exec -it 7f /bin/bash
mysql -u root -p
mysql> use mysql;
mysql> grant all privileges on *.* to 'root'@'%';
mysql> flush privileges;
重新整理許可權遠端還是無法訪問,Navicat包2509authentication plugin caching_sha2錯誤。查詢資料發現,mysql是8.0版本的,mysql 8.0 預設使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password
mysql> ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
Query OK, 0 rows affected (0.02 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.02 sec)
Navicat再次連線OK。
Mysql遠端連線報錯:authentication plugin caching_sha2 mysql 8.0 預設使用 caching_sha2_password 身份驗證機制 —— 從原來的 mysql_native_password 更改為 caching_sha2_password。 方法:修改使用者的密碼和加密方式
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '密碼';
要同賦予使用者許可權時相同。若是localhost就同上。%也是如此
mysql8.*的新特性 caching_sha2_password 密碼加密方式
以前版本的mysql密碼加密使用的是mysql_native_password
新新增的使用者密碼預設使用的caching_sha2_password
如果在以前mysql基礎上升級的 就得使用者使用的密碼加密使用的是 mysql_native_password
如果使用以前的密碼加密方式,就修改檔案 /etc/my.cnf
資料庫時區問題:
連結資料庫時serverTimezone=UTC這個引數出的問題
只要改成serverTimezone=Asia/Shanghai就OK了!
參考原文:https://blog.csdn.net/weixin_42459563/article/details/80924634