You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多进程并行写入MySQL同表不同记录失败,遇Errno113路由问题

问题本质与解决方案

首先明确:OSError: [Errno 113] No route to host是网络层连通性问题,和数据库锁完全无关——锁相关的报错会是锁等待超时、死锁提示这类,不会出现路由不可达的提示。

核心排查与修复步骤

  • 修正MySQL绑定地址
    你的MySQL启动命令未指定--bind-address,默认只会绑定127.0.0.1(仅本地访问),其他节点的请求根本无法到达。修改启动命令,添加--bind-address=0.0.0.0允许所有IP访问:

    mysqld_safe --socket=mysql.sock --log-error=mysql.log --datadir=mysql_data --pid-file=mariadb.pid --transaction-isolation=READ-COMMITTED --bind-address=0.0.0.0 &
    

    同时确保MySQL所在节点的防火墙开放3306端口(比如用ufw allow 3306或对应云厂商安全组规则)。

  • 调整数据库用户权限
    你使用的mdanb用户大概率仅被授予localhost访问权限,其他节点无法用该用户登录。执行以下SQL授权(替换%为具体节点IP会更安全):

    GRANT ALL PRIVILEGES ON optuna_db.* TO 'mdanb'@'%' IDENTIFIED BY 'password';
    FLUSH PRIVILEGES;
    
  • 修正Optuna的Storage地址
    你的代码里写的是@localhost:3306,不同节点的localhost指向自身而非MySQL所在节点。必须改成MySQL服务器的实际公网/内网IP,比如:

    storage_name = "mysql+pymysql://mdanb:password@192.168.1.100:3306/optuna_db"
    
  • 验证节点间连通性
    在报错的节点上,用工具测试和MySQL节点的网络连通性:

    nc -zv 192.168.1.100 3306
    # 或者用telnet
    telnet 192.168.1.100 3306
    

    如果连接失败,优先排查防火墙、路由策略,而非数据库配置。

额外说明

你添加的--transaction-isolation=READ-COMMITTED和当前问题完全无关,这个参数用于控制事务可见性,不会影响跨节点的数据库连接。

内容的提问来源于stack exchange,提问作者An Ignorant Wanderer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 12:52:23