一、遇到问题
今天想部署程序突然发现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';