(是的,这个问题看起来很相似但我明白我为什么会收到这条信息。我不明白,也无法自己找到任何切实可行的信息,那就是该怎么做。所以我就在这里。)
我正在尝试在我的 VPS 上设置 Postfix 和 Dovecot,决定使用 MariaDB 进行 MySQL 路由。以下本指南,看起来还不错。
我用 postmap 测试了数据库配置文件,结果服务器直接拒绝连接。这是我收到的错误消息;
postmap: warning: connect to mysql server 127.0.0.1: Can't connect to MySQL server on '127.0.0.1' (111 "Connection refused")
postmap: fatal: table mysql:/etc/postfix/mysql-virtual-mailbox-domains.cf: query error: Transport endpoint is not connected
MariaDB 的配置文件设置为与 127.0.0.1 绑定,我为 127.0.0.1 打开了 3306,甚至尝试完全禁用防火墙而没有任何改变。
那么,IP 和端口似乎不能成为问题的根源,而我认为这个“传输端点”一定是罪魁祸首 —— 如果这不仅仅是指 IP/端口的另一种方式的话。
如果有人对我可以尝试解决此问题有任何建议,我将不胜感激。
编辑:如果有任何区别,我也在使用 nginx。
编辑 II:“service mysql status”的结果:
* /usr/bin/mysqladmin Ver 9.1 Distrib 10.1.11-MariaDB, for debian-linux-gnu on x86_64
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Server version 10.1.11-MariaDB-1~trusty-log
Protocol version 10
Connection Localhost via UNIX socket
UNIX socket /var/run/mysqld/mysqld.sock
Uptime: 2 hours 37 min 16 sec
答案1
在 HBruijn 为我指明正确道路之后,我在这里找到了答案:https://mariadb.com/kb/en/mariadb/configuring-mariadb-for-remote-client-access/
MariaDB 默认启用 skip-networking 指令,这会停止所有 TCP/IP 连接。在注释掉该指令后,我保留 bind-address 不变,让 MariaDB 仅在默认端口 (3306) 上监听 TCP 以进行本地连接。
在 my.cnf 中更改此项:
#skip-networking
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1
重新启动mysql服务,并测试监听了哪些端口;
# netstat -tln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
..some records..
tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN
还通过 127.0.0.1 成功登录 MariaDB,一切正常!耶!
# mysql -u mailuser -h 127.0.0.1 -D mailserver -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 49
Server version: 10.1.11-MariaDB-1~trusty-log mariadb.org binary distribution
Copyright (c) 2000, 2015, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [mailserver]>It finally works!