docker-compose.yml 中设置了 mysql 的 root 密码未生效

docker-compose.yml 中设置了 mysql 的 root 密码未生效

问题

使用docker-compose创建mysql服务器时,docker-compose.yml配置如下:

version: '3.0'
services:
    mysql:
        restart: always
        image: mysql:5.7.23
        container_name: mysql
        ports:
          - 3306:3306
        environment:
          TZ: Asia/Shanghai
          MYSQL_ROOT_PASSWORD: rootpwd
          MYSQL_USER: user
          MYSQL_PASS: userpwd
        command:
          --character-set-server=utf8mb4
          --collation-server=utf8mb4_general_ci
          --explicit_defaults_for_timestamp=true
          --lower_case_table_names=1
          --max_allowed_packet=128M
          --sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO"
        volumes:
          - /home/mysql/data:/var/lib/mysql
          - /home/mysql/conf/my.cnf:/etc/my.cnf:ro
          - /home/mysql/init:/docker-entrypoint-initdb.d/

在相应目录下运行

docker-compose up -d

再进入容器内部

docker exec -it mysql /bin/bash

尝试登陆mysql

[root@i ~]# mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 

发现并不能登陆mysql,出现的问题在于docker-compose中的密码设置无效,导致用户无法登陆。

解决方案

1、修改my.cnf 文件,在[mysqld]下添加

skip-grant-tables

2、进入容器内部登陆mysql

[root@i ~]# docker exec -it mysql /bin/bash

3、登陆mysql

[root@/ ~]# mysql
mysql>

4、修改root用户密码

mysql>update  mysql.user  set  authentication_string=password('xxxx')  where user='root';

注:mysql 4.6版本以上的mysql服务器password改为authentication_string;所以用‘update mysql.user set password=password(‘xxxx’) where user=‘root’;’无法修改用户密码,切记!!!!!!!!
5、退出登陆,并删除my.cnf文件中的‘skip-grant-tables’
6、重启mysql

docker restart mysql

7、重新登陆,登陆成功!

mysql 4.6版本以上的mysql服务器password改为authentication_string;所以用‘update mysql.user set password=password(‘xxxx’) where user=‘root’;’无法修改用户密码,切记!!!!!!!!
提醒下用户user的密码设置也无效,请重新设置!!

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值