navicat 连接docker容器里面mysql服务失败解决
容器默认只允许root本地访问,需要设置对外远程访问的root用户
- 一、报错情况:
- 二、解决办法:容器默认只允许root本地访问,需要设置对外远程访问的root用户
一、报错情况:
我在linux服务器上面装了docker,启动了docker里面的mysql服务,在本地电脑nacicat premium 12连接服务器上面的mysql服务一直失败,连接不上,出现这样的错误。
二、解决办法:容器默认只允许root本地访问,需要设置对外远程访问的root用户
1.进入mysql容器里面,命令:docker exec -it acbcfcdb9eeb(容器id) (镜像名称也可容器id也可) /bin/bash 。
sudo docker exec -it mysql mysql -uroot -p
- 先查看当前存在的 root 用户
登录 MySQL 后,执行以下命令,查看 root 用户的主机限制(Host 字段):
SELECT User, Host FROM mysql.user WHERE User = 'root';
3. 根据查询结果处理
如果结果中有 ‘root’@‘localhost’ 但没有 ‘root’@‘%’:
说明 root 用户默认只允许本地(容器内部)访问,则需要创建一个可远程访问的root用户即 ‘root’@‘%’ 用户,再修改密码:
sql
-- 创建允许远程访问的 root 用户
CREATE USER 'root'@'%' IDENTIFIED BY 'root';
-- 授予权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
-- 刷新权限
FLUSH PRIVILEGES;
-- 再修改密码加密方式(如果需要)
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
- 验证配置
修改后再次执行刷新权限命令,然后退出 MySQL 并重启容器(可选):
# 退出 MySQL
exit;
# 重启容器(使配置生效)
docker restart mysql
这样处理后,再用 Navicat 连接 linux的ip:3306 通常就能成功了。