【问题标题】:Cannot access remote MySQL from apache through SSH [closed]无法通过 SSH 从 apache 访问远程 MySQL [关闭]
【发布时间】:2015-09-08 23:34:18
【问题描述】:

问题: 无法通过 SSH 从 apache 访问远程 MySQL

我的目标是通过 ssh 隧道使用 apache 和 tomcat 从 APP 服务器安全地访问数据库。 APP服务器(Linux)正在运行apache httpd、tomcat。 数据库服务器(Linux)正在运行 mysql 服务器(端口 3306)。 SSH 为用户设置: sshUser 在两台服务器上。 DB 上的 MySQL 已启动。

SSH 连接: 在 APP 服务器上,我以 sshUser 身份运行以下命令。 (sshUser是APP和DB服务器的登录用户)

ssh -p 22 -f -N -L 3307:localhost:3306 sshUser@DB_ip_address

然后我在APP服务器上启动了httpd和tomcat。

测试用例: 1.APP服务器(httpd)(localhost:3307)>(3306)数据库服务器(MySQL)失败: 在 APP 服务器上,在 apache 中,我运行 test.php 作为以下 php 代码

<?php
$db_host = "localhost:3307"; 
$db_name = "dbname"; 
$db_user = "dbuser"; 
$db_pass = "dbpassword"; 
GLOBAL $errors; 
GLOBAL $successes;
$errors = array(); 
$successes = array();
$mysqli = new mysqli($db_host, $db_user, $db_pass, $db_name);
GLOBAL $mysqli;
if(mysqli_connect_errno()) {
    echo "Conn Error = " . mysqli_connect_error();    exit();
}else{
    echo "Pass";    exit();
}
?>

错误信息: 警告:mysqli::mysqli(): (HY000/2005): Unknown MySQL server host 'localhost:3307' (1) in /$site_path/test.php on line 10, Conn Error = Unknown MySQL server host 'localhost:3307 ' (1) (使用 joomla 和 wordpress 也失败了)

  1. APP server (tomcat) (localhost:3307)>(3306) DB server (MySQL) 好:

  2. windows 8 (httpd) (localhost:3307)>(3307) APP server (3307)>(3306) DB server (MySQL) 好: 在 windows 8 客户端上,putty 目标是 APP 服务器,SSH 隧道设置转发端口 3307(源端口)localhost:3307(目标)。 如果我在 Windows 8.1 上从我的 apache 服务器运行相同的 test.php,它没有问题。 Joomla 也可以。 (配置如下)

  3. windows 8 (tomcat) (localhost:3307)>(3307) APP server (3307)>(3306) DB server (MySQL) 好:

配置细节: APP服务器上: Tomcat 由“tomcat”用户启动 httpd 由“apache”用户启动 mysqld 由“root”启动 ssh 由“sshUser”启动 sshd 由“root”启动

在 /etc/passwd (APP server 和 DB server 相同) apache:x:48:48:Apache:/var/www:/sbin/nologin tomcat:x:501:501::/home/tomcat:/sbin/nologin

【问题讨论】:

  • 这个问题可能最适合serverfault.com
  • $db_host="localhost:3307" 适用于 windows8,不适用于 Linux。由于 joomla 没有端口参数,我更改为默认端口。新问题:我在APP服务器上运行了一个Mysql。我将其更改为 3309。然后 ssh -f -N -L 3306:localhost:3306 sshUser@DB_IP。但是 joomla 总是转到本地的 Mysql,即 3309。dev.mysql.com/doc/refman/5.0/en/connecting.html“对于到 localhost 的连接,MySQL 使用 Unix 套接字文件,即使 --port 给出了端口号。”我更改为 ssh -p 22 -f -N -L 3306:127.0.0.1:3306 sshUser@DB_IP_address。在 php 中,更改 $db_host="127.0.0.1" 以使其工作。
  • 我自己无法更改问题。但这确实与编程有关。代码需要解决非常微妙的 joomla 和 mysql 功能。 (在我之前的评论中描述)

标签: php mysql apache ssh


【解决方案1】:

localhost:3307 不是有效的主机名。

http://php.net/manual/en/mysqli.construct.php

mysqli::__construct ([ string $host = ini_get("mysqli.default_host")
[, 字符串 $username = ini_get("mysqli.default_user") [, 字符串 $passwd
= ini_get("mysqli.default_pw") [, string $dbname = "" [, int $port = ini_get("mysqli.default_port") [, string $socket =
ini_get("mysqli.default_socket") ]]]]]])

(...)

主机

可以是主机名或 IP 地址。 (...)

(...)

端口

指定尝试连接 MySQL 服务器的端口号。

【讨论】:

  • 谢谢。这就对了。原始格式“localhost:3307”实际上适用于 Windows 8。但不适用于 Linux。现在我的问题出在 joomla 中,它没有为端口提供单独的参数。我想我需要再问一个问题。
【解决方案2】:

您必须将端口号作为参数添加到构造函数

$db_host="localhost";
$db_port=3307;
.....
new mysqli ( ....,$db_port);
....

【讨论】:

  • 谢谢。这就对了。原始格式“localhost:3307”实际上适用于 Windows 8。但不适用于 Linux。现在我的问题出在 joomla 中,它没有为端口提供单独的参数。我想我需要再问一个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多