暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

DataKit6.0将MySQL8.0迁移至openGauss6.0

openGauss 2024-11-13
319

本文档是基于centos7.9操作系统部署Datakit 6.0,Datakit 6.0、openGauss6.0和PortalControl6.0在一台服务器上,openGauss6.0和MySQL8.0为非容器化部署。

迁移需求

将源库的dataexchange数据迁移至目标库的dataexchange中,具体信息如下:


ip os user/password

db version

db user/password

db port

db name

源库

192.168.3.191
root/top@12345

mysql8.0.31

root/123456

3306

digital

目标库

192.168.3.175

root/top@12345

openGauss6.0.0

root/Topnet_123

15400

digital

迁移前准备

注意事项

  • 当前平台运行依赖于openJDK11

  • 平台使用的数据库,当前仅支持openGauss数据库,并且需要提前创建database。

  • 需要将部署服务器IP配置在平台使用的数据库openGauss的白名单列表中。

支持的服务器系统

openEuler 20.3LTS(x86_x64,ARM)

centos7.x(x86_x64)

注:经验证,在openEuler 22.03 LTS可以完美运行。

    [omm@top175 ~]$ cat etc/os-release
    NAME="CentOS Linux"
    VERSION="7 (Core)"
    ID="centos"
    ID_LIKE="rhel fedora"
    VERSION_ID="7"
    PRETTY_NAME="CentOS Linux 7 (Core)"
    ANSI_COLOR="0;31"
    CPE_NAME="cpe:/o:centos:centos:7"
    HOME_URL="https://www.centos.org/"
    BUG_REPORT_URL="https://bugs.centos.org/"


    CENTOS_MANTISBT_PROJECT="CentOS-7"
    CENTOS_MANTISBT_PROJECT_VERSION="7"
    REDHAT_SUPPORT_PRODUCT="centos"
    REDHAT_SUPPORT_PRODUCT_VERSION="7"

    关闭防火墙

      systemctl stop firewalld
      systemctl disable firewalld
      systemctl status firewalld

      jdk升级至11版本

      jdk下载地址:https://download.oracle.com/otn/java/jdk/11.0.22+9/8662aac2120442c2a89b1ee9c67d7069/jdk-11.0.22_linux-x64_bin.tar.gz?AuthParam=1707028918_ba497c321eb5782bbabe489644d765da

        --当前JDK版本
        [root@top175 ~]# java -version
        java version "1.8.0_241"
        Java(TM) SE Runtime Environment (build 1.8.0_241-b07)
        Java HotSpot(TM) 64-Bit Server VM (build 25.241-b07, mixed mode)


        [root@top175 ~]# rpm -qa |grep jdk
        copy-jdk-configs-3.3-10.el7_5.noarch


        yum -y remove copy-jdk-configs.noarch




        --压缩安装包
        tar -zxvf opt/jdk-11.0.22_linux-x64_bin.tar.gz -C usr/local
        ln -s usr/local/jdk-11.0.22/bin/java usr/bin/java


        --环境变量导入
        vi etc/profile


        export JAVA_HOME=/usr/local/jdk-11.0.22
        export JRE_HOME=${JAVA_HOME}/jre
        export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib:$CLASSPATH
        export JAVA_PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin
        export PATH=$PATH:${JAVA_PATH}


        --环境变量生效
        source etc/profile


        --确认安装是否成功
        [root@top175 jdk-11.0.22]# java -version
        java version "11.0.22" 2024-01-16 LTS
        Java(TM) SE Runtime Environment 18.9 (build 11.0.22+9-LTS-219)
        Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.22+9-LTS-219, mixed mode)

        或采用rpm安装方式升级java版本

          # 检查rpm -qa | grep java
          rpm -qa | grep jdk
          # 卸载
          rpm -qa | grep java | xargs rpm -e --nodeps
          rpm -qa | grep jdk | xargs rpm -e --nodeps
          # 安装
          rpm -ivh jdk-11.0.17_linux-x64_bin.rpm
          # 验证
          [root@test01 tmp]# java -version
          java version "11.0.17" 2022-10-18 LTSJava(TM) SE Runtime Environment 18.9 (build 11.0.17+10-LTS-269)Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.17+10-LTS-269, mixed mode)

          opengauss配置参数更改

            --更改配置文件
            vi topsoft/huawei/install/data/dn/postgresql.conf
            更改前
            listen_addresses = 'localhost'
            wal_level = hot_standby # minimal, archive, hot_standby or logical
            更改后
            listen_addresses = '*'
            wal_level = logical # minimal, archive, hot_standby or logical


            vi topsoft/huawei/install/data/dn/pg_hba.conf
            添加
            host all all 0.0.0.0/0 md5


            --重启库
            gs_om -t stop
            gs_om -t start

            运维工具DataKit介绍

            openGauss官方文档:Data Kit (osinfra.cn)

            DataKit使用文档和开发文档:content/zh/docs/ToolandCommandReference/DataKit.md · openGauss/docs - Gitee.com

            功能介绍

            openGauss的开发运维涉及到很多复杂操作,DataKit提供了一个可视化操作的运维界面,可以帮助用户管理,安装,监控运维自己的openGauss数据库以及对应的物理机资源。

            DataKit是一个以资源(物理机,数据库)为底座的开发运维工具,将上层的开发运维工具插件化,各插件之间相互独立,方便用户按需引入。各插件围绕DataKit的资源中心进行扩展开,完成数据库的运维,监控,迁移,开发,建模等复杂的操作。

            Datakit安装部署在服务器上,是一个自动化运维的平台。可以部署不同类型的插件来实现不同的功能,是跟随opengauss6.0发布的新软件,也可以用来监控小于6.0的opengauss版本。

            原理简介

            DataKit是基于spring-brick开发的插件化的工具,前台使用vue,后台使用spring-bot技术栈。DataKit基座提供资源管理,安全中心,日志中心等基础的公共能力,具体的数据库安装,运维,监控,数据迁移等能力是基于spring-brick开发的插件工具,可以灵活的在基座上面安装卸载,方便客户按需使用。

            特性优势

            本项目是基于Web的openGauss的可视化的一体化工具:DataKit,目的是方便客户使用和管理openGauss可视化工具,可以为客户降低openGauss数据库安装使用门槛,做到安全中心管理,插件管理,以及其它功能包括一键化部署、卸载、组件化安装、多版本升级和日常运维。

            运维工具DataKit安装

            jar包下载有以下两种方式

            1.通过openGauss官网下载:https://www.opengauss.org/zh/download/

            2.通过opengauss官方gitee仓库下载:

            仓库地址:https://gitee.com/opengauss/openGauss-workbench

            openGauss官方gitee仓库的安装包一般会比openGauss官网的安装包版本高,包含最新功能和基础修复。

            由于datakit版本需要和下文中的迁移套件有版本依赖关系,所以

            本文档采用opengauss官网下载最新版本的安装包:https://opengauss.obs.cn-south-1.myhuaweicloud.com/6.0.0/tools/Datakit/Datakit-6.0.0.tar.gz

            和opengauss官网下载迁移套件:https://opengauss.obs.cn-south-1.myhuaweicloud.com/6.0.0/tools/centos7/PortalControl-6.0.0-x86_64.tar.gz

            迁移套件gitee仓库地址:https://gitee.com/opengauss/openGauss-migration-portal

            上传并解压Datakit安装包

            下载后安装包上传至/home/omm/soft目录下

              --创建DataKit安装包存放位置目录
              mkdir -p home/omm/soft


              --查看并解压DataKit安装包
              [root@top175:/root]$ cd home/omm/soft
              [root@top175:/home/omm/soft]$ ls -l
              total 878700
              -rw-r--r-- 1 root root 899781101 Oct 15 18:17 Datakit-6.0.0.tar.gz


              --查看解压后的内容
              [root@top175:/home/omm/soft]$ ls -l
              total 985604
              -rw-r--r-- 1 root root 1379 Sep 29 10:16 application-temp.yml
              -rw-r--r-- 1 root root 320 Sep 29 10:06 build_commit_id.log
              -rw-r--r-- 1 root root 899781101 Oct 15 18:17 Datakit-6.0.0.tar.gz
              drwxr-xr-x 2 root root 4096 Sep 29 10:16 doc
              -rw-r--r-- 1 root root 109445199 Sep 29 10:16 openGauss-datakit-6.0.0.jar
              -rw-r--r-- 1 root root 1677 Sep 29 10:16 run.sh
              drwxr-xr-x 2 root root 4096 Sep 29 10:16 visualtool-plugin
              [root@top175:/home/omm/soft]$ ls -l visualtool-plugin/
              total 834392
              -rw-r--r-- 1 root root 82833727 Sep 29 10:16 alert-monitor-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 58341751 Sep 29 10:16 base-ops-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 63093773 Sep 29 10:16 compatibility-assessment-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 32585208 Sep 29 10:16 data-migration-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 64090612 Sep 29 10:16 MetaTune-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 37983131 Sep 29 10:16 monitor-tools-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 42026528 Sep 29 10:16 oauth-login-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 247163511 Sep 29 10:16 observability-instance-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 45877188 Sep 29 10:16 observability-log-search-6.0.0-repackage.jar
              -rw-r--r-- 1 root root 81130700 Sep 29 10:16 observability-sql-diagnosis-6.0.0-repackage.jar
              -rw-r--r-- 1 root root  99260679 Sep 29 10:16 webds-plugin-6.0.0-repackage.jar

              创建DataKit工作目录

                mkdir -p /ops/server/openGauss-visualtool/logs /ops/server/openGauss-visualtool/config/visualtool-plugin /ops/ssl /ops/files

                上传DataKit的jar包

                  cd home/omm/soft
                  cp openGauss-datakit-6.0.0.jar /ops/server/openGauss-visualtool/

                  配置文件application-temp.yml

                  上传本地application-temp.yml文件到/ops/server/openGauss-visualtool/config/目录下,并修改文件中的数据库ip、port、database、dbuser、dbpassword,test-while-idle配置为false。

                  此处使用openGauss作为后台数据库。

                    cd ops/server/openGauss-visualtool/config
                    vi application-temp.yml
                    :%s#/ops#/topsoft/server/DataKit5#g

                    修改前

                      --查看原配置文件内容
                      cat application-temp.yml
                      system:
                      # File storage path
                      defaultStoragePath: ops/files
                      # Whitelist control switch
                      whitelist:
                      enabled: false
                      server:
                      port: 9494
                      ssl:
                      key-store: ops/ssl/keystore.p12
                      key-store-password: 123456
                      key-store-type: PKCS12
                      enabled: true
                      servlet:
                      context-path:
                      logging:
                      file:
                      path: ops/logs/
                      spring:
                      datasource:
                      type: com.alibaba.druid.pool.DruidDataSource
                      driver-class-name: org.opengauss.Driver
                      url: jdbc:opengauss://ip:port/database?currentSchema=public&batchMode=off
                      username: dbuser
                      password: dbpassword
                      druid:
                      test-while-idle: true
                      test-on-borrow: true
                      validation-query: "select 1"
                      validation-query-timeout: 10000
                      connection-error-retry-attempts: 0
                      break-after-acquire-failure: true
                      max-wait: 6000
                      keep-alive: true
                      max-active: 30
                      min-evictable-idle-time-millis: 600000
                      management:
                      server:
                          port: 9494

                      更改后

                        cat application-temp.yml
                        system:
                        # File storage path
                        defaultStoragePath: ops/files
                        # Whitelist control switch
                        whitelist:
                        enabled: false
                        server:
                        port: 9494
                        ssl:
                        key-store: ops/ssl/keystore.p12
                        key-store-password: 123456
                        key-store-type: PKCS12
                        enabled: true
                        servlet:
                        context-path:
                        logging:
                        file:
                        path: ops/logs/
                        spring:
                        datasource:
                        type: com.alibaba.druid.pool.DruidDataSource
                        driver-class-name: org.opengauss.Driver
                        url: jdbc:opengauss://192.168.3.175:15400/datakit?currentSchema=public&batchMode=off
                        username: datakit
                        password: Topnet_1234
                        druid:
                        test-while-idle: true
                        test-on-borrow: true
                        validation-query: "select 1"
                        validation-query-timeout: 10000
                        connection-error-retry-attempts: 0
                        break-after-acquire-failure: true
                        max-wait: 6000
                        keep-alive: true
                        max-active: 30
                        min-evictable-idle-time-millis: 600000
                        management:
                        server:
                            port: 9494

                        生成ssl文件

                        root用户下操作

                        使用keytool工具生成密钥,需要注意的是keytool -genkey命令用于创建SSL文件(包括密钥对和证书),并且它与 JDK (Java Development Kit)是有关系的。keytool 是JDK提供的一个工具,用于管理密钥库和证书,用于加密和身份验证等安全通信。而我们前面提到该平台依赖JDK11环境,所以这里使用JDK11来创建密钥文件。

                        修改并执行如下命令生成密钥信息。修改-storepass参数值与application.yml配置文件中的key-store-password值保持一致,默认时两者均为123456;-keystore路径值与配置文件application-temp.yml中的key-store路径值保持一致。

                          su - root


                          keytool -genkey -noprompt \
                          -dname "CN=opengauss, OU=opengauss, O=opengauss, L=Beijing, S=Beijing, C=CN"\
                          -alias opengauss\
                          -storetype PKCS12 \
                          -keyalg RSA \
                          -keysize 2048 \
                          -keystore ops/ssl/keystore.p12 \
                          -validity 3650 \
                          -storepass 123456


                          需要修改的参数:
                          -keystore ops/ssl/keystore.p12 #位置,视情况修改
                          -storepass 123456  #123456密码,视情况修改    

                          注意:
                          storepass与配置文件application-temp.yml中的key-store-password保持一致
                          keystore路径与配置文件application-temp.yml中的key-store路径保持一致

                          创建DataKit运行用户

                            groupadd ops
                            useradd -m -g ops ops
                            chown -R ops:ops /ops

                            启动与日常运维

                              --切换目录
                              su - ops
                              cd ops/server/openGauss-visualtool


                              --启动应用 -Xms2048m -Xmx4096m可视情况更改
                              nohup java -Xms1024m -Xmx2048m -jar /ops/server/openGauss-visualtool/openGauss-datakit-6.0.0.jar --spring.profiles.active=temp >/ops/server/openGauss-visualtool/logs/visualtool-main.out 2>&1 &

                              登录datakit平台

                              启动成功后,可通过浏览器界面访问datakit平台

                              登录地址:https://192.168.3.175:9494/,其中192.168.3.175为实际ip

                              初始用户:admin

                              初始密码:admin123

                              首次登录需修改初始密码

                              admin1234

                              迁移步骤

                              前置操作

                              源库检查用户或更改加密方式

                              该步骤必须做,不然后面启动迁移报错

                                --源库检查用户加密方式
                                select host,user,plugin,authentication_string from user;


                                输出如下:
                                host user plugin authentication_string
                                % bf_ops caching_sha2_password $A$005$m1M2%4SS8A^'Nfo07fFqb8cifguGTcMjWBJJuCdpwp1ZqpCDYK9PfpGQZv0
                                % root caching_sha2_password $A$005$C%yk~vR %\WZWXZoGExiNd.FaHld2muR3pevPW.w5E3Kc85lHOeYMPOYKB
                                localhost mysql.infoschema caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                localhost mysql.session caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                localhost mysql.sys caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                localhost  root              caching_sha2_password  $A$005$9kTQi#bH2:"~@kDCvVlJDpQSDcO4iSfrdbSgACVUSDon1vlf40HZiYdqD

                                如果不是,按以下语句进行更改加密方式

                                  --配置文件中[mysqld]下增加以下参数并重启
                                  [mysqld]
                                  default_authentication_plugin=mysql_native_password


                                  --重启mysql服务
                                  systemctl restart mysqld
                                  systemctl status mysqld


                                  --源库中更改用户加密方式
                                  ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
                                  ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
                                  FLUSH PRIVILEGES;

                                  目标库准备

                                  目标库更改参数

                                  控制是否允许创建user@host、'user'@'host'之类的用户并兼容mysql的user@host认证鉴权,对兼容mysql
                                  的user@host进行认证时,需要在配置文件postgresql.conf中设为on。
                                  取值范围:布尔型 默认值:off

                                    --登录数据库
                                    gsql -d postgres -p 15400


                                    --查看参数 默认为off
                                    show b_compatibility_user_host_auth;


                                    openGauss=# show b_compatibility_user_host_auth;
                                    b_compatibility_user_host_auth
                                    --------------------------------
                                    off
                                    (1 row)


                                    --配置文件中增加参数
                                    永久性修改b_compatibility_user_host_auth为on
                                    su - omm
                                    vi topsoft/huawei/install/data/dn/postgresql.conf
                                    增加
                                    b_compatibility_user_host_auth=on


                                    --重启数据库
                                    gs_om -t stop
                                    gs_om -t start


                                    --查看参数是否生效
                                    gsql -d postgres -p 15400
                                    show b_compatibility_user_host_auth;


                                    openGauss=# show b_compatibility_user_host_auth;
                                    b_compatibility_user_host_auth
                                    --------------------------------
                                    on
                                    (1 row)

                                    目标库创建业务用户和数据库(重要)

                                    openGauss支持A、B、C和PG四种兼容模式,分别表示兼容Oracle、MySQL、Teradata(TD)和PostgreSQL。但是C目前已经放弃支持。因此常用的取值是A、B、PG,不同兼容模式下的语法行为存在一定差异,默认为A兼容模式。

                                    迁移前openGauss创建与对象digital同名的用户,并赋予一定的权限。

                                    注意每次创建库时视情况设置兼容模式。

                                      --登录openGauss库
                                      su - omm
                                      gsql -d postgres -p 15400


                                      --创建openGauss连接用户
                                      create user root with password 'Topnet_123';
                                      grant all privileges to root;


                                      --创建digital数据库
                                      create database digital ENCODING = 'UTF8' dbcompatibility = 'B' owner root;
                                      grant all privileges on database digital to root;


                                      --切换到digital数据库下
                                      \c digital root


                                      --创建和源库同名的迁移对象专用用户(兼容MySQL语法) 必须是反引号不是单引号,必须创建不然后面迁移过程中视图迁移报错
                                      set b_compatibility_user_host_auth=on;
                                      create user `root`@`%` with password 'Topnet_123';
                                      grant all privileges to `root`@`%`;

                                      注意:

                                      • 通过CREATE USER创建的用户,默认具有LOGIN权限。

                                      • 通过CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的SCHEMA。

                                      • 系统管理员在普通用户同名schema下创建的对象,所有者为schema的同名用户(非系统管理员)。

                                      创建数据源

                                      DataKit实例管理中创建数据源
                                      MySQL和openGauss数据库启动后可在datakit平台–资源中心–实例管理中创建对应的数据源

                                      配置源端数据源

                                      配置目标数据源

                                      创建完成后DataKit平台界面会显示对应的数据源

                                      服务器管理配置

                                      添加服务器

                                      DataKit服务器管理中添加服务器
                                      在datakit平台–资源中心–服务器管理中添加对应的服务器,被管理的机器才可用于安装迁移插件,本文档用目标openGauss服务器作为迁移插件的执行机
                                      请注意这里密码为root用户的密码,并需要勾选记住密码,否则将不能用作迁移插件的执行机。

                                      添加服务器后即可看到执行机,如下:

                                      新增用户

                                      1.操作系统上创建用户

                                        --操作系统上创建用户
                                        useradd top
                                        passwd top

                                        2.Datakit中添加用户

                                        问题处理
                                        添加用户提示报错
                                          --问题描述
                                          添加用户提示报错,且一直转圈转圈


                                          --原因
                                          操作系统上未创建用户


                                          --解决办法
                                          操作系统上需事先创建用户

                                          安装data-migration插件

                                          如果不安装,左侧目录树里没有数据迁移菜单。这个地方设计的不合理,明明服务器上解压安装后已经有这些插件了为啥还让将文件拖入或上传安装?为啥不是在线安装或者是手动安装?无奈将jar包下载到本地,再上传安装,时间游bd戏浪费了。

                                          将服务器上/home/omm/soft/visualtool-plugin目录下的data-migration-6.0.0-repackage.jar插件下载到本地。

                                          上传data-migration-6.0.0-repackage.jar插件并安装,安装后会将插件复制到/ops/server/openGauss-visualtool目录下

                                          迁移配置

                                          MySQL迁移全流程包括全量迁移、全量校验、增量迁移、增量校验和反向迁移五个阶段,下面将详细介绍迁移全流程。

                                          创建迁移任务

                                          在Datakit平台数据迁移–迁移任务中心–创建迁移任务,选定源端数据库(source_db)和目的端数据库(target_db),添加子任务,迁移过程模式选择在线模式。

                                          迁移模式包括离线和在线两种模式,其中离线模式包括全量迁移和全量校验两个阶段,在线模式包括全量迁移、全量校验、增量迁移、增量校验、反向迁移和五个阶段,本次实践选择在线模式,囊括业务割接的整个过程。

                                          详细描述如下:

                                          选择迁移源库和目的库

                                          (1)在Datakit平台迁移任务中心–创建数据迁移任务

                                          (2)选定源端数据库(source_db)和目的端数据库(target_db),添加子任务,迁移过程模式选择在线模式,这个地方需注意选择最大页数或者逐页全选。

                                          配置迁移过程参数

                                          可直接使用默认参数,无需修改,或者根据实际自定义

                                          下载PortalControl插件

                                          gs_rep_portal是一个用Java编写的,在linux系统上运行的,集成了全量迁移、增量迁移、反向迁移、数据校验的工具。gs_rep_portal支持以上工具的一键式安装上述工具,设定迁移任务,任务根据用户设定的执行计划顺序的调用相应工具完成每个迁移步骤,并能实时展示每个步骤的状态、进度、异常原因等。

                                          注意事项

                                          • portal在执行增量迁移、反向迁移、增量校验时需要使用curl工具。

                                          • 同一个迁移计划的增量迁移和反向迁移不会同时开启,如果一个计划中包含了增量迁移和反向迁移,那么需要用户手动停止增量迁移,启动反向迁移。当用户启动反向迁移之后,无法再启动增量迁移。

                                          • portal使用的workspace.id只能为小写字母与数字的组合。

                                          • portal在启动多个计划时,需要保证MySQL数据库实例各不相同,openGauss端数据库各不相同,且同一个MySQL数据库实例和openGauss端数据库的增量迁移和反向迁移不能同时开启。

                                          下载地址有2个:

                                          • 官方下载地址:https://opengauss.org/zh/download/ openGauss Tools部分

                                          • gitee下载地址:https://gitee.com/opengauss/openGauss-migration-portal

                                          gitee上面版本较新,但是需要匹配gitee上面的datakit版本,不然后面安装迁移插件会踩坑

                                          系统名称

                                          系统架构

                                          下载链接

                                          centos7

                                          x86_64

                                          https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/centos7/PortalControl-6.0.0-x86_64.tar.gz

                                          openEuler20.03

                                          x86_64

                                          https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/openEuler20.03/PortalControl-6.0.0-x86_64.tar.gz

                                          openEuler20.03

                                          aarch64

                                          https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/openEuler20.03/PortalControl-6.0.0-aarch64.tar.gz

                                          openEuler22.03

                                          x86_64

                                          https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/openEuler22.03/PortalControl-6.0.0-x86_64.tar.gz

                                          openEuler22.03

                                          aarch64

                                          https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/openEuler22.03/PortalControl-6.0.0-aarch64.tar.gz

                                          本文档采用opengauss官网下载最新版本的安装包:https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/Datakit/Datakit-6.0.0.tar.gz

                                          和opengauss官网下载迁移套件:https://opengauss.obs.cn-south-1.myhuaweicloud.com/latest/tools/centos7/PortalControl-6.0.0-x86_64.tar.gz

                                          创建数据迁移任务

                                          MySQL迁移全流程包括全量迁移、全量校验、增量迁移、增量校验和反向迁移五个阶段,下面将详细介绍迁移全流程。

                                          1.创建迁移任务

                                          在Datakit平台数据迁移–迁移任务中心–创建迁移任务,选定源端数据库和目的端数据库,添加子任务,迁移过程模式选择在线模式。

                                          迁移模式包括离线和在线两种模式,其中离线模式包括全量迁移和全量校验两个阶段,在线模式包括全量迁移、全量校验、增量迁移、增量校验、反向迁移和五个阶段,本次实践选择在线模式,囊括业务割接的整个过程。

                                          详细描述如下:

                                          (1)在Datakit平台数据迁移–迁移任务中心–创建迁移任务

                                          (2)选定源端数据库(source_db)和目的端数据库(target_db),添加子任务,迁移过程模式选择在线模式。

                                          选择迁移源库和目的库

                                          配置源端

                                          配置目标端

                                          目标端添加子任务

                                          迁移模式有2种:

                                          离线模式:自动执行全量迁移,完成后自动结束,释放资源。

                                          在线模式:自动执行全量迁移+增量迁移,用户手动启动反向迁移,需要用户操作结束迁移,释放资源。

                                          本文档采用离线模式实现MySQL8.0向openGauss6.0.0迁移

                                          配置迁移过程参数

                                          调整内核参数,目的是提升迁移效率;数据库迁移用户为管理员时才能勾选上。

                                          安装 PortalControl-6.0.0-x86_64.tar.gz插件

                                          单机“开始安装”

                                          DataKit6.0.0比5.0.0更高完善,头一次点错了,点成了在线安装失败后,清理环境再次离线安装上传PortalControl-6.0.0-x86_64.tar.gz插件,安装成功。

                                          启动迁移

                                          • 迁移任务配置文件:/home/top/portal/workspace/12/config/migrationConfig.properties

                                          • DataKit6.0图形化界面日志查看方式:查看迁移任务右侧详情

                                          • 服务器上日志路径:/home/top/portal/workspace/7/logs/full_migration.log,每启动一次/home/top/portal/workspace/目录下的数字就会累加1,生成一个新的日志目录,如下:

                                            [root@top175:/root]$ cd /home/top/portal/workspace
                                            [root@top175:/home/top/portal/workspace]$ ls -l
                                            total 32
                                            drwxrwxr-x 6 top top 4096 Oct 21 10:29 1
                                            drwxrwxr-x 6 top top 4096 Oct 21 11:43 2
                                            drwxrwxr-x 7 top top 4096 Oct 21 11:52 3
                                            drwxrwxr-x 7 top top 4096 Oct 21 12:02 4
                                            drwxrwxr-x 7 top top 4096 Oct 23 17:33 5
                                            drwxrwxr-x 7 top top 4096 Oct 23 17:38 6
                                            drwxrwxr-x 7 top top 4096 Oct 23 17:47 7
                                            drwxrwxr-x 8 top top 4096 Oct 25 10:54 8

                                            查看迁移进度

                                            扩展

                                            停止迁移步骤

                                            如果迁移过程中发生报错,需要手动停止迁移时,需按一下步骤操作:

                                            单击迁移任务右侧的结束迁移

                                            重启迁移失败的任务

                                            如果迁移过程中发生报错,手动停止迁移后,需再次启动迁移,步骤如下:

                                            单击迁移任务右侧的结束迁移-->单击迁移任务右侧结束迁移右侧的重置-->最后单击迁移任务右侧的启动。

                                            问题处理

                                            启动迁移后前置校验失败1

                                            问题描述

                                              前置校查失败详情
                                              服务可用性:可用;
                                              数据库连接:MySQL可连接;openGauss可连接;
                                              数据库权限:MySQL全量迁移权限满足;openGauss全量迁移权限满足;
                                              大小写参数:一致;
                                              MySQL加密方式:不正确, 结果为:caching_sha2_password,应改为default_authentication_plugin=mysql_native_password;
                                              openGauss B兼容库:满足;
                                              解决办法
                                                --更改源端MySQL数据库配置文件
                                                [root@db191 ~]# ps -ef | grep mysql
                                                mysql 1379 1 0 10月16 ? 00:21:15 /mysql/app/bin/mysqld --defaults-file=/etc/my.cnf
                                                root 14566 14520 0 10:34 pts/0 00:00:00 grep --color=auto mysql
                                                [root@db191 ~]# vi /etc/my.cnf
                                                [mysqld]下面增加
                                                #认证策略解决登录ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded#
                                                default_authentication_plugin = mysql_native_password


                                                --重启库
                                                systemctl restart mysqld
                                                systemctl status mysqld

                                                启动迁移后前置校验失败2:Invalid command Run chameleon

                                                问题描述

                                                  Process chameleon detach_replica --config default_3 exit abnormally occurred in checking chameleon replica order. Error message: ERROR - Invalid command Run chameleon order detach_replica failed,or you can try read /home/top/portal/workspace/3/logs/full_migration.log or error.log to get detailed information to solve the exception.
                                                  分析过程

                                                  查看并下载日志

                                                    Traceback (most recent call last):
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/bin/chameleon.py", line 93, in <module>
                                                    getattr(replica, args.command)()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pg_chameleon/lib/global_lib.py", line 1375, in detach_replica
                                                    self.pg_engine.fk_metadata = self.mysql_source.get_foreign_keys_metadata()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pg_chameleon/lib/mysql_lib.py", line 981, in get_foreign_keys_metadata
                                                    self.__init_sync()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pg_chameleon/lib/mysql_lib.py", line 2572, in __init_sync
                                                    self.connect_db_buffered()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pg_chameleon/lib/mysql_lib.py", line 446, in connect_db_buffered
                                                    cursorclass=pymysql.cursors.DictCursor
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/__init__.py", line 94, in Connect
                                                    return Connection(*args, **kwargs)
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/connections.py", line 327, in __init__
                                                    self.connect()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/connections.py", line 588, in connect
                                                    self._request_authentication()
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/connections.py", line 863, in _request_authentication
                                                    auth_packet = self._process_auth(plugin_name, auth_packet)
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/connections.py", line 892, in _process_auth
                                                    return _auth.caching_sha2_password_auth(self, auth_packet)
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 326, in caching_sha2_password_auth
                                                    data = sha2_rsa_encrypt(conn.password, conn.salt, conn.server_public_key)
                                                    File "/home/top/portal/tools/chameleon/chameleon-6.0.0/venv/lib/python3.6/site-packages/pymysql/_auth.py", line 204, in sha2_rsa_encrypt
                                                    raise RuntimeError("'cryptography' package is required for sha256_password or caching_sha2_password auth methods")
                                                    RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods


                                                    show_config,show_sources,show_status,create_replica_schema,drop_replica_schema,upgrade_replica_schema,add_source,drop_source,init_replica,enable_replica,update_schema_mappings,refresh_schema,sync_tables,start_replica,stop_replica,detach_replica,set_configuration_files,show_errors,run_maintenance,stop_all_replicas,start_view_replica,start_trigger_replica,start_proc_replica,start_func_replica,start_index_replica
                                                    2024-10-21 11:52:48.718 MainProcess DEBUG pg_lib.py (708): There is already a database connection active.
                                                    2024-10-21 11:52:48.721 MainProcess INFO global_lib.py (517): Dropping the replica schema
                                                    2024-10-21 11:52:48.722 MainProcess DEBUG pg_lib.py (2835): Trying to connect to the destination database.
                                                    2024-10-21 11:52:48.906 MainProcess INFO chameleon.py (94): drop_replica_schema finished.
                                                    解决办法
                                                      cd /home/top/portal/tools/chameleon/chameleon-6.0.0/venv/bin
                                                      ./pip3 install --upgrade pip
                                                      pip3 install cryptography -i https://pypi.tuna.tsinghua.edu.cn/simple

                                                      启动迁移后前置校验失败3:2059, "Authentication plugin 'caching_sha2_password' cannot be loaded

                                                      源库检查用户或更改加密方式,该步骤必须做,不然启动迁移报错

                                                      问题描述
                                                        Process chameleon init_replica --config default_7 exit abnormally occurred in checking chameleon replica order. Error message: 2024-10-23 17:47:24.646 MainProcess ERROR mysql_lib.py (813): (2059, "Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory") Run chameleon order init_replica failed,or you can try read /home/top/portal/workspace/7/logs/full_migration.log or error.log to get detailed information to solve the exception.
                                                        分析过程
                                                          --源库检查用户加密方式
                                                          select host,user,plugin,authentication_string from user;


                                                          输出如下:
                                                          host user plugin authentication_string
                                                          % bf_ops caching_sha2_password $A$005$m1M2%4SS8A^'Nfo07fFqb8cifguGTcMjWBJJuCdpwp1ZqpCDYK9PfpGQZv0
                                                          % root caching_sha2_password $A$005$C%yk~vR %\WZWXZoGExiNd.FaHld2muR3pevPW.w5E3Kc85lHOeYMPOYKB
                                                          localhost mysql.infoschema caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                                          localhost mysql.session caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                                          localhost mysql.sys caching_sha2_password $A$005$THISISACOMBINATIONOFINVALIDSALTANDPASSWORDTHATMUSTNEVERBRBEUSED
                                                          localhost  root              caching_sha2_password  $A$005$9kTQi#bH2:"~@kDCvVlJDpQSDcO4iSfrdbSgACVUSDon1vlf40HZiYdqD
                                                          解决办法
                                                            --配置文件中[mysqld]下增加以下参数并重启
                                                            [mysqld]
                                                            default_authentication_plugin=mysql_native_password


                                                            --重启mysql服务
                                                            systemctl restart mysqld
                                                            systemctl status mysqld


                                                            --源库中更改用户加密方式
                                                            ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
                                                            ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
                                                            FLUSH PRIVILEGES;

                                                            启动迁移后前置校验失败4

                                                            问题描述
                                                              前置校查失败详情
                                                              服务可用性:可用;
                                                              数据库连接:MySQL可连接;openGauss可连接;
                                                              数据库权限:MySQL全量迁移权限满足;openGauss全量迁移权限不满足;
                                                              大小写参数:一致;
                                                              MySQL加密方式:正确;
                                                              openGauss B兼容库:满足;
                                                              解决办法

                                                              目标库执行

                                                                grant all privileges to root;

                                                                迁移报错:Invalid username/password

                                                                问题描述

                                                                  迁移失败详情
                                                                  Process chameleon drop_replica_schema --config default_12 exit abnormally occurred in checking chameleon replica order. Error message: py_opengauss.exceptions.ClientCannotConnectError: could not establish connection to server Run chameleon order drop_replica_schema failed,or you can try read /home/top/portal/workspace/12/logs/full_migration.log or error.log to get detailed information to solve the exception.

                                                                  问题原因

                                                                  迁移结束后视图迁移报错,删除了openGauss连接用户root,又重建openGauss连接用户root,DataKit6.0启动迁移后就报用户名密码错误

                                                                  解决办法

                                                                  重新创建一个新的用于openGauss连接用户,再次迁移成功。

                                                                    create user rootnew with password 'Topnet_123';
                                                                    grant all privileges to rootnew;

                                                                    视图迁移报错

                                                                    出现该报错比较恐怖,因为重新创建用户后需要再次迁移,建议创建用户后先测试迁移个视图,如果成功了再整库迁移。

                                                                    问题描述

                                                                    迁移结束后发现视图迁移失败,点错号显示报错如下:

                                                                      错误详情
                                                                      Method 1 execute failed: role "root@%" does not exist; Method 2 execute failed: role "root@%" does not exist. PLEASE create openGauss role!!! FIRST:set b_compatibility_user_host_auth to on; SECOND:create user `XXX`@`XXX` with password 'XXXXXX';(Attention: `` not '') THIRD: grant all privileges to `XXX`@`XXX`;
                                                                      分析过程

                                                                      查看迁移日志

                                                                        错误详情
                                                                        Method 1 execute failed: role "root@%" does not exist; Method 2 execute failed: role "root@%" does not exist. PLEASE create openGauss role!!! FIRST:set b_compatibility_user_host_auth to on; SECOND:create user `XXX`@`XXX` with password 'XXXXXX';(Attention: `` not '') THIRD: grant all privileges to `XXX`@`XXX`;
                                                                        解决办法
                                                                        目标库更改参数
                                                                          --登录数据库
                                                                          gsql -d postgres -p 15400


                                                                          --查看参数 默认为off
                                                                          show b_compatibility_user_host_auth;


                                                                          openGauss=# show b_compatibility_user_host_auth;
                                                                          b_compatibility_user_host_auth
                                                                          --------------------------------
                                                                          off
                                                                          (1 row)


                                                                          --配置文件中增加参数
                                                                          永久性修改b_compatibility_user_host_auth为on
                                                                          su - omm
                                                                          vi /topsoft/huawei/install/data/dn/postgresql.conf
                                                                          增加
                                                                          b_compatibility_user_host_auth=on


                                                                          --重启数据库
                                                                          gs_om -t stop
                                                                          gs_om -t start


                                                                          --查看参数是否生效
                                                                          gsql -d postgres -p 15400
                                                                          show b_compatibility_user_host_auth;


                                                                          openGauss=# show b_compatibility_user_host_auth;
                                                                          b_compatibility_user_host_auth
                                                                          --------------------------------
                                                                          on
                                                                          (1 row)
                                                                          目标库创建用于迁移的用户并赋权

                                                                          目标库创建用于迁移的用户`root`@`%` 并赋权,迁完不要删除openGauss连接用户root,不然重建openGauss连接用户root后DataKit6.0启动迁移后会报用户名密码错误,详细后面openGauss新版本会解决。

                                                                            --登录openGauss库
                                                                            su - omm
                                                                            gsql -d postgres -p 15400


                                                                            --切换到digital数据库下
                                                                            \c digital root


                                                                            --创建和源库同名的迁移对象专用用户(普通用户) 必须是反引号不是单引号
                                                                            set b_compatibility_user_host_auth=on;
                                                                            create user `root`@`%` with password 'Topnet_123';
                                                                            grant all privileges to `root`@`%`;

                                                                            点击阅读原文跳转作者文章

                                                                            文章转载自openGauss,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                                                                            评论