允许远程 mysql 访问(通过 webmin 或 shell)

she*_*wen 3 remote-access database webmin

规格: Ubuntu 14.04 webmin/virtualmin 1.791

我正在使用以下代码来测试远程 mysql 数据库连接:

<?php

$db_host = "123.456.789";
$db_name = "database";
$db_user = "user";
$db_pass = "password";
$db_table_prefix = "prefix_";



GLOBAL $errors;
GLOBAL $successes;

$errors = array();
$successes = array();

$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
GLOBAL $mysqli;

if(mysqli_connect_errno()) {
    echo "Conn Error = " . mysqli_connect_error();
    exit();
}

?>
Run Code Online (Sandbox Code Playgroud)

我不断收到此错误:

无法建立连接,因为目标机器主动拒绝它。

研究表明,这意味着服务器“不听”。在运行上述脚本之前,我已经尝试允许通过 webmin gui 进行远程 mysql 访问。我所做的是编辑“数据库管理->主机权限”并使其如下:

在此处输入图片说明

这应该允许远程 mysql 访问,但它不起作用。我也从其他地方读到允许远程 mysql 访问我需要编辑/etc/mysql/my.cnf;我以为在我编辑 webmin 中的“主机权限”后,这个文件会被更改,但事实并非如此。另一方面,我找不到我应该在 中编辑的行my.cnf,所以我被困在这里。

任何帮助表示赞赏。

小智 6

登录mysql mysql -u yourname -p yourpassword,然后像这样

mysql>use mysql;
mysql>select host,user from user;
Run Code Online (Sandbox Code Playgroud)

它可能会给出以下结果:

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| localhost | root             |
+-----------+------------------+
4 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

如果你看到了,这意味着你只能在localhost连接mysql,所以你需要做以下步骤:

mysql>GRANT ALL PRIVILEGES ON *.* TO username@"%" IDENTIFIED BY "password";
Query OK, 0 rows affected (0.00 sec)
mysql>flush privileges;
Query OK, 0 rows affected (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

"%"意味着任何主机都可以远程登录服务器,如果您想限制只访问一台机器,您需要将 更改为"%"您要允许连接的机器的 IP 地址。

如果它有效,那么你select host,user from user;,你会得到以下信息:

+-----------+------------------+
| host      | user             |
+-----------+------------------+
| %         | root             |
| 127.0.0.1 | root             |
| ::1       | root             |
| localhost | debian-sys-maint |
| localhost | root             |
+-----------+------------------+
5 rows in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)

退出mysql,编辑/etc/mysql/my.cnf,查找

# 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
Run Code Online (Sandbox Code Playgroud)

注释它或者你可以删除它(不推荐),重新启动你的mysql服务器,使用service mysql restart,如果你像我一样这样做,你可能会解决问题。

它在我的电脑上运行良好(ubuntu 14.04+mysql 5.5)