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

重置MariaDB密码后未终止--skip-networking进程,为何C++客户端无法连接?

问题原因与解决方案

核心原因

  • 你之前启动的mysqld_safe --skip-grant-tables --skip-networking进程,--skip-networking参数会禁用MariaDB的TCP/IP连接功能,仅允许通过本地Unix套接字(默认路径为/var/run/mysqld/mysqld.sock)连接。
  • 本地mysql客户端默认优先使用Unix套接字建立连接,所以即使TCP端口未被监听,客户端仍能正常访问;而你的C++代码明确指定tcp://127.0.0.1:3306,强制使用TCP连接,自然会因服务端未监听该端口报错。

解决步骤

  1. 终止带--skip-networking参数的MariaDB进程:
    # 查找目标进程ID
    ps aux | grep mysqld_safe
    # 替换<pid>为查到的进程ID,执行终止命令
    sudo kill <pid>
    # 或者直接重启MariaDB服务,更简便
    sudo systemctl restart mariadb
    
  2. 验证TCP端口监听状态:
    sudo netstat -tulpn | grep 3306
    
    若输出包含0.0.0.0:3306或127.0.0.1:3306,说明TCP监听已正常开启。
  3. 重新运行C++代码,此时tcp://127.0.0.1:3306连接应能正常工作。

补充验证

  • 若要测试本地mysql客户端的TCP连接情况,可添加--protocol=tcp参数强制使用TCP:
    mysql -u root -p --protocol=tcp
    
    此时会出现和C++代码相同的连接错误,可直接验证上述结论。

内容的提问来源于stack exchange,提问作者Dov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:55:05