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