1. 使用ontape工具备份(Informix原生工具,支持分级备份)
ontape是Informix官方提供的备份工具,支持0级(完整备份)、1级(增量备份)、2级(差异备份),适用于大规模生产环境。
sudo -u informix ontape -s -L 0 -d database_name -o /backup/informix/dbname_$(date +%F).bak
参数说明:-s(静默模式,减少输出)、-L 0(0级备份)、-d(指定数据库名)、-o(输出文件路径)。sudo -u informix ontape -s -L 1 -d database_name -o /backup/informix/dbname_inc_$(date +%F).bak
sudo -u informix ontape -s -L 2 -d database_name -o /backup/informix/dbname_diff_$(date +%F).bak
onconfig配置一致),然后执行:sudo -u informix ontape -r -d database_name -i /backup/informix/dbname_$(date +%F).bak
参数说明:-r(恢复模式)、-i(指定备份文件路径)。onconfig中的TAPEDEV(备份设备,如/dev/st0)、TAPEBLK(块大小,如16)、TAPESIZE(磁带大小,如102400)参数;0级备份是恢复的基础,需定期执行。2. 使用dbexport/dbimport工具备份(ASCII格式,灵活可编辑)
dbexport将数据库导出为ASCII文本文件(包含数据结构和数据),适合需要手动修改数据的场景(如迁移至其他数据库)。
sudo -u informix dbexport database_name -ss -c "informix" -f /backup/informix/dbname_export.dmp
参数说明:-ss(抑制统计信息输出)、-c(指定连接密码)、-f(输出文件路径)。sudo -u informix dbimport database_name -i /backup/informix/dbname_export.dmp -c "informix"
参数说明:-i(指定导入文件路径)。onmode -m quiescent),恢复后需重启至联机模式(onmode -m online);不支持在线备份。3. 使用onunload命令备份(二进制格式,高效灵活)
onunload以页为单位卸出数据,备份效率高于dbexport,适合备份单个表或特定数据(如大表)。
sudo -u informix onunload -l -t -b -s database_name:table_name -o /backup/informix/table_name.unl
参数说明:-l(加载模式,用于后续恢复)、-t(文本格式,可读性强)、-b(二进制格式,效率高)、-s(静默模式)。sudo -u informix onload -d database_name -i /backup/informix/table_name.unl
参数说明:-d(指定数据库名)、-i(指定卸出文件路径)。.unl文件需用onunload/onload配对使用;支持增量卸出(如仅卸出新增数据)。4. 使用tar命令备份(物理备份,简单快速)
tar命令可将Informix的数据目录、配置文件打包成压缩文件,适合快速备份整个数据库实例。
sudo tar -czvf /backup/informix/full_backup_$(date +%F).tar.gz /opt/IBM/informix/data /opt/IBM/informix/etc/onconfig.*
参数说明:-c(创建归档)、-z(gzip压缩)、-v(显示进度)、-f(指定输出文件)。sudo tar -xzvf /backup/informix/full_backup_$(date +%F).tar.gz -C /
参数说明:-x(解压)、-C(指定解压目录)。sudo systemctl stop informix),避免数据不一致;恢复后需重新启动服务。5. 自动定时备份(避免人工遗漏)
通过Ubuntu的cron定时任务,定期执行备份脚本(如每日0级备份+每周增量备份)。
/opt/informix/scripts/auto_backup.sh):#!/bin/bash
BACKUP_DIR="/backup/informix"
DATE=$(date +%Y%m%d)
LOG_FILE="$BACKUP_DIR/backup_$(date +%F).log"
# 执行0级备份
echo "[$(date)] Starting 0-level backup..." >> "$LOG_FILE"
sudo -u informix ontape -s -L 0 -d database_name -o "$BACKUP_DIR/dbname_$(date +%F).bak" >> "$LOG_FILE" 2>&1
if [ $? -eq 0 ]; then
echo "[$(date)] 0-level backup completed successfully." >> "$LOG_FILE"
else
echo "[$(date)] 0-level backup failed!" >> "$LOG_FILE"
fi
# 删除30天前的备份
find "$BACKUP_DIR" -name "dbname_*.bak" -type f -mtime +30 -exec rm -rf {} \; >> "$LOG_FILE" 2>&1
sudo crontab -e
添加以下内容:0 2 * * * /opt/informix/scripts/auto_backup.sh
注意事项:脚本需赋予执行权限(chmod +x /opt/informix/scripts/auto_backup.sh);定期检查日志文件(/backup/informix/backup_*.log),确认备份是否成功。6. 使用第三方备份工具(可选,增强可靠性)
若需要加密备份、增量备份、远程存储等功能,可使用第三方工具(如Duplicity)。
sudo apt update && sudo apt install duplicity
duplicity --full-if-older-than 1M /opt/IBM/informix/data file:///backup/informix/duplicity_backup
参数说明:--full-if-older-than 1M(1个月未做完整备份则执行完整备份)、file://(本地存储路径)。duplicity restore file:///backup/informix/duplicity_backup /opt/IBM/informix/data
注意事项:需提前配置SSH密钥(用于远程存储);加密备份需设置密码(--encrypt-key参数)。