重置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连接,自然会因服务端未监听该端口报错。
解决步骤
- 终止带
--skip-networking参数的MariaDB进程:# 查找目标进程ID ps aux | grep mysqld_safe # 替换<pid>为查到的进程ID,执行终止命令 sudo kill <pid> # 或者直接重启MariaDB服务,更简便 sudo systemctl restart mariadb - 验证TCP端口监听状态:
若输出包含sudo netstat -tulpn | grep 33060.0.0.0:3306或127.0.0.1:3306,说明TCP监听已正常开启。 - 重新运行C++代码,此时
tcp://127.0.0.1:3306连接应能正常工作。
补充验证
- 若要测试本地mysql客户端的TCP连接情况,可添加
--protocol=tcp参数强制使用TCP:
此时会出现和C++代码相同的连接错误,可直接验证上述结论。mysql -u root -p --protocol=tcp
内容的提问来源于stack exchange,提问作者Dov
相关产品推荐
相关产品推荐

