中设置了 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的密码设置也无效,请重新设置!!