高并发点赞系统TIDB部署问题

在远程服务器上搭建的 TiDB,在本地连接被拒绝
原因:TiDB 只监听本地 127.0.0.1:4000
需要修改配置文件
/root/.tiup/data/thumb/tidb-0/tidb.toml
中 server 部分
如果没有,自己加上
[server] host = "0.0.0.0" port = 4000

一下是完整步骤
tidb-server 的启动命令中明确指定了以下参数:

--host=127.0.0.1
--config=/root/.tiup/data/thumb/tidb-0/tidb.toml

这表明:

  1. TiDB 当前的监听地址是 127.0.0.1,因此只接受本地连接。

  2. 配置文件路径为 /root/.tiup/data/thumb/tidb-0/tidb.toml。
    解决方案
    为了使 TiDB 接受外部连接,你需要修改 --host 参数或配置文件中的 host 设置。以下是具体步骤:

  3. 修改配置文件
    打开指定的配置文件 /root/.tiup/data/thumb/tidb-0/tidb.toml,找到 [server] 部分,并将 host 修改为 0.0.0.0:
    [server]
    host = "0.0.0.0"
    port = 4000
    如果没有 [server] 部分,可以直接添加上述内容。

  4. 重启 TiDB 服务
    由于你使用的是 tiup 管理 TiDB,可以通过 tiup 命令重启服务:
    tiup cluster restart
    如果不确定集群名称,可以先列出所有集群:
    tiup cluster list
    然后使用正确的集群名称重启服务。

  5. 验证监听状态
    重启后,再次检查 TiDB 是否监听了 0.0.0.0:4000:
    netstat -tuln | grep 4000
    正确的输出应该是:
    tcp 0 0 0.0.0.0:4000 0.0.0.0:* LISTEN

  6. 确保防火墙允许外部访问
    即使 TiDB 监听了所有网络接口,服务器上的防火墙可能会阻止外部访问。请确保 4000 端口已开放。
    检查防火墙规则:
    sudo iptables -L -n | grep 4000
    开放端口:
    如果未开放,可以使用以下命令:
    sudo firewall-cmd --add-port=4000/tcp --permanent
    sudo firewall-cmd --reload
    或者直接使用 iptables:
    sudo iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
    sudo service iptables save

  7. 测试远程连接
    完成上述步骤后,尝试从远程客户端连接到 TiDB 服务:
    mysql -h <服务器IP> -P 4000 -u root -p
    如果仍然无法连接,请继续排查以下内容。

  8. 其他注意事项
    ● 用户权限:确保 TiDB 用户允许从远程主机连接。可以通过以下 SQL 检查和授权:
    SELECT user, host FROM mysql.user;
    CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON . TO 'your_user'@'%';
    FLUSH PRIVILEGES;
    ● 云服务安全组:如果你使用的是云服务器(如阿里云、AWS 等),请确保安全组规则允许 4000 端口的入站流量。

总结
根据你的输出,问题的根本原因是 TiDB 的 --host 参数被设置为 127.0.0.1。通过修改配置文件并重启服务,可以让 TiDB 监听所有网络接口(0.0.0.0)。完成后,确保防火墙和安全组规则允许外部访问 4000 端口。
按照以上步骤操作后,你应该能够成功实现远程连接。如果仍有问题,请提供更多信息以便进一步分析!

解决方案二
明白了!tiup playground 是一个快速启动 TiDB 集群的工具,它会使用默认配置启动 TiDB、TiKV 和 PD 等组件。然而,tiup playground 并不会读取你手动修改的配置文件(如 /root/.tiup/data/thumb/tidb-0/tidb.toml),而是使用其内置的默认配置。
因此,当你使用 tiup playground --tag thumb 启动集群时,之前手动修改的 [server] 配置会被覆盖,导致 TiDB 再次监听在 127.0.0.0.1:4000。

解决方案
为了使 TiDB 在 tiup playground 启动时监听所有网络接口(0.0.0.0),你可以通过以下方式解决:

  1. 使用 --host 参数指定监听地址
    tiup playground 提供了 --host 参数,可以用来指定 TiDB 的监听地址。例如:
    tiup playground --tag thumb --db.host 0.0.0.0
    这里的 --db.host 0.0.0.0 会告诉 TiDB 监听所有网络接口,而不是默认的 127.0.0.1。

  2. 验证监听状态
    启动后,检查 TiDB 是否监听了 0.0.0.0:4000:
    netstat -tuln | grep 4000
    正确的输出应该是:
    tcp 0 0 0.0.0.0:4000 0.0.0.0:* LISTEN
    如果仍然显示 127.0.0.1:4000,说明参数未生效,请继续排查。

  3. 确保防火墙允许外部访问
    即使 TiDB 监听了 0.0.0.0:4000,服务器上的防火墙可能会阻止外部访问。请确保以下内容:
    检查防火墙规则:
    sudo iptables -L -n | grep 4000
    开放端口:
    如果未开放,可以使用以下命令:
    sudo firewall-cmd --add-port=4000/tcp --permanent
    sudo firewall-cmd --reload
    或者直接使用 iptables:
    sudo iptables -A INPUT -p tcp --dport 4000 -j ACCEPT
    sudo service iptables save
    检查云服务安全组:
    如果你使用的是云服务器(如阿里云、AWS 等),请确保安全组规则允许 4000 端口的入站流量。

  4. 测试远程连接
    完成上述步骤后,尝试从远程客户端连接到 TiDB 服务:
    mysql -h <服务器IP> -P 4000 -u root -p
    如果仍然无法连接,请继续排查以下内容。

  5. 其他注意事项
    ● 用户权限:确保 TiDB 用户允许从远程主机连接。可以通过以下 SQL 检查和授权:
    SELECT user, host FROM mysql.user;
    CREATE USER 'your_user'@'%' IDENTIFIED BY 'your_password';
    GRANT ALL PRIVILEGES ON . TO 'your_user'@'%';
    FLUSH PRIVILEGES;
    ● 日志排查:查看 TiDB 的日志文件(通常位于 /root/.tiup/data//tidb-0/tidb.log),确认是否正确加载了 --host=0.0.0.0 参数。

总结
问题的根本原因是 tiup playground 使用默认配置启动 TiDB,覆盖了之前的修改可以通过 --db.host 0.0.0.0 参数显式指定监听地址。

posted @ 2026-02-01 10:18  程序员小王-  阅读(3)  评论(0)    收藏  举报