zhangxibin
发布于 2025-09-05 / 2 阅读
0
0

1panel 安装应用时容器内部无法连接数据库

1Panel-metabase-f46S | Caused by: java.sql.SQLException: Host '172.20.0.9' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'1Panel-metabase-f46S | at org.mariadb.jdbc.internal.com.read.ReadInitialHandShakePacket.(ReadInitialHandShakePacket.java:92)1Panel-metabase-f46S | at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.createConnection(AbstractConnectProtocol.java:543)1Panel-metabase-f46S | at org.mariadb.jdbc.internal.protocol.AbstractConnectProtocol.connectWithoutProxy(AbstractConnectProtocol.java:1390)1Panel-metabase-f46S | ... 13 more

这个错误非常明确!Metabase 容器(IP 地址 172.20.0.9)已经被 MySQL 的安全机制封锁了,因为之前有太多次失败的连接尝试。

解决方案很简单:需要在 MySQL 服务器上执行一个命令来解除对这个 IP 的封锁。

解决步骤:

  1. 进入 MySQL 容器
    通过 1Panel 的终端功能或者使用 docker exec 命令进入 MySQL 容器的命令行。

  2. 使用 TCP 连接方式登录 MySQL(避免 socket 问题):

    bash

    复制

    下载

    mysql -h 127.0.0.1 -u root -p
  3. 执行解封命令
    输入密码登录成功后,在 MySQL 提示符下执行:

    sql

    复制

    下载

    FLUSH HOSTS;

    这个命令会清除主机缓存,解除所有被封锁的 IP 地址。

  4. 退出 MySQL

    sql

    复制

    下载

    exit
  5. 重启 Metabase 容器
    在 1Panel 界面中重启 Metabase 容器,让它重新尝试连接。

如果无法通过 socket 连接:

如果仍然无法通过 mysql 命令连接,可以使用 mysqladmin 工具直接执行命令:

bash

复制

下载

mysqladmin -h 127.0.0.1 -u root -p flush-hosts

执行这个命令后输入密码,同样可以达到解除封锁的效果。

完成这些步骤后,Metabase 应该就能正常连接到 MySQL 数据库了。


方案二:直接操作 performance_schema 表

既然 FLUSH HOSTS 不行,我们可以直接清空缓存表:

sql

复制

下载

-- 清空主机缓存表(最直接的替代方案)
TRUNCATE TABLE performance_schema.host_cache;

-- 如果 TRUNCATE 不允许,使用 DELETE
DELETE FROM performance_schema.host_cache;

-- 确认表已被清空
SELECT COUNT(*) FROM performance_schema.host_cache


评论