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.cnf
Unix/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。
我不知道这样做是否安全但我认为可以开始。
之后你应该检查配置文件
- /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:3306
netstat
connection 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 输出,我认为您的额外配置文件根本没有被拾取。