MariaDB 拒绝远程连接

MariaDB 拒绝远程连接

我已经看过很多教程,回答过很多问题,但仍然无法让它发挥作用。

我去过:

我在 Ubuntu 16.04 上安装了 MariaDB。然后设置了两个用户,其中一个供公众使用,这样我就可以在这里发布它。

用户添加如下:

CREATE USER 'anon'@'%' IDENTIFIED BY '';

本地连接可以正常工作吗?

是的,我可以通过服务器上的 ssh 以用户身份连接:

mysql -u anon

您是否已验证用户已被正确添加?

我想是这样:

MariaDB [(none)]> SELECT User, Host FROM mysql.user WHERE Host <> 'localhost';
+------+------+
| User | Host |
+------+------+
| anon | %    |
| user | %    |
+------+------+
2 rows in set (0.01 sec)

您解除防火墙的封锁了吗?

可能需要解除防火墙:

[user]@popfreq:/etc/mysql$ firewall-cmd --add-port=3306/tcp 
The program 'firewall-cmd' is currently not installed. You can install it by typing:
sudo apt install firewalld

未安装防火墙。

您是否检查过 my.cnf 文件的设置是否正确?

my.cnf( )中的错误设置[user]@popfreq:/etc/mysql可能会导致它拒绝连接。这些是skip-networkingbind-address。我的文件如下所示:

# The MariaDB configuration file
#
# The MariaDB/MySQL tools read configuration files in the following order:
# 1. "/etc/mysql/mariadb.cnf" (this file) to set global defaults,
# 2. "/etc/mysql/conf.d/*.cnf" to set global options.
# 3. "/etc/mysql/mariadb.conf.d/*.cnf" to set MariaDB-only options.
# 4. "~/.my.cnf" to set user-specific options.
#
# If the same option is defined multiple times, the last one will apply.
#
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.

#
# This group is read both both by the client and the server
# use it for options that affect everything
#
[client-server]

# Import all .cnf files from configuration directory
!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mariadb.conf.d/

它根本没有任何令人反感的台词。

您检查过其他配置文件吗?

是的。他们也没有冒犯的台词。

telnet 能工作吗?

不。

mint@mint-VirtualBox ~ $ telnet 128.199.203.208 3306
Trying 128.199.203.208...
telnet: Unable to connect to remote host: Connection refused

不确定这是什么意思或如何修复。

服务器使用什么接口?

似乎仅限于本地:

[user]@popfreq:/etc/mysql/mariadb.conf.d$ sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      16884/mysqld    

你记得重启了吗?是的。我在所有尝试之间都使用了这个方法重启了:

sudo service mysql restart

答案1

[mysqld]在我的情况下,错误的解决方案是配置文件中根本没有部分my.cnf。添加此内容解决了该问题:

[mysqld]
bind-address = ::

不确定为什么它没有默认添加。请注意,使用::over 的原因0.0.0.0是它::也适用于 IPv6(mySQL手册中提到,但不是 mariaDB 手册)。

这也修复了 telnet:

mint@mint-VirtualBox ~ $ telnet 128.199.203.208 3306
Trying 128.199.203.208...
Connected to 128.199.203.208.

现在网络输出为:

[user]@popfreq:/etc/mysql$ sudo netstat -ntlup | grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      17609/mysqld   

希望这对其他人有帮助。

答案2

在遇到同样的问题(在 Debian Stretch 上)并尝试了这里提到的所有解决方案但均未成功后,我终于找到了我刚刚发布了重要部分:

编辑/etc/mysql/mariadb.conf.d/50-server.cnf,注释掉bind-address,并添加sql-mode语句:

[...]
# 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

sql-mode="NO_ENGINE_SUBSTITUTION"

[...]

并且 - 它成功了。

答案3

注意:bind-address = ::对我来说没用,但0.0.0.0有用。所以,::适用于 IPv6,但0.0.0.0适用于 IPv4!即::不适用于 IPv4。

答案4

我也遇到过这个问题。有一个非 UI 的 ubuntu 机器,我只能通过 SSH 使用 mysql 命令行(就像在本地主机上登录一样),但无法从我的工作站访问数据库。

首先要允许非本地主机连接。编辑/etc/mysql/mariadb.conf.d/50-server.cnf并检查绑定地址:

#bind-address           = 127.0.0.1

然后它抱怨我的主机“mymachine.mydomain.local”不允许,所以为了修复用户访问,我刚刚在 MariaDB 中创建了一个用户。

SELECT host, user FROM mysql.user;

仅列出本地主机用户。

因此我创建了一个用户供我的网络上的其他机器使用:

CREATE USER 'myuser'@'%.mydomain.local' IDENTIFIED BY 'a-password';
GRANT ALL PRIVILEGES ON the-database TO myuser IDENTIFIED BY 'a-password';

并且 MariaDB 允许我连接。

相关内容