使用本地网络连接数据库
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 详细信息
我们在 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 详细信息