2013-06-27 59 views
1

我正在将一个意大利面代码PHP应用程序重构到Codeigniter框架中,并且该应用程序的开发版本位于与生产数据库不同的服务器上。对于测试,我想从我的EC2实例中建立一个ssh隧道,在这里我将开发版托管到生产数据库。我通过libssh2和phpseclib(http://phpseclib.sourceforge.net/)成功创建了与远程服务器的ssh连接。但是,在建立了ssh隧道之后,我无法使用codeigniter mysqli db驱动程序连接到数据库。如何通过SSH隧道将PHP/Codeigniter应用程序连接到远程MySQL数据库?

随着每一个试图连接到数据库中,我得到以下错误:

无法使用提供的设置连接到你的数据库服务器。 文件名:芯/ MY_Controller.php 行号:6

的MY_Controller代码是:

1 <?php defined('BASEPATH') OR exit('No direct script access allowed'); 
2 
3 class MY_Controller extends CI_Controller { 
4 
5 public function __construct() { 
6  parent::__construct(); 
7  $this->auth = new stdClass; 
8  $this->load->library('flexi_auth'); 
9  if (!$this->flexi_auth->is_logged_in()) { 
10   header('Location: /login'); 
11  } 
12 } 

我已修改的mysqli驱动器以包括隧道对象作为库MySQLi real_connect函数作为参数跟着,无济于事。有谁知道我该如何做这项工作?

非常感谢您的帮助!

迈克

+0

呃 - 你是否确定要将开发系统连接到生产数据库?您最好在开发系统上复制生产数据库。 – 2013-06-27 01:15:42

+0

生产数据库为1TB +,在开发服务器上复制生产数据库将是一项巨大的工作。我很感激你的警惕,但我对这个问题以外的可能性感到好奇 - 如果我通过SSH连接到远程开发数据库,​​或者我希望生产应用程序远程连接到生产数据库,是否有办法使它工作?谢谢你的想法! – semanticMike

回答

0

我想我的第一次尝试是创建一个ssh隧道这样的:

my_dev_ec2# ssh -L 3306:localhost:3306 [email protected]_production_ec2 

然后Config中的mysqli DB连接到localhost,如果它是在生产实例。

+0

感谢您的回复。我真的希望应用程序以编程方式建立连接,我已经分别使用libssh2和phpseclib完成了连接。但是,Codeigniter mysqli数据库驱动程序,即使当我将其修改为接受ssh_tunnel对象作为参数时,也不会建立连接。 – semanticMike

相关问题