下面我将为你详细讲解一次docker登录mysql报错问题的实战记录的完整攻略。
问题描述
在使用 docker 运行 mysql 时,执行docker exec -it mysql bash
进入mysql容器内后使用mysql -uroot -p
命令登录 mysql 数据库时,报错如下:
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)
解决方案
方案1:使用默认密码登录
在我本地运行 mysql 时,它使用了默认的密码,所以我可以使用mysql -uroot -p
命令登录。但是,在使用docker运行mysql时,密码可能会在环境变量中明文传递或者被挂载在宿主机上。因此,需要从环境变量或者宿主机文件中查找密码再进行登录。
在本次问题中,因为我们使用了环境变量MYSQL_ROOT_PASSWORD
指定了密码,所以我们只需要在运行 mysql 容器时使用echo $MYSQL_ROOT_PASSWORD
命令查找密码,然后使用mysql -uroot -p<password>
命令登录即可。
示例命令如下:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
docker exec -it mysql bash
mysql -uroot -p123456
方案2:修改 MySQL 用户权限
在mysql中,'root'@'localhost'用户的权限很有可能不够,特别是在使用docker运行mysql时。因此,可以通过修改'root'@'localhost'的用户权限来解决问题。
具体的做法是,在容器中执行以下命令:
mysql -uroot -p
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
FLUSH PRIVILEGES;
这样就可以解决登录问题了。
示例命令如下:
docker run --name mysql -e MYSQL_ROOT_PASSWORD=123456 -p 3306:3306 -d mysql
docker exec -it mysql bash
mysql -uroot -p123456
然后进入mysql命令行后执行以下命令:
-- 授予远程连接用户全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
-- 授予本机登录用户全部权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY 'password' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
总结
本文介绍了两种解决 docker 登录 mysql 报错问题的解决方案,分别是通过查找默认密码以及修改 MySQL 用户权限。希望本文对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:一次docker登录mysql报错问题的实战记录 - Python技术站