当前位置: 代码网 > it编程>数据库>MsSqlserver > 【DataKit系列】数据迁移-前置校验失败的处理(三)

【DataKit系列】数据迁移-前置校验失败的处理(三)

2024年08月04日 MsSqlserver 我要评论
前置校验项目及不通过的处理 1、Kafka服务可用性检查: 使用jps在portal执行机上执行查看,保证以下三个服务进程存在 [test@dev-openeuler-arm ~]$ jps3757401 SchemaRegistryMain3757072 SupportedKafka3756341 QuorumPeerMain 如果在portal以正常安装的情况下,三个服务进程异常终止,可使用如下命令启动三个服务进程。 -- 可以先执行停止kafka的命令,确保Kafka进程已停止,避免启动时出错,停止kafka的命令如下java -Dpath...

前置校验项目及不通过的处理

1、kafka服务可用性检查:

使用jps在portal执行机上执行查看,保证以下三个服务进程存在

[test@dev-openeuler-arm ~]$ jps3757401 schemaregistrymain3757072 supportedkafka3756341 quorumpeermain

如果在portal以正常安装的情况下,三个服务进程异常终止,可使用如下命令启动三个服务进程。

-- 可以先执行停止kafka的命令,确保kafka进程已停止,避免启动时出错,停止kafka的命令如下java -dpath=/{portal_path}/portal/ -dorder=stop_kafka -dskip=true -jar /{portal_path}/portal/portalcontrol-*-exec.jar
-- 启动kafka进程的命令java -dpath=/{portal_path}/portal/ -dorder=start_kafka -dskip=true -jar /{portal_path}/portal/portalcontrol-*-exec.jar
-- 出现类似如下日志信息,表示启动kafka成功
log4j: reset attribute= "false".log4j: threshold ="null".log4j: level value for root is  [debug].log4j: root level set to debuglog4j: class name: [org.apache.log4j.consoleappender]log4j: parsing layout of class: "org.apache.log4j.patternlayout"log4j: setting property [conversionpattern] to [%d{hh:mm:ss,ss} %-5p (%c{1}:%m) - %m%n].log4j: setting property [levelmin] to [info].log4j: setting property [levelmax] to [error].log4j: setting property [acceptonmatch] to [true].log4j: adding filter of type [class org.apache.log4j.varia.levelrangefilter] to appender named [log.console].log4j: adding appender named [log.console] to category [root].log4j: class name: [org.apache.log4j.dailyrollingfileappender]log4j: setting property [file] to [/data/test/portal/portal//logs/portal_.log].log4j: setting property [append] to [true].log4j: setting property [datepattern] to [yyyy-mm-dd].log4j: parsing layout of class: "org.apache.log4j.patternlayout"log4j: setting property [conversionpattern] to [%d{hh:mm:ss,ss} %-5p (%c{1}:%m) - %m%n].log4j: setting property [levelmin] to [info].log4j: setting property [levelmax] to [error].log4j: setting property [acceptonmatch] to [true].log4j: adding filter of type [class org.apache.log4j.varia.levelrangefilter] to appender named [log.file].log4j: setfile called: /data/test/portal/portal//logs/portal_.log, truelog4j: setfile endedlog4j: appender [log.file] to be rolled at midnight.log4j: adding appender named [log.file] to category [root].19:35:00,492 info  (paramsutils:initmigrationparamsfromprops) - properties = {awt.toolkit=sun.awt.x11.xtoolkit, java.specification.version=11, sun.cpu.isalist=, sun.jnu.encoding=utf-8, java.class.path=/data/test/portal/portal/portalcontrol-6.0.0rc1-exec.jar, java.vm.vendor=bisheng, sun.arch.data.model=64, path=/data/test/portal/portal/, java.vendor.url=https://gitee.com/openeuler/bishengjdk-11/, user.timezone=asia/shanghai, os.name=linux, java.vm.specification.version=11, sun.java.launcher=sun_standard, user.country=us, order=start_kafka, sun.boot.library.path=/data/test/env/java/bisheng-jdk-11.0.20/lib, sun.java.command=/data/test/portal/portal/portalcontrol-6.0.0rc1-exec.jar, jdk.debug=release, sun.cpu.endian=little, user.home=/home/test, user.language=en, java.specification.vendor=oracle corporation, java.version.date=2023-07-18, java.home=/data/test/env/java/bisheng-jdk-11.0.20, file.separator=/, java.vm.compressedoopsmode=zero based, line.separator=, java.specification.name=java platform api specification, java.vm.specification.vendor=oracle corporation, java.awt.graphicsenv=sun.awt.x11graphicsenvironment, java.protocol.handler.pkgs=org.springframework.boot.loader, sun.management.compiler=hotspot 64-bit tiered compilers, java.runtime.version=11.0.20+11, user.name=test, skip=true, path.separator=:, os.version=4.19.90-2110.8.0.0119.oe1.aarch64, java.runtime.name=openjdk runtime environment, file.encoding=utf-8, java.vm.name=openjdk 64-bit server vm, java.vendor.version=bisheng, java.vendor.url.bug=https://gitee.com/openeuler/bishengjdk-11/issues/, java.io.tmpdir=/tmp, java.version=11.0.20, user.dir=/data/test/portal, os.arch=aarch64, java.vm.specification.name=java virtual machine specification, java.awt.printerjob=sun.print.psprinterjob, sun.os.patch.level=unknown, java.library.path=/data/test/portal/portal/tools/chameleon/chameleon-6.0.0rc1:/data/test/portal/portal/tools/chameleon/chameleon-5.1.1:/data/test/portal/portal/tools/chameleon/chameleon-6.0.0rc1:/data/test/portal/portal/tools/chameleon/chameleon-6.0.0rc1:/data/test/portal/portal/tools/chameleon/chameleon-6.0.0rc1:/data/test/portal/portal/tools/chameleon/chameleon-6.0.0:/data/xz_u2/base/opt/huawei/install/om/lib:/data/xz_u2/base/opt/huawei/install/om/script/gspylib/clib::/usr/java/packages/lib:/lib:/usr/lib:/usr/lib64:/lib64, java.vm.info=mixed mode, java.vendor=bisheng, java.vm.version=11.0.20+11, java.specification.maintenance.version=2, sun.io.unicode.encoding=unicodelittle, java.class.version=55.0}19:35:00,567 info  (migrationconfluentinstanceconfig:getsystemparamandparseentity) - get migrationconfluentinstanceconfig from system param = migrationconfluentinstanceconfig(id=null, zookeeperport=null, kafkaport=null, zkip=null, kafkaip=null, installdir=null, bindportalid=null, zkipport=null, kafkaipport=null, schemaregistryipport=null, schemaregistryip=null, schemaregistryport=null, bindportalhost=null, thirdpartysoftwareconfigtype=null)19:35:00,569 info  (kafkautils:changeconfluentdirfromsysparam) - no need change param19:35:00,576 info  (fileutils:createfile) - file /data/test/portal/portal/portal.portid.lock already exists.19:35:00,587 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1 already exists.19:35:00,587 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/tmp/ already exists.19:35:00,592 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/logs already exists.19:35:00,631 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/ already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/incremental/ already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/portal.txt already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/full_migration.txt already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/incremental_migration.txt already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/status/reverse_migration.txt already exists.19:35:00,632 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/logs/debezium/ already exists.19:35:00,633 info  (fileutils:createfile) - file /data/test/portal/portal/workspace/1/logs/datacheck/ already exists.19:35:00,650 info  (paramsutils:changedatacheckloglevel) - global log level param is empty19:35:00,796 info  (migrationconfluentinstanceconfig:getsystemparamandparseentity) - get migrationconfluentinstanceconfig from system param = migrationconfluentinstanceconfig(id=null, zookeeperport=null, kafkaport=null, zkip=null, kafkaip=null, installdir=null, bindportalid=null, zkipport=null, kafkaipport=null, schemaregistryipport=null, schemaregistryip=null, schemaregistryport=null, bindportalhost=null, thirdpartysoftwareconfigtype=null)19:35:00,851 info  (runtimeexecutils:executestartorder) - start command = /data/test/portal//portal/tools/debezium/confluent-5.5.1/bin/zookeeper-server-start -daemon /data/test/portal//portal/tools/debezium/confluent-5.5.1/etc/kafka/zookeeper.properties19:35:00,938 info  (runtimeexecutils:executestartorder) - start zookeeper.19:35:02,964 info  (mqtool:start) - kafkaorder====/data/test/portal//portal/tools/debezium/confluent-5.5.1/bin/kafka-topics --list --bootstrap-server 192.168.0.118:909219:35:03,07 info  (runtimeexecutils:executestartorder) - start command = /data/test/portal//portal/tools/debezium/confluent-5.5.1/bin/kafka-server-start -daemon /data/test/portal//portal/tools/debezium/confluent-5.5.1/etc/kafka/server.properties19:35:03,93 info  (runtimeexecutils:executestartorder) - start kafka.19:35:05,102 info  (runtimeexecutils:removefile) - remove file /data/test/portal/portal/tmp/test_.txt finished.19:35:07,108 info  (runtimeexecutils:removefile) - remove file /data/test/portal/portal/tmp/test_.txt finished.19:35:07,174 info  (runtimeexecutils:executestartorder) - start command = /data/test/portal//portal/tools/debezium/confluent-5.5.1/bin/schema-registry-start -daemon /data/test/portal//portal/tools/debezium/confluent-5.5.1/etc/schema-registry/schema-registry.properties19:35:07,181 info  (runtimeexecutils:executestartorder) - start kafka schema registry.19:35:10,281 info  (mqtool:start) - start kafka success.

2、检查源端和目标端数据库是否可连接

mysql: mysql -h ip -p port -u user -ppassword -s /~/mysql.sock\ opengauss: gsql -r -d database -p port -u user -w password

3、权限检查

mysql连接用户权限要求如下:

为确认数据的顺利迁移,源端数据库(mysql)的数据源添加时,请按照迁移需要添加所需权限,也可以直接给all权限;

1)全量迁移:select 、reload、 lock tables 、replication client

2)增量迁移:select 、replication client 、replication slave

3)反向迁移:select 、update 、insert 、delete

查询和修改用户权限的命令如下,如果连接用户权限不满足,请修改对应权限值。

-- 查询用户权限的命令select * from mysql.user where user = '{用户名}';-- 修改用户权限的命令语法格式如下,其中privileges:用户的操作权限,如select,insert,update等,如果要授予所的权限则使用all;databasename:数据库名;tablename:表名,如果要授予该用户对所有数据库和表的相应操作权限则可用*表示,如*.*。grant privileges on databasename.tablename to '{用户名}';-- 赋予用户全量迁移权限的命令grant select, reload, lock tables, replication client on *.* to '{用户名}';-- 赋予用户增量迁移权限的命令grant select, replication client, replication slave on *.* to '{用户名}';-- 赋予用户反向迁移权限的命令grant select, update, insert, delete on *.* to '{用户名}';-- 赋予所有权限的命令grant all on *.* to '{用户名}';-- 在赋权后,确保刷新权限以使更改生效flush privileges;

opengauss连接用户权限要求如下:

通过datakit平台安装的目标端数据库(opengauss)可以直接迁移,导入的数据库以及在创建任务时添加的自定义opengauss数据源,需要提前将用户权限改为sysadmin角色;

反向迁移需要将rolreplication设置为true

-- 首先使用连接用户连接opengauss-- 查询rolreplication权限的命令select rolreplication from pg_roles;-- 修改权限的命令alter role '{用户名}' replication;

修改opengauss用户权限的方式如下:

方式一:(推荐,符合最小权限)

#给要迁移的目标库target_source赋all权限给迁移用户opengauss_testgrant all on database target_source to opengauss_test;

方式二:(不推荐)

#修改用户角色为sysadminalter user {用户名} sysadmin;#查询用户角色,字段值为t时说明具有sysadmin角色,f时则没有select rolsystemadmin from pg_roles where rolname='{用户名}';

有sysadmin角色权限:查询结果为t;

无sysadmin角色权限:查询结果为f;

4、日志参数检查

增量迁移时,源数据库mysql需要开启复制功能,在配置中增加以下配置参数,并重启

log_bin=on

binlog_format= row

binlog_row_image=full

查询参数值是否设置成功的命令如下:

show variables like 'log_bin';show variables like 'binlog_format';show variables like 'binlog_row_image';

反向迁移时,需要在opengauss数据库增加如下配置,并重启

调整pg_hba.conf以允许复制

-- 根据连接用户和实际网络配置命令gs_guc set -d /opt/datakit/opengauss/datanode/dn1 -h "host replication {connected username} {ip/port} sha256"-- 直接允许所有用户和网络配置命令gs_guc set -d /opt/datakit/opengauss/datanode/dn1 -h "host replication all 0.0.0.0/0 sha256"

调整日志参数wal_level的命令:

-- 修改参数的sql语句alter system set wal_level to logical;-- 或直接修改配置文件中的参数,其中“/opt/datakit/opengauss/datanode/dn1”为实际数据库节点目录gs_guc set -d /opt/datakit/opengauss/datanode/dn1 -c "wal_level = logical"

查询日志参数wal_level是否设置成功的命令如下:

-- 查询是否允许复制的参数,为1表示设置成功select rolreplication from pg_roles where rolname='{用户名}'-- 查询wal_level参数show variables like 'wal_level';

5、大小写参数检查

需确保mysql和opengauss的大小写参数一致,查询大小写参数的命令如下:

-- 查询mysql的大小写参数show variables like 'lower_case_table_names';-- 查询opengauss的大小写参数show dolphin.lower_case_table_names;

修改大小写参数,使两者保持一致,修改方式如下:

修改mysql的大小写参数

更改数据库参数文件my.cnf在mysqld下添加或修改 lower_case_table_names = 1 之后重启数据库

修改opengauss的大小写参数

alter user {用户名} set dolphin.lower_case_table_names to 0

6、磁盘空间校验

迁移过程中会产生一些临时文件,需要占用一定的磁盘空间,要求磁盘满足---源端单表的最大数据量。

7、b库校验

迁移的目标数据库要求是b库,查询是否为b库的命令如下:

show sql_compatibility;

创建b库的命令

create database {dbname} with dbcompatibility = 'b';

8、mysql加密方式校验

查询系统默认加密方式的命令

select @@default_authentication_plugin;

修改系统默认加密方式

更改数据库参数文件my.cnf在mysqld下添加或修改 default-authentication-plugin=mysql_native_password 之后重启数据库

同时修改连接用户的加密方式为mysql_native_password,修改的sql语句如下:

alter user '用户名'@'%' identified with mysql_native_password by '新密码';

9、复制参数校验

启动反向迁移会占用逻辑复制槽位,需要确保opengauss有可使用的槽位。

-- 查询当前使用的槽位select count(*) from pg_get_replication_slots();-- 查询系统最大槽位show max_replication_slots;

槽位很少出现被占满的情况,如若被占满,通过如下操作删除无用槽位。

-- 获取当前复制槽列表select * from pg_get_replication_slots();-- 删除流复制槽,其中slot_name为流复制槽名称select pg_drop_replication_slot('slot_name');

获取复制槽列表的示例如下:

opengauss=# select * from pg_get_replication_slots(); slot_name |     plugin     | slot_type | datoid | active | xmin | catalog_xmin | restart_lsn | dummy_standby | confirmed_flush-----------+----------------+-----------+--------+--------+------+--------------+-------------+---------------+----------------- dn_s1     |                | physical  |      0 | t      |      |              | 0/23db14e0  | f             | slot1     | mppdb_decoding | logical   |  16304 | f      |      |        60966 | 0/1afa1bb0  | f             | 0/23da5700(2 rows)

注:

逻辑复制槽的占用会在增量迁移停止后创建,如果此时结束迁移任务,就会有槽位占用的残留。而如果正常进行反向迁移,然后停止迁移任务,则会自动删除占用的槽位。

可以将portal的migrationconfig.properties配置文件中的drop.logical.slot.on.stop参数设置为true,以保证迁移任务结束时,自动删除占用的槽位。

进一步学习,请参考opengauss社区,社区地址:https://opengauss.org/zh/。

10、迁移过程中,请勿关闭源数据库或目标数据库;

11、执行迁移任务的服务器应具备一定的性能和配置,以保证迁移过程的顺利执行;

12、迁移任务是在非root用户下执行,任务的执行机器来源于平台资源中心的设备管理,因此需要在设备管理的用户管理中添加非root用户。


datakit系列文章往期回顾

【datakit系列】数据迁移-使用说明(一)

【datakit系列】数据迁移-实例搭建步骤(二)

点击查看原文跳转作者文章


(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com