首先我犯了一个错误,就是表命名的时候使用了,特殊的数据字符,所以以后的项目请使用表前缀,可以尽量避免犯没必要而且很蛋疼的错误。 CI的database.php中的 $db[‘default’][‘dbprefix’] = ' ‘; 可以设置表前缀。 但是要注意一点:此功能只支持CI自带的Active Record 类,也就是说自己的写的sql语句是不支持的。 下面是根据手册写出的备份方法:
// 备份
function backup(){
$this->load->dbutil();
$this->load->helper('file');
$prefs = array(
'tables' => array(), // 包含了需备份的表名的数组.如果留空将备份所有数据表
'ignore' => array(), // 备份时需要被忽略的表
'format' => 'zip', // gzip, zip, txt
'filename' => 'mybackup'.date('Ymd').'.sql', // 文件名 - 如果选择了ZIP压缩,此项就是必需的
'add_drop' => TRUE, // 是否要在备份文件中添加 DROP TABLE 语句
'add_insert' => TRUE, // 是否要在备份文件中添加 INSERT 语句
'newline' => "\n" // 备份文件中的换行符
);
$backup = $this->dbutil->backup($prefs);
write_file('./mybackup'.date('Ymd').'.sql', $backup);
}
为了让程序自动执行,每天备份一次,我在后台控制器的index方法中写了下面的代码:
//检查是否存在文件,即是否备份,如果文件不存在则执行备份
$filename = './mybackup'.date('Ymd').'.sql';
if (!file_exists($filename)){
$this->backup();
}
//删除一个星期之前的备份文件
$oldfilename = './mybackup'.date('Ymd',(time()-3600*24*7)).'.sql';
if (file_exists($oldfilename)){
@unlink($oldfilename);
}
备份完成。至于还原数据库,未完待续————
- 原文作者: forecho
- 原文链接: https://blog.forecho.com/codeigniter-bei-fen-gong-neng.html
- 版权声明:本作品采用 署名-非商业性使用 4.0 国际 (CC BY-NC 4.0)进行许可,非商业转载请注明出处(作者,原文链接),商业转载请联系作者获得授权。