先定位旧系统的数据库配置,一般在旧系统根目录的config.php或.env文件中,确认数据库类型为MySQL(90%中小系统使用该类型)、IP、端口、用户名、密码及库名。执行以下命令导出完整备份:
``` mysqldump -h127.0.0.1 -P3306 -uroot -p'你的旧系统数据库密码' 旧系统库名 > old_archive_backup.sql ```若旧系统为云RDS,替换IP为RDS实例地址、端口和对应账号密码即可。若需避免锁表,添加--single-transaction参数:
``` mysqldump -hRDS实例地址 -P3306 -uRDS用户名 -p'RDS密码' 旧系统库名 --single-transaction > old_archive_backup.sql ```推荐用Docker部署开源档案系统OpenKM,避免环境依赖冲突,CentOS7环境执行以下命令:
``` 安装Docker yum install -y docker && systemctl start docker && systemctl enable docker 拉取OpenKM稳定镜像(6.3.10版) docker pull openkm/openkm-ce:6.3.10 启动容器,映射8080端口,绑定数据卷 docker run -d -p 8080:8080 -v /opt/openkm_data:/usr/local/tomcat/webapps/ROOT/okm -v /opt/openkm_db:/opt/postgresql/data --name openkm openkm/openkm-ce:6.3.10 ```部署完成后,访问服务器IP:8080,默认账号admin、密码admin,首次登录需立即修改密码。
1. 删除无效数据:登录旧系统数据库,执行SQL清除已删除/草稿且超期的记录(调整状态码和时间条件适配自身系统):
``` USE 旧系统库名; DELETE FROM archive_files WHERE status IN (2,3) AND update_time < DATE_SUB(NOW(), INTERVAL 180 DAY); ```2. 补全必填字段:新系统要求档案编号、创建时间、保管期限必填,执行SQL批量补全:
``` UPDATE old_archive SET archive_no = CONCAT('ARCH',LPAD(id,6,'0')), create_time = NOW(), retention_period = '30年' WHERE archive_no IS NULL OR create_time IS NULL OR retention_period IS NULL; ```3. 修正附件路径:批量替换旧系统附件路径为新系统路径:
``` UPDATE old_archive SET attach_path = REPLACE(attach_path,'/var/archive/files/','/opt/openkm_data/files/'); ```完成后导出CSV文件(避免SQL格式转换麻烦),先开启MySQL的文件导出权限:
``` SHOW VARIABLES LIKE 'secure_file_priv'; ```若返回结果为/tmp/,直接执行导出CSV命令:
``` SELECT id,archive_no,title,content,create_time,retention_period,attach_path FROM archive_files INTO OUTFILE '/tmp/clean_archive.csv' CHARACTER SET utf8 FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; ```1. 上传CSV到容器:把本地的/tmp/clean_archive.csv复制到OpenKM容器内:
``` docker cp /tmp/clean_archive.csv openkm:/tmp/ ```2. 后台导入:登录OpenKM后台,进入【文档→导入→CSV导入】,选择刚上传的clean_archive.csv,按提示匹配字段:档案编号→archive_no、标题→title、内容→content、创建时间→create_time、保管期限→retention_period、附件路径→attach_path,勾选忽略重复编号,点击导入按钮。

3. 附件同步:完成CSV导入后,把旧系统的附件文件夹复制到新系统数据卷路径:
``` cp -r /var/archive/files/ /opt/openkm_data/files/ ```1. 数量核对:旧系统执行SELECT COUNT() FROM archive_files; 新系统进入【档案列表】核对数量一致。
2. 附件完整性:随机抽取5条档案,测试附件下载、打开是否正常。
3. 权限验证:用普通账号登录,确认无越权访问非权限档案。
1. 删除临时文件:清理导出的SQL和CSV释放空间:
``` rm /tmp/old_archive_backup.sql /tmp/clean_archive.csv ```2. 配置自动备份:在OpenKM容器内设置每日凌晨2点备份数据库:
``` docker exec openkm crontab -e ```添加一行(%需转义):0 2 pg_dump -U openkm openkm > /opt/openkm_backup/$(date +\%Y\%m\%d).sql
3. 停用旧服务:确认迁移无误后,停止旧系统数据库服务:
``` systemctl stop mysqld ```1. CSV乱码:重新导出时已指定UTF8编码,若仍乱码,用sed批量替换编码:
``` sed -i 's/GBK/UTF8/g' /tmp/clean_archive.csv ```2. 附件路径错误:用sed批量修正路径:
``` sed -i 's/\/var\/archive\/files\//\/opt\/openkm_data\/files\//g' /tmp/clean_archive.csv ```3. 端口无法访问:检查防火墙是否开放8080端口:
``` firewall-cmd --add-port=8080/tcp --permanent && firewall-cmd --reload ```核对新旧系统时间戳范围:旧系统执行SELECT MIN(create_time), MAX(create_time) FROM archive_files; 新系统执行SELECT MIN(create_time), MAX(create_time) FROM documents; 若时间差超1秒,调整旧系统时区:
``` SET time_zone = '+8:00'; ```