中设置了 mysql 的 root 密码未生效

时间:2025-03-19 16:43:06

中设置了 mysql 的 root 密码未生效

  • 问题
  • 解决方案

问题

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

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/:/etc/:ro
          - /home/mysql/init://

在相应目录下运行

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、修改 文件,在[mysqld]下添加

skip-grant-tables

2、进入容器内部登陆mysql

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

3、登陆mysql

[root@/ ~]# mysql
mysql>

4、修改root用户密码

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

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

docker restart mysql

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

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