一、遇到問題
今天想部署程序突然發現mysql連接不上了,如下圖所示:
二、解決方式
我的dokcer-compose.yml配置:
version: '3.1' services: db: restart: always image: mysql:5.7.20 environment: MYSQL_ROOT_PASSWORD: 123456 command: --default-authentication-plugin=mysql_native_password --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --explicit_defaults_for_timestamp=true --lower_case_table_names=1 ports: - '3306:3306' volumes: - ./data:/var/lib/mysql - ./conf:/etc/mysql/conf.d - ./logs:/logs # MySQL 的Web客戶端 adminer: image: adminer restart: always ports: - '8081:8080'
1、通過vi命令直接修改my.cnf
vi /usr/local/docker/mysql/conf/my.cnf
#加入下面這句話
[mysqld]
skip-grant-tables
2、重啟mysql,讓配置生效
#在mysql目錄下 docker-compose down docker-compose up -d
3、通過docker交互命令訪問容器
#交互命令
docker exec -it e277ad12c23e /bin/bash
如下圖所示,不需要密碼已經進入到mysql
4、重置密碼,我用的是mysql8,其他版本命令會有區別
#選擇數據庫
use mysql
#更新密碼 UPDATE user SET authentication_string="" WHERE user="root";
#刷新權限 flush privileges;
#退出
quit
7、修改配置文件,重啟mysql
vi /var/lib/docker/overlay2/54937c49054d044e22bd53c1ff1f763614426bc39b27ef2bfbe1f8edb583e3fa/diff/etc/mysql/my.cnf #刪除下面這句話 skip-grant-tables
8、重啟mysql
#在mysql目錄下 docker-compose down docker-compose up -d
9、再次進入容器,並連接mysql
#設置密碼驗證方式,並重新設置密碼 ALTER user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
參考教程:https://blog.csdn.net/qq_42348937/article/details/86326470