У меня есть три сервера A , B и C , а также мой localhost. Каждый сервер находится в соответствующей сети, и сервер C должен подключиться к базе данных mysql на сервере A через порт 3306, чтобы выполнить некоторые тесты.
Сценарий таков:
- На сервере C я запускаю сценарии
PHP
чтобы открытьmysql connection
с B (которое не является mysql-сервером) - Я могу SSH с локального хоста на сервер B
- Я могу SSH с локального хоста на сервер A
Сервер A имеет сервер mysql (очевидно), но сервер B не имеет сервера mysql.
Я попробовал следующий метод:
Отобразите удаленный B: 3306 на localhost: 3337 , используя:
ssh -R 3306:localhost:3337 b-user@B-server
Карта localhost: 3337 до A: 3306 , используя:
ssh -L 3337:localhost:3306 a-user@A-server`
Протестируйте скрипт php, чтобы открыть соединение с B:
$host= '<B-server>'; $pwd = '<mysql-pwd>'; $user= '<mysql-user>'; $db = "my_test_db"; try { $pdo = new PDO("mysql:host={$host};dbname={$db};port=3306", $user, $pwd); } catch (PDOException $e) { print "Error!: " . $e->getMessage() . "<br/>"; die(); }
Когда я запускаю приведенный выше скрипт php, я получаю сообщение об ошибке:
Error!: SQLSTATE[HY000] [2002] Connection refused
Что-то не так в использовании портов?
ОБНОВИТЬ
На сервере B я установил mysql-client
, а затем тестирование соединения с сервером A проходит хорошо:
mysql -u <sql-user> -p<sql-pass> --host 127.0.0.1 -P 3306
Действительно, связь между A и B через localhost работает.