CodeIgniter调用dbutil备份数据库报不支持功能错误如何修复
CodeIgniter框架mysqli驱动数据库备份报错修复方案
问题现象
在CodeIgniter框架中实现数据库备份功能时,执行如下备份代码无法正常生成备份文件:
$this->load->dbutil(); $db_format=array('format'=>'zip','filename'=>'my_db_backup.sql'); $backup=& $this->dbutil->backup($db_format); $dbname='backup-on-'.date('Y-m-d').'.zip'; $save='assets/db_backup/'.$dbname; write_file($save,$backup); force_download($dbname,$backup);
代码运行后抛出如下错误:
Database error occured. Please contact administrator
Unsupported feature of the database platform you are using.Filename: C:\xampp\htdocs\innowork-v4\api\system\database\drivers\mysqli\mysqli_utility.php
Line Number: 83
错误核心提示为当前使用的数据库平台不支持对应功能,报错定位至mysqli驱动工具类文件第83行。
报错原因
CodeIgniter 3.x版本自带的mysqli驱动dbutil备份方法,默认依赖数据库服务端权限与环境扩展支持,在XAMPP集成环境、普通虚拟主机环境下触发报错的常见原因有三个:
- 数据库连接账号无
LOCK TABLES、全库读取的对应权限 - PHP环境未开启zip压缩扩展,无法生成zip格式备份
- 运行环境PHP版本过高(PHP8+),和旧版mysqli驱动的备份逻辑存在兼容问题
修复方案
方案1:调整备份配置参数
优先修改备份配置,关闭触发权限校验的表锁逻辑,同时提前确认环境依赖正常:
- 打开php.ini配置文件,确认
extension=zip配置项处于开启状态,重启Web服务生效 - 调整备份代码参数,移除冗余的引用传递符号,关闭表锁与外键检查:
$this->load->dbutil(); $db_format = array( 'format' => 'zip', 'filename' => 'my_db_backup.sql', 'add_drop' => TRUE, 'add_insert' => TRUE, 'newline' => "\n", 'foreign_key_checks' => FALSE, 'lock_tables' => FALSE ); $backup = $this->dbutil->backup($db_format); $dbname = 'backup-on-'.date('Y-m-d').'.zip'; $save = 'assets/db_backup/'.$dbname; // 提前确认assets/db_backup目录存在,且具备写入权限 write_file($save, $backup); force_download($dbname, $backup);
方案2:替换单步备份为分表导出逻辑
如果调整参数后仍报错,说明当前环境的mysqli驱动不支持全库一次性压缩备份,改为手动遍历数据表逐表导出,再调用zip类生成压缩包,绕过驱动内置的不支持逻辑:
$this->load->database(); $this->load->dbutil(); $this->load->library('zip'); // 获取当前库下所有数据表 $tables = $this->db->list_tables(); $backup_sql = ''; // 逐表生成备份SQL foreach ($tables as $table) { $backup_sql .= $this->dbutil->backup(array( 'tables' => array($table), 'format' => 'txt', 'add_drop' => TRUE, 'add_insert' => TRUE, 'newline' => "\n", 'lock_tables' => FALSE )); } // 生成压缩包并保存、下载 $dbname = 'backup-on-'.date('Y-m-d').'.zip'; $save = 'assets/db_backup/'.$dbname; $this->zip->add_data('my_db_backup.sql', $backup_sql); $this->zip->archive($save); $this->zip->download($dbname);
方案3:环境兼容排查
上述两种方案都无效时,逐一排查环境问题:
- 检查数据库连接账号是否具备对应库的SELECT、SHOW VIEW权限
- 确认
assets/db_backup目录存在,且PHP运行用户对该目录有写入权限 - 若使用PHP8及以上版本,建议将CodeIgniter框架升级到最新的3.x迭代版本,或降级PHP到7.4版本适配旧框架
内容的提问来源于stack exchange,提问作者Ramachandran
相关产品推荐
相关产品推荐

