使用本地网络进行数据库连接

时间:2018-03-14 16:21:33

标签: php mysql networking debian proxmox

我们在OVH上有一个带有proxmox的专用服务器。这个想法是在本地连接容器,但也通过互联网连接。到目前为止,我有2个容器。

我为本地IP添加了一个桥接网络,因为我可以互相ping容器。
还将bind-address=192.168.1.3添加到my.cnf。

1个容器正在运行apache + php 7.2(192.168.1.3)

另一个容器正在运行MySQL。 (192.168.1.2)

问题

我的MySQL一直在说SQLSTATE[HY000] [2002] Connection timed out

这是我的php代码:

<?php

/**
 * Configuration for database connection
 *
 */

$host       = "192.168.1.2";
$username   = "root";
$password   = "root";
$dbname     = "test";
$dsn        = "mysql:host=$host;dbname=$dbname";
$options    = array(
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
              );

try 
{
    $connection = new PDO("mysql:host=$host", $username, $password, $options);
    $sql = file_get_contents("data/init.sql");
    $connection->exec($sql);

    echo "Database and table users created successfully.";
}

catch(PDOException $error)
{
    echo $sql . "<br>" . $error->getMessage();
}

根据我的理解,代码是正确的,因此它必须是我的mysql配置 我确信这是非常简单的事情,但我已经失去了很多时间。

2 个答案:

答案 0 :(得分:1)

尝试从Apache,PHP容器中telnet 192.168.1.2 3306。你能连接吗?

确保MySQL的监听端口是3306,如果是,则相应地调整PHP代码。还要确保iptables没有阻止任何传入连接。同时确保您拥有root以及获得其他主机权限所需的任何其他用户的正确权限。

另外,请检查对MySQL进行任何配置更改时,重启服务。

答案 1 :(得分:0)

搜索了一会儿之后。发现我必须创建一个新用户并向其授予权限

mysql> CREATE USER 'monty'@'localhost' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'localhost'
    ->     WITH GRANT OPTION;
mysql> CREATE USER 'monty'@'%' IDENTIFIED BY 'some_pass';
mysql> GRANT ALL PRIVILEGES ON *.* TO 'monty'@'%'
    ->     WITH GRANT OPTION;

同样在我的服务器配置/etc/mysql/mariadb.conf.d/50-server.conf上,我必须评论

bind-address  = 192.168.1.3

进入

#bind-address  = 192.168.1.3

然后重新启动mysql服务器并使用用户名'monty'和密码'some_pass'更改我的php代码的mysql详细信息