2014-11-04 60 views
0

我想在我的CodeIgniter应用程序中使用两个数据库实例。我在应用程序中设置了db1和db2,但它始终使用第一个数据库的套接字。CodeIgniter:连接两个mysql实例

$this->db2 = $this->load->database('db2', TRUE); 

Message: mysqli::real_connect(): (HY000/2002): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) 

,但第二台服务器上“/var/run/mysqld/mysqld2.sock” 我看不到的地方,告诉它使用第二插座运行。

请注意我还想连接到第一个数据库,我需要合并两个复制,所以在php.ini中设置defalut套接字不是一个选项。

+0

[一些非常简短的谷歌搜索后(https://ellislab.com/forums/viewthread/145901/) – sjagr 2014-11-04 18:04:43

+0

我做过的一切,我选择DB2作为你在我的例子中看到调用$这个 - > db2 = $ this-> load-> database('db2',TRUE);问题是,第二分贝mysql2.sock运行,没有的mysql.sock – fdafgfdgfagfdagfdagfdagfdagfda 2014-11-04 18:17:29

+0

难道真的没有人有一个答案? – fdafgfdgfagfdagfdagfdagfdagfda 2014-12-14 16:38:59

回答

0

您还需要编辑数据库配置文件以添加其他设置。例如:

$db['default']['hostname'] = 'localhost'; 
.. 
.. 
.. 
$db['second_db']['hostname'] = 'localhost'; 
+0

他们在本地主机上运行的两个,这就是为什么有两个插座的mysql.sock和mysql2.sock – fdafgfdgfagfdagfdagfdagfdagfda 2014-11-04 18:10:38

+0

它是好的,如果他们本地主机上运行两个,只是有配置他们两个。我会假设数据库名称是不同的。 – Kisaragi 2014-11-04 18:27:28

+0

嗯,我有数组,db1和db2。两台服务器都有不同的端口和不同的套接字。但PHP仍然总是试图访问mysql.sock而不是mysql2.sock,但我同时需要两者。 – fdafgfdgfagfdagfdagfdagfdagfda 2014-11-04 18:38:52

0

看来这是一件笨失踪,至少mysqli的驱动程序:插座参数总是在驱动程序代码NULL。通过修改代码和配置数组,可以连接到服务器的任何给定套接字。

添加到您的配置

'socket' => '/tmp/mysql.sock', // if no socked uses set it to NULL

而在你/system/database/mysqli/mysqli_driver.php

return $mysqli->real_connect($hostname, $this->username, $this->password, $this->database, $port, $this->socket, $client_flags) 

改变这种但是请记住,编辑核心文件可能会出现冲突与框架更新,导致您的数据库实施中的错误。

http://forum.codeigniter.com/thread-486.html