【问题标题】:Connecting to a remote database through CodeIgniter通过 CodeIgniter 连接到远程数据库
【发布时间】:2011-12-27 18:59:58
【问题描述】:

无法使用提供的设置连接到您的数据库服务器。

我在将应用程序连接到远程数据库时遇到了困难。当我运行我的应用程序时,我收到了上面显示的错误。我已经在这个网站上查看了这个问题的先前答案,但我没有解决这个问题。据我所知,我需要替换主机名并使我的 mysql 数据库接受外部连接,我都做过。我通过 mysql 命令行在我的 database.php 中尝试了相同的值,它可以工作。

那么我可能还缺少什么?

这是我在 database.php 中的设置:

$active_group = 'staging';
$active_record = TRUE;

$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'myDatabase';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;

$db['staging']['hostname'] = 'XX.XX.XXX.XXX';
$db['staging']['username'] = 'user';
$db['staging']['password'] = 'pwd';
$db['staging']['database'] = 'myDatabase';
$db['staging']['dbdriver'] = 'mysql';
$db['staging']['dbprefix'] = '';
$db['staging']['pconnect'] = TRUE;
$db['staging']['db_debug'] = TRUE;
$db['staging']['cache_on'] = FALSE;
$db['staging']['cachedir'] = '';
$db['staging']['char_set'] = 'utf8';
$db['staging']['dbcollat'] = 'utf8_general_ci';
$db['staging']['swap_pre'] = '';
$db['staging']['autoinit'] = TRUE;
$db['staging']['stricton'] = FALSE;

【问题讨论】:

  • 到目前为止你是怎么尝试的?给出数据库配置代码。
  • 我已经用我的数据库配置编辑了我的问题。

标签: mysql codeigniter remote-access


【解决方案1】:

在你的 shell 中尝试这个命令,看看你是否可以连接:

mysql -h HOSTNAME -uUSERNAME -p DATABASE

还要检查你是否没有不同的端口来连接mysql集,默认情况下codeigniter将连接到3306,除非你定义了实际的端口集。这可能是问题所在。

祝你好运

【讨论】:

  • 是的,您应该看到 mysql 提示符,但看起来您是在 Windows 上,因为您使用的是 exe,该命令适用于基于 unix 的机器。您是否使用暂存配置像这样连接:$this->db_staging= $this->CI->load->database('staging', TRUE);
  • 很抱歉删除了以前的 cmets,我意识到我没有正确编写您的命令。不,我没有使用这样的暂存配置。不,我只在构造函数中加载我的数据库:$this->CI->load->database()。
  • 好的,但是你定义了2个定义,因为它是一个数组,它会返回默认定义,所以你应该指定你的连接定义。我建议定义您要使用的连接,因为如果您的登台服务器上没有运行 localhost 数据库,但是远程连接,那么它将失败并提示该错误
  • 据我发现,它加载了正确的组,例如暂存,因为在尝试连接时使用了数组值:在 system/database/drivers/mysql/mysql_driver 的第 70 行返回 @mysql_connect($this->hostname, $this->username, $this->password, TRUE) .但是,正是那条失败的行导致我出现此错误,如question 所示。无论如何,非常感谢您的帮助!
  • 您的远程数据库使用哪个驱动程序,检查您的 mysql 配置(我相信是 mysql.cnf)以确保它没有使用 mysqli vs mysql
【解决方案2】:

mysql 默认只接受 localhost 连接,请确保你的服务器在本地配置正确

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

确保您的服务器不在私有子网中的路由器后面,您可能需要配置静态 NAT 以将您的服务器端口转发到网络中

【讨论】:

    【解决方案3】:
    $active_group = 'staging';
    $active_record = TRUE;
    

    试着把上面的代码改成

    $active_group = 'default';
    $active_record = TRUE;
    

    【讨论】:

      【解决方案4】:

      如果您在服务器中强制执行 SELinux 策略,请确保启用 httpd_can_network_connect 布尔标志

      setsebool -P httpd_can_network_connect=1
      

      【讨论】:

        猜你喜欢
        • 2019-11-13
        • 1970-01-01
        • 2014-01-13
        • 2016-10-29
        • 2014-10-26
        • 1970-01-01
        • 1970-01-01
        • 2019-08-05
        • 1970-01-01
        相关资源
        最近更新 更多