【问题标题】:Use local network for DB connection使用本地网络进行数据库连接
【发布时间】:2018-03-14 16:21:33
【问题描述】:

我们在 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 配置有关。
我确信这很简单,但我在这方面浪费了很多时间。

【问题讨论】:

    标签: php mysql networking debian proxmox


    【解决方案1】:

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

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

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

    【讨论】:

    • 很好的测试,但我认为他们说 MySQL 正在运行 192.168.1.2
    • 是的 .. 连接超时。但是很奇怪,因为我允许这个特定的 IP 连接到 3306 与 icmp 相同的 ping 工作
    • 在 mysql 设置中我还缺少什么吗?
    • 你能试试nmap -sV -p 3306 192.168.1.2吗?似乎 MySQL 没有监听端口 3306
    • ``` root@lampserver:/# nmap -sV -p 3306 192.168.1.2 在 2018 年 3 月 14 日 16:37 UTC 开始 Nmap 7.40 (nmap.org) 192.168 的 Nmap 扫描报告。 1.2 主机已启动(0.000055 秒延迟)。端口状态服务版本 3306/tcp 过滤的 mysql MAC 地址:8E:F7:5A:62:FA:FA (Unknown) 执行服务检测。请在nmap.org/submit 报告任何不正确的结果。 Nmap 完成:1.44 秒内扫描了 1 个 IP 地址(1 个主机启动)```
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-23
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 2020-06-11
      • 2019-03-23
      相关资源
      最近更新 更多