You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codeigniter3导出数据库如何生成批量插入格式的备份文件

CodeIgniter 3 导出数据库备份生成批量INSERT语句实现

问题描述

使用CodeIgniter 3自带数据库工具类导出数据库备份时,默认生成的SQL文件为逐行单条INSERT语句,非批量插入格式,会导致后续导入速度慢、执行耗时长,甚至触发PHP最大执行时间限制导致导入失败。

当前实现代码如下:

  1. 加载数据库工具类
$this->load->dbutil();
  1. 备份配置参数
$format = array(
  'ignore' => array($this->ignore_directories),
  'format' => 'zip',
  'filename' => 'db_backup_' . $date . '.sql',
  'add_insert' => TRUE,
  'newline' => "\n"
);
  1. 执行备份生成文件
$backup = $this->dbutil->backup($format);

解决方法

CodeIgniter 3原生dbutil类未提供批量INSERT的配置开关,可通过以下两种方式实现需求:

  • 扩展原生数据库工具类
    在application/libraries目录下创建扩展类文件,类名前缀与配置项subclass_prefix保持一致(默认值为MY_,即文件名为MY_Dbutil.php),重写备份方法内的INSERT语句生成逻辑:遍历单表数据时,将多行记录的VALUES部分拼接到同一条INSERT语句后,最终输出INSERT INTO 表名 (字段列表) VALUES (行1值),(行2值),...(行N值);格式的批量插入语句。注意控制单条INSERT语句的总长度,不要超过MySQL服务端max_allowed_packet参数限制,建议单条语句大小控制在1MB以内,避免导入时报错。
  • 备份生成后二次处理SQL内容
    拿到原生备份内容后,先从zip压缩包中提取纯SQL文本,通过正则匹配连续指向同一张表的单条INSERT语句,提取每条语句的VALUES段拼接合并,重新组装为批量INSERT格式后,再重新打包为zip文件即可。处理时需要对SQL字符串内的分号、引号做边界判断,避免误截断正常字段内容。

注意:不要直接修改system目录下的框架核心文件,否则后续框架升级会覆盖自定义修改,优先使用类扩展方式实现定制逻辑。

内容的提问来源于stack exchange,提问作者Firefog

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 09:45:37