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监听:
- 编辑
/opt/lampp/etc/my.cnf,注释掉skip-networking配置 - 确保
bind-address = 127.0.0.1存在 - 重启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
相关产品推荐
相关产品推荐

