我们在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配置 我确信这是非常简单的事情,但我已经失去了很多时间。
答案 0 :(得分:1)
尝试从Apache,PHP容器中telnet 192.168.1.2 3306
。你能连接吗?
确保MySQL的监听端口是3306,如果是,则相应地调整PHP代码。还要确保iptables
没有阻止任何传入连接。同时确保您拥有root
以及获得其他主机权限所需的任何其他用户的正确权限。
另外,请检查对MySQL进行任何配置更改时,重启服务。
答案 1 :(得分: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详细信息