如何通过SSH隧道将PHP/Codeigniter应用程序连接到远程MySQL数据库?
我正在将一个意大利面代码PHP应用程序重构到Codeigniter框架中,该应用程序的开发版本位于与生产数据库不同的服务器上。为了进行测试,我想从我的EC2实例建立一个ssh隧道,在那里我托管开发版本到生产数据库。我已经通过libssh2和phpseclib成功地创建了与远程服务器的ssh连接。但是,在ssh隧道建立之后,我无法使用codeigniter mysqli db驱动程序连接到数据库 每次尝试连接到数据库时,都会出现以下错误: 无法使用提供的设置连接到数据库服务器。 文件名:core/MY_Controller.php 电话号码:6 MY_控制器代码为:如何通过SSH隧道将PHP/Codeigniter应用程序连接到远程MySQL数据库?,php,mysql,codeigniter,ssh,mysqli,Php,Mysql,Codeigniter,Ssh,Mysqli,我正在将一个意大利面代码PHP应用程序重构到Codeigniter框架中,该应用程序的开发版本位于与生产数据库不同的服务器上。为了进行测试,我想从我的EC2实例建立一个ssh隧道,在那里我托管开发版本到生产数据库。我已经通过libssh2和phpseclib成功地创建了与远程服务器的ssh连接。但是,在ssh隧道建立之后,我无法使用codeigniter mysqli db驱动程序连接到数据库 每次尝试连接到数据库时,都会出现以下错误: 无法使用提供的设置连接到数据库服务器。 文件名:core/
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函数中,如下所示,但没有效果。有人知道我怎样才能做到这一点吗
提前感谢您的帮助
Mike我想我的第一次尝试是创建一个ssh隧道,如下所示:
my_dev_ec2# ssh -L 3306:localhost:3306 myuser@my_production_ec2
然后将mysqli数据库配置为连接到localhost,就像它在生产实例中一样。Er-确实要将开发系统连接到生产数据库吗?您最好在开发系统上复制生产数据库。生产数据库是1TB+的,在开发服务器上复制生产数据库将是一项巨大的工作。我感谢您的谨慎,但我很好奇除了这个问题之外还有什么可能性——如果我通过ssh连接到远程开发数据库,或者我希望生产应用程序远程隧道到生产数据库,有没有办法让它工作?谢谢你的想法!谢谢你的回复。我真的更喜欢应用程序以编程方式建立连接,我已经能够分别使用libssh2和phpseclib来实现这一点。但是,Codeigniter mysqli数据库驱动程序,即使我修改它以接受ssh_隧道对象作为参数,也不会建立连接。