我正在使用 Codeigniter 开发 Web 应用程序。通常 apache 和 mysql 服务器托管在同一台服务器上。今天我必须把它们分开。
10.10.10.1 - apache
10.10.10.2 - mysql
这两个现在可以互相ping通。这是我在 mysql 服务器上的 my.cnf 文件。
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address=10.10.10.2
old_passwords=0
我将 mysql 服务器绑定到 10.10.10.2 ip 地址。因为这两个服务器有两个不同的接口。
之后,我使用该查询在 mysql 服务器上创建了一个用户。
GRANT ALL ON appdb.* TO appuser@'10.10.10.2' identified by 'passw0rd';
为了测试,我编写了那个小 php 脚本并在具有 10.10.10.1 ip 地址的 apache 服务器上运行。
<?php
$username = "appuser";
$password = "passw0rd";
$hostname = "10.10.10.2";
//connection to the database
$dbhandle = mysql_connect($hostname, $username, $password)
or die("Unable to connect to MySQL");
//select a database to work with
$selected = mysql_select_db("appdb",$dbhandle)
or die("Could not select examples");
$result = mysql_query("SELECT @@version");
print_r(mysql_fetch_array($result));
mysql_close($dbhandle);
?>
一切安好!结果回来找我了。我在 mysql 服务器上启动 tcpdump,我看到了响应 tcp 流。
这是我的 codeigniter database.php 文件
$db['default']['hostname'] = '10.10.10.2';
$db['default']['port'] = '3306';
$db['default']['username'] = 'appuser';
$db['default']['password'] = 'passw0rd';
$db['default']['database'] = 'appdb';
$db['default']['dbdriver'] = 'mysqli';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = FALSE;
$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;
确保控制器和模型文件上的一切正常。我在控制器中编写了测试方法。
public function test()
{
$query = $this->db->query("select @@version");
print_r($query->result());
}
并在浏览器上输出
Array ( )
我在 mysql 服务器上启动 tcpdump -vvv -i eth1 以确保任何 tcp 连接都到达 db 服务器?我确定当我在浏览器上调用测试功能时没有打开 tcp 连接。不久; CI 不连接 MySQL 服务器。我不知道为什么?
任何想法 ?
感谢你们。
PS:首先 $db['default']['db_debug'] 是 TRUE。当我在浏览器上获取页面而 db_debug 定义为 TRUE 时,我得到了该错误。我更改为 FALSE 以解决该问题。但我确信当我使用 locahost 作为 mysql 服务器时 db_debug 没有问题。当我将其更改为远程服务器时,出现了错误。
Unable to connect to your database server using the provided settings.
Filename: core/Loader.php
Line Number: 346