Использовать локальную сеть для подключения к БД

У нас есть выделенный сервер с Proxmox на OVH. Идея состоит в том, чтобы подключить контейнеры локально, а также через Интернет. Пока у меня есть 2 контейнера.

Я добавил мостовую сеть для локального IP, и это работает, так как я могу пропинговать контейнеры друг от друга.
Также добавлено bind-address=192.168.1.3 к моему.

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

Решение

Пробовать telnet 192.168.1.2 3306 из контейнера Apache, PHP. Вы можете подключиться?

Убедитесь, что порт прослушивания для MySQL — 3306, в противном случае измените код PHP соответствующим образом. Также убедитесь, что iptables не блокирует любые входящие соединения. Также убедитесь, что у вас есть правильные разрешения для root и любые другие пользователи, вам нужно иметь разрешения от других хостов.

Кроме того, пожалуйста, проверьте при внесении любых изменений конфигурации в MySQL, что вы перезапустите службу.

1

Другие решения

После поиска вокруг некоторое время. Выяснил, что мне нужно создать нового пользователя и предоставить ему разрешения

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 и измените мои детали MySQL на моем php-коде с именем пользователя ‘monty’ и паролем ‘some_pass’

0

По вопросам рекламы [email protected]