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

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

規格: 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();
}

?>

我一直收到这个错误:

由于目标机器主动拒绝,因此无法建立连接。

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

在此处输入图片描述

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

任何帮助都将受到赞赏。

答案1

登录mysql mysql -u yourname -p yourpassword,然后按照如下操作

mysql>use mysql;
mysql>select host,user from user;

可能会产生以下结果:

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

如果看到该信息,说明你只能在 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)

"%"意味着任何主机都可以远程登录服务器,如果要限制仅有一台机器访问,则需要将 更改"%"为您要允许连接的机器的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)

退出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

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

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

相关内容