0

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

4

2 回答 2

1

尝试telnet 192.168.1.2 3306从 Apache、PHP 容器。可以连接吗?

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

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

于 2018-03-14T16:27:08.723 回答
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 详细信息

于 2018-03-15T09:00:29.650 回答