OA系统信创迁移流程
需要对3000余套律所OA系统进行迁移,按天逐步迁移。基本流程如下:
1.申请瀚高测试license兼容适配
2.适配前对现有系统进行升级,提高后期迁移效率
3.编写相关脚本
4.申请服务器(申请临时互联网访问)、环境搭建、打通相关网络
5.停止新功能开发、升级(新系统直接在新服务器搭建)
6.数据库创建3种流程对应的默认模版(install_v0/1/2/3,指定所属用户)及空模版(空模板包含city、log_2026/2027表)、开启兼容模式为mysql(部分兼容函数无需添加到public模式)
7.使用 chattr.sh 脚本清理全部站点目录只读权限(非必要)
8.搭建cdn128系统为本地内网IP访问(需对外提供服务,内部使用IP)
9.上线t00x测试系统对接律管测试系统进行测试(同时上线几个常用所,接口及功能;迁移后需进行数据对比;测试系统安装程序)
10.信创OA服务器免密登录原OA服务器
11.发布版本进行升级测试(含文件、sql、模板变动)
12.测试完成,整理各服务器对应的系统名单(区分未安装、已注销暂不迁移)
13.省厅下发通知
14.使用mysql_drop.bat脚本清理历史数据库;
@echo off
setlocal enabledelayedexpansion
rem 设置数据库连接参数
set "mysql_path=E:\wamp\bin\mysql\mysql5.7.31\bin"
set MYSQL_USER=root
set MYSQL_PASSWORD=ss@2021
set MYSQL_HOST=localhost
set "filePath=oa_dir_ss.txt"
rem 检查文件是否存在
if not exist "%filePath%" (
echo 文件 %filePath% 不存在。
exit /b 1
)
rem 循环创建数据库并导入数据
for /f "delims=" %%i in (%filePath%) do (
echo %%i
rem 创建数据库
mysql -u%MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% -e "DROP DATABASE IF EXISTS %%i;"
)
echo All databases dropped.
pause
15.确定当前批次迁移律所名单,修改 oa_dir.sh、oa_dir.txt(同步修改新老服务器、本地)(按服务器逐台迁移,127优先,如必要则预约后迁移)
#!/bin/bash
#所在目录
baseDir="/web/oa/"
#自动获取系统目录文件 仅可包含oa系统文件
#sysDir=`ls /web/oa`
#本次需处理的目录
sysDir=(xxx xxx)
16.使用 stop_web.sh 脚本停用本批次系统(调整默认页面说明文字,同新服务器默认页)
#!/bin/bash
#---------------------------------------
# step1 停用本批次系统
# root /www/server/stop/public;
# #include
# author: SenSen 1050575278
# date: 2021/10/10
#---------------------------------------
#read -p "Warning! Enter 'y' to continue : " input
#判断是否存在参数,不存在则取消
#if [ "$input" == 'y' ] || [ "$input" == 'Y' ]; then
#本批次系统
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
exit 1
fi
cd /www/server/panel/vhost/nginx
# 数据库文件路径
DB_FILE="/www/server/panel/data/db/site.db"
for f in "${sysDir[@]}"
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
#执行对应操作
find ${f}.speaklaw.cn.conf | xargs sed -i "s/include/#include/"
find ${f}.speaklaw.cn.conf | xargs sed -i "s#/web/oa/${f}/public;#/www/server/stop/public; location / { try_files '' /index.html; } location = /index.html { index index.html; }#"
#修改sites表中的status=0
#获取要更新的ID
ID=$(sqlite3 $DB_FILE "SELECT id FROM sites WHERE name='${f}.speaklaw.cn';")
UPDATE_SQL="UPDATE sites SET status = 0 WHERE id = $ID;"
# 执行SQL更新语句
sqlite3 $DB_FILE "$UPDATE_SQL"
echo "${curtime} ${f} stopped" >> /web/stop_web.log
done
#重新加载nginx配置
nginx -s reload
# else
# echo "Error: invalid input"
# fi
#!/bin/bash
#---------------------------------------
# 开启网站
# root /www/server/stop/public;
# #include
# author: SenSen 1050575278
# date: 2021/10/10
#---------------------------------------
read -p "Warning! Enter 'y' to continue : " input
#判断是否存在参数,不存在则取消
if [ "$input" == 'y' ] || [ "$input" == 'Y' ]; then
#本批次系统
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
echo 'empty'
exit 1
fi
cd /www/server/panel/vhost/nginx
# 数据库文件路径
DB_FILE="/www/server/panel/data/db/site.db"
for f in "${sysDir[@]}"
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
#执行对应操作
find ${f}.speaklaw.cn.conf | xargs sed -i "s/#include/include/"
find ${f}.speaklaw.cn.conf | xargs sed -i "s#/www/server/stop/public; location / { try_files '' /index.html; } location = /index.html { index index.html; }#/web/oa/${f}/public;#"
#修改sites表中的status=0
#获取要更新的ID
ID=$(sqlite3 $DB_FILE "SELECT id FROM sites WHERE name='${f}.speaklaw.cn';")
UPDATE_SQL="UPDATE sites SET status = 1 WHERE id = $ID;"
# 执行SQL更新语句
sqlite3 $DB_FILE "$UPDATE_SQL"
echo "${curtime} ${f} started" >> /web/start_web.log
done
#重新加载nginx配置
nginx -s reload
else
echo "Error: invalid input"
fi
17.中心系统标记本批次系统为不更新UPDATE law_firm SET is_sync=0 WHERE SUBSTRING(domain, 8, 4) in ('xxx', 'xxx');
18.使用 mysql_dump.sh 脚本批量导出原系统数据库(本次备份不含city、log表等公共表,需先创建mysql_backup目录)
#!/bin/bash
#---------------------------------------
# 备份指定数据库
# author: SenSen 1050575278
# date: 2024/07/17
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
# 定义MySQL配置和备份参数
MYSQL_USER="root"
MYSQL_PASSWORD="xxxx"
BACKUP_DIR="/mysql_backup"
CURRENT_DATE=$(date +%Y%m%d_%H%M%S)
# 确保备份目录存在
mkdir -p $BACKUP_DIR
rm -rf /mysql_backup/*.sql
rm -rf /adown/all_sql.zip
# 获取所有数据库的列表
#DATABASES=$(mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -e 'SHOW DATABASES;' | grep -v Database)
#备份指定数据库
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
exit 1
fi
# 遍历所有数据库并进行备份
for db in "${sysDir[@]}"; do
echo "Backing up database: $db"
# 排除无需迁移的表 提高效率
mysqldump -P 3306 -u$MYSQL_USER -p$MYSQL_PASSWORD $db --ignore-table=$db.city --ignore-table=$db.log_2022 --ignore-table=$db.log_2023 --ignore-table=$db.log_2024 > $BACKUP_DIR/$db.sql
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
# 输出备份完成信息
echo "${curtime} ${db} completed." >> /web/mysql_dump.log
done
# 将以上文件打包
zip -r /adown/all_sql.zip /mysql_backup/*
# 输出完成信息
echo "Backup completed at $CURRENT_DATE. Files are saved in $BACKUP_DIR."
19.使用 mysql_import.bat 脚本批量导入数据库到本地
@echo off
setlocal enabledelayedexpansion
rem 设置数据库连接参数
set "mysql_path=E:\wamp\bin\mysql\mysql5.7.31\bin"
set MYSQL_USER=root
set MYSQL_PASSWORD=ss@2021
set MYSQL_HOST=localhost
set "filePath=oa_dir_ss.txt"
rem 检查文件是否存在
if not exist "%filePath%" (
echo 文件 %filePath% 不存在。
exit /b 1
)
rem 循环创建数据库并导入数据
for /f "delims=" %%i in (%filePath%) do (
echo %%i
rem 创建数据库
mysql -u%MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% -e "CREATE DATABASE IF NOT EXISTS %%i; USE %%i;"
rem 导入数据
mysql -u%MYSQL_USER% -p%MYSQL_PASSWORD% -h%MYSQL_HOST% %%i < "d:\hg\%%i.sql"
)
echo All databases created and data imported successfully.
pause
20.使用 clear.sh 脚本清理原系统临时文件(主要清理临时文档)
#!/bin/bash
#---------------------------------------
# step1 清理系统临时文件(含log)
# author: SenSen 1050575278
# date: 2021/10/10
#---------------------------------------
#read -p "Warning! Enter 'y' to continue : " input
#判断是否存在参数,不存在则取消
#if [ "$input" == 'y' ] || [ "$input" == 'Y' ]; then
#导入本批次系统
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
exit 1
fi
for f in "${sysDir[@]}"
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
#进入目录
cd ${baseDir}${f}
#清除uploads临时文档
rm -rf public/uploads/doc/case/*
rm -rf public/uploads/doc/consult/*
rm -rf public/uploads/doc/dczm/*
rm -rf public/uploads/doc/gwdwrz/*
rm -rf public/uploads/doc/gzrz/*
rm -rf public/uploads/doc/hjdj/*
rm -rf public/uploads/doc/jsx/*
rm -rf public/uploads/doc/lsh/*
rm -rf public/uploads/doc/yjs/*
rm -rf public/uploads/doc/report_affair/*
rm -rf public/uploads/doc/report_consultant/*
rm -rf public/uploads/doc/report_cooperate/*
rm -rf public/uploads/doc/report_internal/*
rm -rf public/uploads/doc/report_month/*
rm -rf public/uploads/doc/report_year/*
#清除其他
rm -rf public/uploads/doc_tpl
rm -rf public/uploads/grid_report
rm -rf public/uploads/dossier
rm -rf public/uploads/dossiers
rm -rf public/uploads/notice
rm -rf public/uploads/pdf
rm -rf public/uploads/lawyer/doc/*
rm -rf public/uploads/level/doc/*
rm -rf public/uploads/prove/*
rm -rf public/uploads/qrcode/*
rm -rf public/uploads/report/*
rm -rf public/uploads/rollback/*
rm -rf public/uploads/rollback_apply/*
rm -rf public/uploads/tmp/*
echo "${curtime} ${f} done" >> /web/clear.log
done
# else
# echo "Error: invalid input"
# fi
21.使用 file_zip.sh 脚本打包各律所生产的文件,并统一打包为 all.zip (需先创建/web/zips,确保空间充足)
#!/bin/bash
#---------------------------------------
# step3 同步网站律所生成数据数据
# 需打包install目录,避免install.lock丢失
# 考虑先同步指定日期前数据,正式上线时再同步增量数据(不考虑此模式,同步处理)
# 清理runtime -> 源服务器按OA单独打包到统一目录,并记录目录(排除app、config、addons、extend、route、sensen、services、upgrade、runtime、vendor、public|addons|install|plugins|static|)->调用升级程序更新未打包目录(使用脚本)->使用脚本打包源服务器增量数据->新服务器解压(确保目录一致)->删除增量备份压缩包->检查文件用户组
# author: SenSen 1050575278
# date: 2024/02/01
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
# 打包程序
#导入本批次系统
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
exit 1
fi
cd /web/zips
# 清理当前目录文件
rm -rf /web/zips/*.zip
rm -rf /adown/all128.zip
for f in "${sysDir[@]}"
do
fileDir=${baseDir}${f}
# 执行压缩 期间禁止安装新OA
# .env文件由系统统一拷贝、static等文件参考线上版本使用cdn
zip -r ${f}.zip ${fileDir}/public/install/install.lock ${fileDir}/public/tpl ${fileDir}/public/uploads ${fileDir}/public/.htaccess ${fileDir}/public/upgrade_code.txt ${fileDir}/public/version.txt
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
# 输出备份完成信息
echo "${curtime} ${f} completed." >> /web/file_zip.log
done
# 将以上文件打包
zip -r /adown/all128.zip ./*
#系统目录
#app
#config
#extend
#route
#runtime
#sensen
#upgrade
#vendor
#.logic
#.env(2024年无初始化CASE编号,故无需同步此文件,此文件需批量替换)
#think
#composer*
#public/index.html | 404.html
#public/install(不含install.lock)
#public/qrcode/pay
#public/exception.tpl | favicon.ico | index.php | robots.txt | router.php | upgrade.php (不含upgrade_code.txt、version.txt、.logic)
##public/uploads(全量同步原系统)
##public/json
##public/addons
##public/static(使用cdn,无需打包本目录)
##public/plugins(使用cdn,已使用浏览器替代pdfjs)
##其他空目录结构
22.使用宝塔批量创建系统(格式:xx.speaklaw.cn|/web/oa/xx|0|0|74)
23.新服务器使用 pull.sh 脚本拉取(如不支持则手动上传)all.zip
#!/bin/bash
#---------------------------------------
# step3 拉取原服务器律所生产的数据包
# author: SenSen 1050575278
# date: 2024/02/01
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
# 拉取 all.zip 解压到 /web/oa
cd /web/old || exit
#本批次系统
source /web/shell/oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
exit 1
fi
rm -rf /web/old/*.zip
scp -r root@10.254.20.125:/adown/all125.zip .
scp -r root@10.254.20.126:/adown/all126.zip .
scp -r root@10.254.20.127:/adown/all127.zip .
scp -r root@10.254.20.128:/adown/all128.zip .
unzip all125.zip
unzip all126.zip
unzip all127.zip
unzip all128.zip
24.新服务器使用 deploy.sh 脚本部署系统
#!/bin/bash
#---------------------------------------
# 已安装系统迁移部署程序
# 1. 复制程序 2. 创建虚拟主机配置文件
# author: SenSen 1050575278
# date: 2024/07/18
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#确定版本号
read -p "Enter Version Code to continue : " code
if [ "$code" ]; then
#导入本批次系统
source ./oa_dir.sh
if [ ${#sysDir[@]} -eq 0 ]; then
echo "empty"
exit 1
fi
#源文件 依据系统版本
sourceFile="/web/source/${code}.zip";
#判断文件是否存在
if [ ! -f "${sourceFile}" ];then
echo "Error: Source Code File not found"
exit
fi
#中创目录
lbPath="/www/server/panel/vhost/"
for f in "${sysDir[@]}"
do
#检测目录是否已存在
# if [ -d "${baseDir}${f}" ];then
# echo "Error: ${f} already exists"
# exit
# fi
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
#律所生产的数据 通过file_zip打包后统一上传到本目录
lawfirmData="/web/old/${f}.zip";
#复制
cp -rf "${sourceFile}" ${baseDir}${f}".zip"
#解压 默认解压到当前
unzip -oq ${baseDir}${f} -d ${baseDir}${f}
#删除压缩包
rm -rf ${baseDir}${f}".zip"
#创建虚拟主机配置文件 由于nginx和中创目录不同,批量创建网站后不会被覆盖
cp "/web/shell/thinkphp_conf.conf" ${lbPath}"nginx/${f}.speaklaw.cn.conf"
find ${lbPath}"nginx/${f}.speaklaw.cn.conf" | xargs sed -i "s/sensen/${f}/"
#创建伪静态配置文件
cp "/web/shell/sensen.speaklaw.cn.conf" ${lbPath}"rewrite/${f}.speaklaw.cn.conf"
#进入系统目录
cd ${baseDir}${f}
#替换.env文件内容
find .env | xargs sed -i "s/DB_NAME/${f}/"
#sed -i.bak "12s/DB_NAME/${f}/" .env
#必要目录禁止修改
#chattr -R +i public/index.php
#chattr -R +i app/index/view/login/index.html
#chattr -R +i vendor
#chattr -R +i config
#chattr -R +i app
#chattr -R +i route
#chattr -R +i sensen
#拉取律所生产的数据
cp -rf "${lawfirmData}" ./uploads.zip
unzip -oq uploads.zip
cp -rf ./web/oa/${f}/public/* ./public/
rm -rf uploads.zip
rm -rf ./web
#变更用户组
chown -R www:www ${baseDir}${f}
echo "${curtime} ${f} done" >> /web/deploy.log
done
else
echo "Error: param is empty"
fi
25.使用 mysql_drop.sh 脚本清理不必要的往年日志表(log_2022/2023/2024/city)等
26.使用 create_pg.sh 脚本批量创建瀚高数据库(install_v0默认包含函数、表city、log_2026/2027等,一次性创建所有数据库)
#!/bin/bash
#---------------------------------------
# step3 批量创建数据库 使用 install_v0 模版
# author: SenSen 1050575278
# date: 2024/07/19
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#导入本批次系统
sysDir=()
# PostgreSQL登录信息
PGUSER="sysdba"
PGHOST="localhost"
PGPORT="5866"
for f in "${sysDir[@]}"
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
# 执行SQL文件
psql -U "$PGUSER" -h $PGHOST -p $PGPORT -c "CREATE DATABASE $f template install_v0;"
# 检查状态
if [ $? -eq 0 ]; then
echo "${curtime} db '$f' created successfully." >> /web/create_pg.log
else
echo "${curtime} Failed to create db '$f'" >> /web/create_pg.log
fi
done
27.使用瀚高迁移工具逐个系统进行数据库迁移(谨慎操作,避免覆盖)
28.确认迁移结果无错误
29.检测LB配置是否无误,重载配置
30.变更本批次域名解析(excel)
31.执行 check_tables.sh 脚本检测数据表、主键数量是否正确
#!/bin/bash
#---------------------------------------
# step3 批量创建数据库 使用 install_v0 模版
# author: SenSen 1050575278
# date: 2024/07/19
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#导入本批次系统
sysDir=(xxx xxx)
# PostgreSQL登录信息
echo > /web/check_tables.log
echo > /web/check_sequence.log
# echo > /web/check_primary.log
for f in "${sysDir[@]}"
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
# 执行SQL文件
echo $f >> /web/check_tables.log
psql -U "sysdba" -d "$f" -c "SELECT COUNT(*) FROM pg_catalog.pg_tables WHERE schemaname = 'public';" >> /web/check_tables.log
echo $f >> /web/check_sequence.log
psql -U "sysdba" -d "$f" -c "SELECT COUNT(*) FROM pg_class c JOIN pg_namespace n ON c.relnamespace = n.oid WHERE c.relkind = 'S' AND n.nspname = 'public';" >> /web/check_sequence.log
# echo $f >> /web/check_primary.log
# psql -U "sysdba" -d "$f" -c "SELECT COUNT(*) AS number_of_primary_key_columns FROM information_schema.table_constraints JOIN information_schema.key_column_usage USING (constraint_name, table_schema, table_name) WHERE constraint_type = 'PRIMARY KEY' AND table_schema = 'public';" >> /web/check_primary.log
done
32.使用 check_url.sh 脚本检测各系统是否迁移成功(使用律管系统测试,OA无法互通)
#!/bin/bash
#---------------------------------------
# 检测网站是否正常运行
# author: SenSen 1050575278
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#本批次系统
sysDir=(xxx xxx)
for f in "${sysDir[@]}"
do
# URL to check
URL="http://${f}.baidu.com/api/check_sys_status"
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
# Fetch the content
CONTENT=$(curl --silent "$URL")
if echo "$CONTENT" | grep -q "success"; then
echo "${curtime} ${f} running." >> /web/check_url.log
elif echo "$CONTENT" | grep -q "no_name"; then
echo "${curtime} ${f} not get name." >> /web/check_url.log
else
echo "${curtime} ${f} not running." >> /web/check_url.log
fi
done
33.开启数据库日志
34.测试指定批次数据库备份、恢复脚本 pg_dump.sh pg_dumpall.sh pg_basebackup.sh pg_restore.sh
#!/bin/bash
#---------------------------------------
# pg数据库备份
# author: SenSen 1050575278
# date: 2024/02/01
# crontab 定时执行 / 使用独立脚本同步oss
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
# 配置变量
DB_USER='sysdba'
# todo 调整为每分钟备份一次
# 1. 获取当前数据库目录;2. 获取今日未备份的1个库;3. 执行备份
#系统目录
#sysDir=`ls /web/oa`
#source /web/shell/get_database_list.sh
sysDir=(`cat /web/database_list.txt`)
nowDay=`date +"%Y%m%d"`
for f in "${sysDir[@]}"
do
nowTime=`date +"%Y/%m/%d %H:%M:%S"`
BACKUP_PATH='/nfs/lulvtong/database'
BACKUP_PATH=${BACKUP_PATH}/${f}
#如果今日已备份则跳过
# if [ -f "${BACKUP_PATH}/${f}_${nowDay}.backup.gz" ];then
# echo "${nowTime} Backup of ${f} already exists." >> /web/pg_dump.log
# continue
# fi
# 创建备份目录
if [ ! -d "${BACKUP_PATH}" ];then
mkdir -p "$BACKUP_PATH"
fi
# 执行备份 todo 排除指定的表
/opt/highgo/hgdb-see-4.5.8/bin/pg_dump -U "$DB_USER" -Fc --exclude-table-data=log_2025 --exclude-table-data=log_2026 --exclude-table-data=log_2027 --exclude-table-data=city "${f}" > "$BACKUP_PATH/${f}_${nowDay}.backup"
# 压缩备份文件
#gzip "$BACKUP_PATH/${f}_${nowDay}.backup"
# 删除多余的文件 仅保留最近30天
declare -i ReservedNum=30
# 查询当前文件夹下文件数量
declare -i FileNum=$(ls -l $BACKUP_PATH/* |grep ^- |wc -l)
#旧数据在上,从head开始删除
while(($FileNum > $ReservedNum))
do
OldFile=$BACKUP_PATH/$(ls -rt $BACKUP_PATH/| head -1)
echo "Delete File:" $OldFile >> /web/pg_dump.log
rm -rf $OldFile
let "FileNum--"
done
# 输出备份完成信息
echo "${nowTime} Backup of ${f} completed." >> /web/pg_dump.log
done
#!/bin/bash
#---------------------------------------
# pg数据库恢复
# author: SenSen 1050575278
# date: 2024/02/01
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#指定恢复日期
read -p "Tips! Enter backup file date (like '20240201') to continue : " nowDay
# 配置变量
DB_USER='sysdba'
PGHOST="localhost"
PGPORT="5866"
BACKUP_PATH='/nfs/lulvtong/database'
#系统目录
#sysDir=`ls /web/oa`
sysDir=(t005)
for f in "${sysDir[@]}"
do
nowTime=`date +"%Y/%m/%d %H:%M:%S"`
cd ${BACKUP_PATH}/${f}
nowFile="${f}_${nowDay}"
if [ ! -f "${nowFile}.backup.gz" ]; then
echo "${nowFile} not found"
break
fi
#删除数据
#dropdb -U "$DB_USER" ${f}
#创建数据库 使用模版仅包含函数
psql -U "$DB_USER" -h $PGHOST -p $PGPORT -c "CREATE DATABASE $f;"
# 解压
#gunzip -cf "${nowFile}.backup.gz" > "${nowFile}.backup"
# 执行恢复 -C 恢复前先创建
pg_restore -U "$DB_USER" -d ${f} "${nowFile}.backup"
# 输出备份完成信息
echo "${nowTime} Restore of ${f} completed." >> /web/pg_restore.log
done
#!/bin/bash
file="/web/database_list.txt"
# 使用psql获取数据库列表,并去除空白行
formatted_databases=$(psql -U 'sysdba' -lqt | cut -d \| -f 1 | sed '/^\s*$/d')
formatted_databases=$(echo "$formatted_databases" | tr -d ' ')
# 将换行符替换为空格
formatted_databases=$(echo "$formatted_databases" | tr '\n' ' ')
# 输出结果
echo "$formatted_databases" > "$file"
# 删除指定值
sed -i "s/ highgo//g" "$file"
sed -i "s/ install_v0//g" "$file"
sed -i "s/ install_v1//g" "$file"
sed -i "s/ install_v2//g" "$file"
sed -i "s/ install_v3//g" "$file"
sed -i "s/ template0//g" "$file"
sed -i "s/ template1//g" "$file"
35.全部迁移完成后,新服务器使用 create.sh 脚本搭建未安装的律所系统
36.服务器部署相关计划任务
37.将空闲域名解析到新服务器
38.使用 clear.sh 脚本清理原系统临时文件(主要清理临时文档)
#!/bin/bash
#---------------------------------------
# 清理系统临时文件
# author: SenSen 1050575278
# date: 2021/10/10
#---------------------------------------
read -p "Warning! Enter 'y' to continue : " input
#判断是否存在参数,不存在则取消
if [ "$input" == 'y' ] || [ "$input" == 'Y' ]; then
#所在目录
dir='/web/oa/'
#自动获取系统目录文件 仅可包含oa系统文件
sysDir=`ls /web/oa`
# sysDir=(t001)
#排除目录
excluded=()
for f in ${sysDir}
do
#获取当前时间
curtime=`date +"%Y/%m/%d %H:%M:%S"`
#排除指定目录
if [[ ${excluded[@]/${f}/} != ${excluded[@]} ]]; then
echo "jump"
continue
fi
#进入目录
cd ${dir}${f}
#执行对应操作
#清除runtime 不包含log session等 todo 支持删除缓存或所有
rm -rf runtime/*
#清除uploads
rm -rf public/phpExcel/*
rm -rf public/qrcode/pay/*
rm -rf public/uploads/doc/case/*
rm -rf public/uploads/doc/consult/*
rm -rf public/uploads/doc/dczm/*
rm -rf public/uploads/doc/gzrz/*
rm -rf public/uploads/doc/hjdj/*
rm -rf public/uploads/doc/jsx/*
rm -rf public/uploads/doc/lsh/*
rm -rf public/uploads/doc/yjs/*
rm -rf public/uploads/doc/report_affair/*
rm -rf public/uploads/doc/report_consultant/*
rm -rf public/uploads/doc/report_cooperate/*
rm -rf public/uploads/doc/report_internal/*
rm -rf public/uploads/doc/report_month/*
rm -rf public/uploads/doc/report_year/*
#清除其他
rm -rf public/uploads/level/doc/*
rm -rf public/uploads/prove/*
rm -rf public/uploads/qrcode/*
rm -rf public/uploads/report/*
rm -rf public/uploads/tmp/*
echo "${curtime} ${f} done"
done
else
echo "Error: invalid input"
fi
39.调整数据库备份定时任务包含log表,全量备份并下载(永久存档)
40.使用 backup_all.sh 备份原服务器完整数据到本地(永久存档)
#!/bin/bash
#---------------------------------------
# 备份oa数据到指定目录下
# author: SenSen 1050575278
# date: 2022/04/13
# todo 调整为增量备份(当前数据量有限,暂不处理)
# 注意:所有脚本需测试后方可使用!!!
#---------------------------------------
#导入本批次系统
source ./oa_dir.sh
#所在目录
dist='/bak_oa/'
#指定天开始备份 todo 调整为指定天进行全量备份
backDay=(01 09 22 28)
dayNum=`date +"%d"`
#单次备份的oa数量
perNum=10
day=`date +"%Y%m%d"`
dayFile='/backup/'${day}
#判断目录是否存在
if [ ! -d "$dist" ]; then
mkdir "$dist"
fi
num=0
tmp=()
for i in "${backDay[@]}"
do
if [[ "${i}" == "${dayNum}" ]]; then
if [ ! -f "${dayFile}" ]; then
touch ${dayFile}
fi
#获取指定数量的未备份oa
for f in ${sysDir}
do
#判断是否今日已执行备份
if [ `grep -c ${f} ${dayFile}` -eq 0 ];then
#记入到新数组
tmp[${num}]=${f}
((num++))
if [ ${num} -eq ${perNum} ]; then
break
fi
fi
done
#执行备份
for f in "${tmp[@]}"
do
#判断是否今日已执行备份
curtime=`date +"%Y/%m/%d %H:%M:%S"`
cd ${baseDir}
# todo 需备份一份完整数据
tar -zcf ${dist}${f}.tar.gz --exclude=app --exclude=addons --exclude=config --exclude=extend --exclude=route --exclude=runtime --exclude=sensen --exclude=upgrade --exclude=vendor --exclude=public/addons --exclude=public/json --exclude=public/plugins --exclude=public/static ${f}
if [ $? -eq 0 ]; then
echo "${f}" >> ${dayFile}
echo "${curtime} ${f} done" >> /web/backup_all.log
fi
done
fi
done
41.确定运行稳定后,清理原服务器全部数据(数据库及源码文件)