使用本地网络连接数据库

Use local network for DB connection

我们在 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 配置有关。
我敢肯定这真的很简单,但我为此浪费了很多时间。

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

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

此外,请在对 MySQL 进行任何配置更改时检查是否重新启动了服务。

搜索了一段时间后。发现我必须创建一个新用户并授予它权限

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 详细信息