|  | 
 
| 本帖最后由 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,是可以的。
 最后用原始的函数是可以完美进行的,而且不用去掉注释部分。
 
 大家有啥好的方法欢迎发出来分享啊
 :)
 | 
 评分
查看全部评分
 |