zlwu 1e6dcb164c 提交 1 månad sedan
..
sync_oracle f231386592 提交 1 månad sedan
sync_sql 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本 2 månader sedan
3.在认证中间库建立表.sql 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本 2 månader sedan
README.md f231386592 提交 1 månad sedan
create_tables.sh 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本 2 månader sedan
data.conf 1e6dcb164c 提交 1 månad sedan
data.conf.prod f231386592 提交 1 månad sedan
db_helper.py 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本 2 månader sedan
gen_student_export_excel.py f231386592 提交 1 månad sedan
oracle_gen_merge.py f231386592 提交 1 månad sedan
sync_user_to_sso.sh f231386592 提交 1 månad sedan
verify_sync.sh f231386592 提交 1 månad sedan
字段映射说明.md f231386592 提交 1 månad sedan
建表脚本_mysql.sql 334bd8742e feat: 新增统一身份认证用户数据定时同步脚本 2 månader sedan

README.md

统一身份认证用户数据同步

将校园管理系统用户/组织数据定时同步到认证中间库,供第三方统一身份认证平台拉取。

目录结构

用户信息同步统一身份认证/
├── 3.在认证中间库建立表.sql   # 第三方原始 Oracle 建表脚本(勿修改)
├── 建表脚本_mysql.sql          # MySQL 适配建表脚本(本地测试用)
├── data.conf                   # 研发环境配置
├── data.conf.prod              # 生产环境配置(Oracle 目标库)
├── create_tables.sh            # 创建中间表
├── sync_user_to_sso.sh         # 主同步脚本
├── verify_sync.sh              # 同步结果校验(支持 MySQL / Oracle)
├── db_helper.py                # MySQL 辅助
├── oracle_gen_merge.py         # 从 MySQL 生成 Oracle MERGE SQL(生产)
├── sync_sql/sync_all_mysql.sql # MySQL 同步 SQL
├── sync_oracle/merge_all.sql   # Oracle 说明(实际由 gen 脚本生成)
├── 字段映射说明.md
└── logs/                       # 运行日志(自动创建)

快速开始(研发环境)

cd 用户信息同步统一身份认证

# 1. 创建中间表(仅新增6张表,不修改已有表)
chmod +x *.sh
./create_tables.sh

# 2. 执行一次全量同步
./sync_user_to_sso.sh --full --once

# 3. 校验同步结果
./verify_sync.sh

定时运行(推荐:守护进程 + 时间窗,无需 crontab)

生产配置 SYNC_WINDOW_ENABLED=true 时:脚本每小时醒来一次,仅在 0 点~1 点之间真正执行同步,其余时段跳过。手动 --once / --full --once 不受时间窗限制。

# 后台常驻(服务器重启后需重新拉起,或配合 systemd)
source /etc/profile.d/oracle.sh
cd /path/to/用户信息同步统一身份认证
nohup ./sync_user_to_sso.sh >> logs/daemon.log 2>&1 &

# 查看
ps -ef | grep sync_user_to_sso | grep -v grep
tail -f logs/daemon.log

相关配置(data.conf / data.conf.prod):

配置项 说明
CYCLE_INTERVAL 醒来间隔秒数,默认 3600
SYNC_WINDOW_ENABLED true 开启时间窗
SYNC_WINDOW_START_HOUR 开始小时(含),默认 0
SYNC_WINDOW_END_HOUR 结束小时(不含),默认 1,即 00:00~00:59

也可改用 crontab(可选):

10 0 * * * source /etc/profile.d/oracle.sh; /path/to/sync_user_to_sso.sh --once >> /path/to/logs/cron.log 2>&1

生产部署

  1. 复制 data.conf.prod 为 data.conf 或指定 --config=data.conf.prod
  2. 填写源库(校园系统 MySQL)和目标库(认证中间库 Oracle)连接信息
  3. 目标库使用第三方提供的 3.在认证中间库建立表.sql 在 Oracle 中建表
  4. 确保服务器已安装 Instant Client(basic + sqlplus),并配置:

    export ORACLE_HOME=/usr/lib/oracle/23/client64
    export PATH=$ORACLE_HOME/bin:$PATH
    export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH
    
    1. 依赖:python3 + pymysql(pip3 install pymysql)
    2. 全量同步一次并校验: bash source /etc/profile.d/oracle.sh ./sync_user_to_sso.sh --full --once ./verify_sync.sh
  5. 后台常驻(时间窗内每天自动同步一次):

    source /etc/profile.d/oracle.sh
    nohup ./sync_user_to_sso.sh >> logs/daemon.log 2>&1 &
    

    配置说明

    配置项 说明
    SOURCEDB* 源库(校园管理系统,只读)
    TARGETDB* 目标库(认证中间库,读写)
    TARGET_DB_TYPE mysql(测试)或 oracle(生产)
    SYNC_MODE full 全量 / incremental 增量
    CYCLE_INTERVAL 守护进程醒来间隔秒数,默认 3600
    SYNC_WINDOW_ENABLED 是否仅在指定小时段同步(守护模式)
    SYNC_WINDOW_START_HOUR / END_HOUR 时间窗,默认 0~1(每天 0 点档)