【docker】Host is not allowed to connect to this MySQL server

文章讲述了在云服务器上使用Docker部署MySQL时遇到的连接问题,发现是由于root用户的访问权限设置为仅限于本地IP。通过`dockerexec`进入容器,修改了root用户的访问域为%,并刷新了权限后解决了连接问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Host is not allowed to connect to this MySQL server

这里碰到云服务器使用docker部署的mysql突然连接不上了,后台程序报错,navicat连接不上,报错信息为

Host is not allowed to connect to this MySQL server

经过查询得知,通过

docker exec -it mysql bash

进入mysql容器

mysql -uroot -p

输入密码登录mysql

use mysql

select host from user where user = 'root';

该结果表示是当前的root用户限制在当前的ip内访问的,需要修改他的访问域。

执行命令:

update user set host = '%' where user = 'root';
 
select host from user where user = 'root';

3.执行 FLUSH PRIVILEGES 或者重启 MySQL 即可;

flush privileges;

原文链接:https://blog.youkuaiyun.com/dhp1994/article/details/134212344

### 解决Docker环境中MySQL服务器允许特定IP连接的方法 在Docker环境下配置MySQL服务以允许来自`223.160.231.118`的连接涉及多个方面,包括但不限于调整MySQL自身的访问控制列表以及确保网络层面的安全性和可达性。 #### 修改MySQL用户的权限设置 为了使外部IP能够成功访问MySQL实例,需创建一个具有适当权限的新用户或将现有用户的host字段修改为指定的IP地址。这可以通过登录到容器内部并执行如下SQL语句来完成: ```sql CREATE USER 'yourusername'@'223.160.231.118' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON *.* TO 'yourusername'@'223.160.231.118' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` 上述命令会创建一个新的数据库账户,并赋予其对所有数据库的所有操作权限[^1]。请注意,在生产环境中应谨慎授予过多权限,仅给予必要的最小化授权即可满足应用需求。 #### 配置MySQL监听全部接口 默认情况下,某些安装可能会让mysqld只绑定localhost(即127.0.0.1)。要改变这一点,编辑my.cnf或my.ini中的bind-address参数使其等于0.0.0.0表示接受任何IPv4请求;对于IPv6,则可以设为::: ```bash # 找到mysql配置文件路径,通常位于/etc/mysql/my.cnf 或者 /etc/my.cnf vi /etc/mysql/my.cnf ... [mysqld] bind-address=0.0.0.0 ... ``` 保存更改后重启MySQL服务生效此改动。 #### Docker容器端口映射 为了让宿主机之外的设备能通过公网IP访问运行于docker内的mysql server,还需要正确地暴露和转发相应的tcp端口号,默认是3306。启动容器时加上-p选项指定端口映射关系: ```bash docker run -p 3306:3306 --name some-mysql -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:tag ``` 这里假设使用官方镜像构建的服务名为some-mysql,环境变量MYSQL_ROOT_PASSWORD定义了root账号密码,而-d标志意味着后台模式运行。 #### 安全考虑 开放远程访问的同时也要注意安全性问题,建议采取措施如防火墙规则限制源ip范围、启用SSL加密通信等手段保护敏感数据免受未授权访问威胁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值