高并发点赞系统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
这表明:
-
TiDB 当前的监听地址是 127.0.0.1,因此只接受本地连接。
-
配置文件路径为 /root/.tiup/data/thumb/tidb-0/tidb.toml。
解决方案
为了使 TiDB 接受外部连接,你需要修改 --host 参数或配置文件中的 host 设置。以下是具体步骤: -
修改配置文件
打开指定的配置文件 /root/.tiup/data/thumb/tidb-0/tidb.toml,找到 [server] 部分,并将 host 修改为 0.0.0.0:
[server]
host = "0.0.0.0"
port = 4000
如果没有 [server] 部分,可以直接添加上述内容。 -
重启 TiDB 服务
由于你使用的是 tiup 管理 TiDB,可以通过 tiup 命令重启服务:
tiup cluster restart
如果不确定集群名称,可以先列出所有集群:
tiup cluster list
然后使用正确的集群名称重启服务。 -
验证监听状态
重启后,再次检查 TiDB 是否监听了 0.0.0.0:4000:
netstat -tuln | grep 4000
正确的输出应该是:
tcp 0 0 0.0.0.0:4000 0.0.0.0:* LISTEN -
确保防火墙允许外部访问
即使 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 -
测试远程连接
完成上述步骤后,尝试从远程客户端连接到 TiDB 服务:
mysql -h <服务器IP> -P 4000 -u root -p
如果仍然无法连接,请继续排查以下内容。 -
其他注意事项
● 用户权限:确保 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),你可以通过以下方式解决:
-
使用 --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。 -
验证监听状态
启动后,检查 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,说明参数未生效,请继续排查。 -
确保防火墙允许外部访问
即使 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 端口的入站流量。 -
测试远程连接
完成上述步骤后,尝试从远程客户端连接到 TiDB 服务:
mysql -h <服务器IP> -P 4000 -u root -p
如果仍然无法连接,请继续排查以下内容。 -
其他注意事项
● 用户权限:确保 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 参数显式指定监听地址。

浙公网安备 33010602011771号