|
本帖最后由 ywqbestever 于 2010-8-23 09:09 编辑
最近看到有几个问CI数据库备份与还原的问题,以前也没做过还原的问题,就此探讨一下:我的思路:
使用CI的数据库工具类进行数据库备份,写入一个SQL文件中,恢复时,用CI的文件辅助函数读取文件内容进行query操作。
代码:
PHP复制代码 function backup (){ function backup (){
$this->load->dbutil();
$this->load->helper('file');
$prefs = array(
'tables' => array(), // 包含了需备份的表名的数组.
'ignore' => array(), // 备份时需要被忽略的表
'format' => 'txt', // gzip, zip, txt
'filename' => 'mybackup.sql', // 文件名 - 如果选择了ZIP压缩,此项就是必需的
'add_drop' => TRUE, // 是否要在备份文件中添加 DROP TABLE 语句
'add_insert' => TRUE, // 是否要在备份文件中添加 INSERT 语句
'newline' => "\\n" // 备份文件中的换行符
);
$backup = $this->dbutil->backup($prefs);
write_file ('./database.sql', $backup);
}
function restore (){
$this->load->helper('file');
//$content = read_file('./database.sql');
//$content = preg_replace("/#(.*)\\s#(.*)TABLE(.*)(.*)\\s#/i","",$content);//去掉注释部分
$conn=mysql_connect("localhost","root","");//指定数据库连接参数
mysql_select_db("test");
$file = BASEPATH . "database.sql";
mysql_query("source '".$file."';");
mysql_close($conn);
/*$sqls = explode(";\\r",$content);
foreach($sqls as $sql){
if(str_replace(" ","",$sql)){
$this->db->query($sql);
}
}*/
} 复制代码
恢复的函数中注释的部分,是想尝试使用CI的数据库进行导入的,结果发现直接query文件中的内容不行
然后去掉CI备份文件中的注释部分,发现依然不可以,接着进行打散SQL语句,然后一条一条query,是可以的。
最后用原始的函数是可以完美进行的,而且不用去掉注释部分。
大家有啥好的方法欢迎发出来分享啊
:) |
评分
-
查看全部评分
|