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

Linux环境下使用MySQL C++ Connector无法连接数据库问题求助

解决MySQL C++ Connector连接1045权限错误的步骤

1. 区分MySQL的两种连接方式(核心问题)

MySQL中localhost和127.0.0.1对应不同的连接协议:

  • localhost:Unix Socket连接(你用sudo mysql -u root -p登录的就是这种方式)
  • 127.0.0.1:TCP/IP连接(你的C++代码和mysqlx::Session用的是这种方式)

两种方式的用户权限是分开配置的,你当前的root/admin用户可能只拥有Socket连接权限,没有TCP连接权限。

验证与修复:

登录MySQL后执行以下命令,查看用户权限范围:

SELECT user, host FROM mysql.user WHERE user IN ('root', 'admin');

如果结果中只有root@localhost/admin@localhost,没有root@127.0.0.1/admin@127.0.0.1,则需要添加TCP连接权限:

-- 给root用户添加127.0.0.1的TCP连接权限
CREATE USER 'root'@'127.0.0.1' IDENTIFIED BY '你的root密码';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;

-- 给admin用户添加127.0.0.1的TCP连接权限
CREATE USER 'admin'@'127.0.0.1' IDENTIFIED BY '你的admin密码';
GRANT ALL PRIVILEGES ON *.* TO 'admin'@'127.0.0.1' WITH GRANT OPTION;

-- 刷新权限生效
FLUSH PRIVILEGES;

2. 可选:改用Socket连接代码

如果不想配置TCP权限,可直接修改代码使用Unix Socket连接(XAMPP的MySQL Socket路径通常为/opt/lampp/var/mysql/mysql.sock):

con = driver->connect("unix:///opt/lampp/var/mysql/mysql.sock", "root", "the_password");

可通过查看XAMPP的/opt/lampp/etc/my.cnf文件中的socket配置项确认实际路径。

3. 检查MySQL TCP端口状态

确认MySQL是否监听3306端口:

netstat -tulpn | grep 3306

如果无输出,说明未开启TCP监听:

  1. 编辑/opt/lampp/etc/my.cnf,注释掉skip-networking配置
  2. 确保bind-address = 127.0.0.1存在
  3. 重启XAMPP MySQL服务:
sudo /opt/lampp/lampp restart mysql

4. 修复admin用户的Socket登录问题

若sudo mysql -u admin -p仍报错,尝试:

  • 避免用sudo登录(sudo会以root身份读取配置,可能干扰),直接执行mysql -u admin -p
  • 重置admin用户密码:
ALTER USER 'admin'@'localhost' IDENTIFIED BY '新密码';
FLUSH PRIVILEGES;

5. mysqlx::Session连接的端口修正

MySQL X Protocol默认使用33060端口而非3306,修改代码:

mysqlx::Session session("tcp://127.0.0.1:33060", "root", "the_password");

同时检查my.cnf中是否存在mysqlx_port = 33060配置,确保XAMPP的MySQL已启用X Protocol模块。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 09:27:04