反向迁移

功能介绍

反向迁移是指用户将源端数据库迁移到目标数据库,应用切到目标数据库后,再将目标端新产生的数据迁移回源端。反向迁移可满足用户业务迁移逃生的诉求,保持源端、目标端两个库并行运行,在目标端数据库出问题后应用能及时切回源端数据库。openGauss提供reverse-migration工具,将openGauss数据库迁移至MySQL数据库,满足反向迁移要求。

原理简介

在openGauss端开启逻辑复制,使用JDBC获取逻辑解码,对逻辑解码进行SQL解析,通过多线程并发迁移到MySQL端。

特性优势

利用sysbench对openGauss进行压测,在100张表100个线程并发情况下,针对insert场景,整体在线迁移性能可达3w tps。

环境准备

ARM+openEuler 20.03 或 X86+CentOS 5.7

操作步骤

  1. 修改配置文件,配置文件的路径为config.yaml。

    1. og_conn:
    2. host: "openGauss_ip"
    3. port: "5432"
    4. user: "user"
    5. password: "password"
    6. database: "postgres"
    7. charset: "utf8"
    8. driver: "org.opengauss.Driver"
    9. ASSUME_MIN_SERVER_VERSION: "9.4"//逻辑复制必备属性
    10. REPLICATION: "database" //逻辑复制必备属性
    11. PREFER_QUERY_MODE: "simple"//逻辑复制必备属性
    12. slot:
    13. name: "replication_slot"//逻辑复制槽名称
    14. include-xids: false//解码数据是否包含xid信息
    15. skip-empty-xacts: true//解码事务是否包含空事务
    16. waitLSN: ""//逻辑复制槽开启的lsn
    17. parallel-decode-num: 20//并行解码个数,最大20
    18. white-table-list: ""//库表白名单
    19. standby-connection: false//强制备机解码
    20. decode-style: "j"//解码格式
    21. decoding: "mppdb_decoding"//创建逻辑复制槽的工具
    22. runnable_num: 1//并行回放个数
    23. mysql:
    24. driver: "com.mysql.cj.jdbc.Driver"
    25. host: "mysql_ip"
    26. port: "3306"
    27. user: "user"
    28. password: "password"
    29. database: "database
  2. 编译命令。

    1. mvn clean package
  3. 运行命令。

    1. java -jar ./reverse-migration-mysql-1.0-SNAPSHOT.jar start/create/drop
  4. 高性能运行命令。

    在Kunpeng-920 2p openEuler机器上执行如下命令。

    1. numactl -c 0 -31 -m 0 java -Xms15G -Xmx25Gs -jar ./reverse-migration-mysql-1.0-SNAPSHOT.jar start/create/drop

卸载工具

reverse-migration工具是一个单独的Jar包,删除对应的Jar包即可卸载该工具。

注意事项

反向迁移依赖于openGauss的逻辑解码能力,相关约束请参见逻辑解码概述