mariaDB 无法从远程主机连接

mariaDB 无法从远程主机连接
MariaDB [(none)]> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

当我尝试

mysql -uroot -p -h 192.168.0.30

我收到了

ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.0.30' (111 "Connection refused")

在文件中

 /etc/mysql/mariadb.conf.d/50-server.cnf

我有这个:

bind-address            = 0.0.0.0
# skip-networking

我希望你可以帮助我。

本地连接有效。

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      11580/mysqld

我看到了“127.0.0.1:3306”,但我不知道如何改变它。

答案1

致谢:https://stackoverflow.com/a/14779244/7499402

默认情况下禁用的是远程root访问。如果要启用该功能,请在本地运行此 SQL 命令:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

然后找到以下行并将其注释掉在您的my.cnf文件中,该文件通常存在于/etc/mysql/my.cnfUnix/OSX 系统上。如果是 Windows 系统,您可以在 MySQL 安装目录中找到它,通常类似于C:\Program Files\MySQL\MySQL Server 5.5\ ,文件名为my.ini

更改线路

 bind-address = 127.0.0.1

 #bind-address = 127.0.0.1

重新启动 MySQL 服务器以使更改生效。

答案2

我遇到了同样的问题,我可以通过检查以下方面来解决:

首先,使用接受远程连接的帐户访问您的数据库。如其他帖子所述,该帐户的服务器名称中应包含 % 而不是 localhost。

我不知道这样做是否安全但我认为可以开始。

phpmyadmin 布局示例

之后你应该检查配置文件

  • /etc/mysql
  • /etc/mysql/mariadb.conf.d/

我必须从 */etc/mysql/my.conf 中推断,因为它包含以下行

user@debian:/etc/mysql$ cat my.cnf
# 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.
[client-server]

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

事实是第二个目录拥有这个文件:

user@debian:/etc/mysql/mariadb.conf.d$ ls
50-client.cnf  50-mysql-clients.cnf  50-mysqld_safe.cnf  50-server.cnf

从逻辑上讲,50-服务器.cnf包含帖子中引用但不再存在的行/etc/mysql/my.cnf。注意:此命令的输出已被编辑以澄清答案。

只需注释掉 bind-address 行并从远程终端连接到您的数据库。

user@debian:/etc/mysql/mariadb.conf.d$ cat 50-server.cnf 
#
# These groups are read by MariaDB server.
# Use it for options that only the server (but not clients) should see
#
# See the examples of server my.cnf files in /usr/share/mysql/
#
[server]
[mysqld]
# 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     

此后我的远程连接就正常工作了。希望这能有所帮助。

答案3

如输出所示,进程mysqld正在监听。这解释了为什么远程连接时会出现错误。它只是在本地接受连接。127.0.0.1:3306netstatconnection refused

验证您正在更改正确的配置文件后,您需要重新启动 mysqld 进程。

答案4

问题在于您的配置位置。我认为 mariadb 不会获取 /etc/mysql/mariadb.conf.d。

他们提供的文件可以解决您的问题(https://mariadb.com/kb/en/mariadb/configuring-mariadb-for-remote-client-access/)建议将您的绑定地址放在 my.cnf 文件中:

  * /etc/my.cnf                              (*nix/BSD)
  * $MYSQL_HOME/my.cnf                       (*nix/BSD) *Most Notably /etc/mysql/my.cnf
  * SYSCONFDIR/my.cnf                        (*nix/BSD)
  * DATADIR\my.ini                           (Windows)

我认为您可能能够bind-address在 /etc/mysql/my.cnf.local 中添加您的配置,这样应该可以让 mariadb 在 0.0.0.0 上监听。

根据您的 netstat 输出,我认为您的额外配置文件根本没有被拾取。

相关内容