繁体   English   中英

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM