mysql 数据库不允许在默认端口上的 localhost 上进行 tcp 连接

mysql 数据库不允许在默认端口上的 localhost 上进行 tcp 连接

尝试使用 C++ 程序连接到数据库。我正在使用mysqlcpp连接器与连接字符串tcp://localhost:3306tcp://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';

希望这对其他人有帮助——这是一个奇怪的事情。也感谢大家的帮助。

相关内容