多进程并行写入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
相关产品推荐
相关产品推荐

