尝试使用 C++ 程序连接到数据库。我正在使用mysqlcpp连接器与连接字符串tcp://localhost:3306
和tcp://127.0.0.1:3306
.该程序在我的本地计算机上运行,但是当我尝试在 ssh 登录后在远程 ubuntu 服务器上运行它时,它会抱怨:
terminate called after throwing an instance of 'sql::SQLException'
what(): Unknown MySQL server host 'tcp' (2)
我只是尝试在默认端口 3306 上连接本地主机。我也可以通过键入mysql -u root -p
并以这种方式登录来手动连接。
使用 登录到我的数据库后mysql -u root -p
,我可以输入show variables;
,并且确实看到skip-networking
设置为“关闭”。
MySQL 正在监听网络:
netstat -a | grep mysql
tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN
unix 2 [ ACC ] STREAM LISTENING 20025 /var/run/mysqld/mysqld.sock
是否有一些我忘记更改的配置? “(2)”是什么意思?
答案1
谢谢大家的建议。我通过重新安装 mysqlcppconnector (而不是通过更改 C++ 代码)修复了它。我开始怀疑这是与构建相关的东西,所以我问了这个这里。
关于两次安装之间差异的一些说明:我没有使用 1.1.12,而是使用最新版本重新安装;另外,我没有通过手动复制文件来安装,我安装了
sudo apt-get install libmysqlcppconn-dev
我不知道这是否是巧合,但我还注意到点击“寻找以前的 GA 版本?”下载页面上的 不再将您重定向到版本 1.1.12,而是将您重定向到 1.1.13。
此后程序运行。好吧,它确实给了我一个错误,但又是一个不同的错误,而且这个问题的修复非常简单。就其价值而言,它是
Access Denied for User 'root'@'localhost'
我通过输入检查了权限SELECT user,authentication_string,plugin,host FROM mysql.user;
,发现 localhost 没有 mysql_native_password 权限(只有 auth_socket),所以我通过这样做更改了它
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'secret_password_here';
希望这对其他人有帮助——这是一个奇怪的事情。也感谢大家的帮助。