OMS 数据迁移 同步表结构卡住

【 使用环境 】测试环境
【 OB or 其他组件 】oms
【 使用版本 】4.2.5
【问题描述】OMS 数据迁移 同步表结构一直初始化状态
【复现路径】新部署的oms,新加的同步
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):

【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)

您的问题可能存在误解,实际上据我所知 OMS 在进行数据迁移或同步时,如果遇到表结构同步卡住的情况,通常是因为一些配置不当或者环境问题导致的。根据您提供的信息,我们可以从以下几个方面来排查:

  1. Kafka 版本兼容性:请确保您的 Kafka 版本与 OMS 社区版兼容。OMS 社区版支持的 Kafka 版本为 V0.9、V1.0 和 V2.x [1]。特别是当 Kafka 版本为 V0.9 时,不支持结构同步 [1]。如果您的 Kafka 版本不符合这些要求,请升级或降级 Kafka 到支持的版本。

  2. 同步对象的命名规则:OMS 社区版仅支持同步库名、表名和列名为 ASCII 码且不包含特殊字符(包括 |"’`()=;/& 和换行)的对象 [1]。请检查您的表名是否符合这些规则。此外,待同步的表名和其中的列名不能包含中文字符 [1]

  3. 数据源标识和用户账号:数据源标识和用户账号等,在 OMS 系统内全局唯一 [1]。请确保没有重复的数据源标识或用户账号。

  4. 源端表结构变更:如果在同步过程中对源端进行了表结构变更,例如重命名表名,且新的表名不在同步对象中,则这部分数据将不会被同步至目标 Kafka 实例中 [1]。请确保同步期间不要更改表结构或表名。

建议您按照以上步骤逐一排查,并检查是否有相关的日志信息可以帮助定位问题。如果问题仍然存在,建议使用 obdiag 工具收集诊断信息,并联系 OceanBase 的技术支持团队进一步分析。

具体信息可参考以下文档:

  1. 创建 OceanBase 社区版至 Kafka 的数据同步任务

你服务器时间不对呀。怎么都是9-9日的?


cong x从新建任务了,还是不行。时间没问题

根据您提供的截图信息,可以看出当前正在进行一项从 MySQL 到 OceanBase 的数据迁移任务,该任务包括结构迁移、全量迁移以及增量同步。目前结构迁移的状态显示为“运行中”,但进度只有 2%,这可能是导致您认为“卡住”的原因。针对这种情况,我们可以从以下几个方面进行排查:

  1. 资源限制:请检查您的源端 MySQL 服务器和目标端 OceanBase 集群的资源使用情况,包括 CPU、内存、磁盘 I/O 等。如果资源不足,可能会导致迁移速度缓慢。您可以尝试优化资源分配或减少其他非必要的负载。

  2. 网络延迟:数据迁移过程中,源端和目标端之间的网络状况也会影响迁移效率。请确保两者之间的网络连接稳定且延迟较低。可以通过 ping 或 traceroute 命令测试网络状况。

  3. 数据量大小:如果源端数据库的数据量非常大,那么即使一切正常,结构迁移也可能需要较长时间才能完成。您可以查看源端数据库的具体数据量,评估迁移所需的时间。

  4. 并发设置:在 OMS 中,全量迁移的并发速度设置为“平稳”,这可能意味着迁移任务是以较低的并发度执行的。您可以尝试调整迁移任务的并发度设置,以加快迁移速度。但是请注意,过高并发度可能会对源端或目标端系统造成压力。

  5. 异常对象处理:截图中提到“只查看异常对象”,建议您检查是否有某些特定的对象迁移失败或异常,这可能是导致整体迁移进度缓慢的原因之一。通过查看具体的异常对象及其错误信息,有助于定位问题所在。

  6. 日志信息:最后,建议您查看 OMS 的相关日志文件,特别是迁移任务的日志,以获取更详细的迁移过程信息。这有助于进一步诊断问题。

综上所述,您的迁移任务可能并不是真正意义上的“卡住”,而是由于某些因素导致迁移速度较慢。建议您从上述几个方面入手进行排查,并结合具体的日志信息来定位问题。如果问题依然无法解决,建议联系 OceanBase 的技术支持团队获取进一步的帮助。

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

看看日志。

是这个日志吗? /home/admin/oms/oms_logs/ghana/Ghana/dbcat.log

是的,能看到报错信息吗?

dbcat.log (280.0 KB)

看日志基本都是执行sql超时。

你把sql拿去手动执行下看看,会不会报错?源库很慢?还是网络不稳定?

2024-09-09 11:17:46.686 [DBCat-ThreadPool-2] ERROR c.o.o.d.j.t.JdbcTemplate - [] SQL: SELECT
			C.CONSTRAINT_NAME AS CONSTRAINT_NAME,
			S.COLUMN_NAME AS COLUMN_NAME,
			K.ORDINAL_POSITION AS ORDINAL_POSITION,
			S.COLLATION AS COLLATION,
			S.SUB_PART AS SUB_PART,
			S.INDEX_COMMENT AS INDEX_COMMENT
		FROM information_schema.TABLE_CONSTRAINTS C,
			 information_schema.KEY_COLUMN_USAGE AS K,
			 information_schema.STATISTICS AS S
		WHERE C.TABLE_SCHEMA=K.TABLE_SCHEMA AND C.TABLE_NAME=K.TABLE_NAME AND 
			  C.TABLE_SCHEMA=S.TABLE_SCHEMA AND C.TABLE_NAME=S.TABLE_NAME AND
			  C.CONSTRAINT_SCHEMA=K.CONSTRAINT_SCHEMA AND C.CONSTRAINT_NAME=K.CONSTRAINT_NAME AND
			  C.CONSTRAINT_NAME=S.INDEX_NAME AND K.ORDINAL_POSITION=S.SEQ_IN_INDEX AND
			  C.TABLE_SCHEMA=? AND C.TABLE_NAME=? AND C.CONSTRAINT_TYPE=?
		ORDER BY K.ORDINAL_POSITION ASC, Args: [ph_aos_dev, fence_small_parcel, UNIQUE]
com.mysql.cj.jdbc.exceptions.CommunicationsException: Communications link failure

The last packet successfully received from the server was 955,885 milliseconds ago. The last packet sent successfully to the server was 955,899 milliseconds ago.
	at com.mysql.cj.jdbc.exceptions.SQLError.createCommunicationsException(SQLError.java:174)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:64)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeQuery(ClientPreparedStatement.java:1009)
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeQuery(DruidPooledPreparedStatement.java:227)
	at com.oceanbase.obtools.dbdiff.jdbc.template.JdbcTemplate.queryMap(JdbcTemplate.java:215)
	at com.oceanbase.obtools.dbdiff.accessor.mysql.MySqlMetadataAccessor.queryUniqueMapping(MySqlMetadataAccessor.java:640)
	at com.oceanbase.obtools.dbdiff.accessor.mysql.MySqlMetadataAccessor$4.call(MySqlMetadataAccessor.java:361)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
	at java.util.concurrent.FutureTask.run(FutureTask.java:266)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	at java.lang.Thread.run(Thread.java:853)
Caused by: com.mysql.cj.exceptions.CJCommunicationsException: Communications link failure

。。。

SQL: SELECT
			COLUMN_NAME,
			ORDINAL_POSITION,
			COLUMN_DEFAULT,
			IS_NULLABLE,
			DATA_TYPE,
			CHARACTER_MAXIMUM_LENGTH,
			CHARACTER_OCTET_LENGTH,
			NUMERIC_PRECISION,
			NUMERIC_SCALE,
			DATETIME_PRECISION,
			CHARACTER_SET_NAME,
			COLLATION_NAME,
			COLUMN_TYPE,
			EXTRA,
			REPLACE(COLUMN_COMMENT,'''','''''') AS COLUMN_COMMENT
		FROM information_schema.COLUMNS
		WHERE TABLE_SCHEMA=? AND TABLE_NAME=?
		ORDER BY ORDINAL_POSITION ASC, Args: [ph_aos_dev, task_info_detail_log]
com.alibaba.druid.pool.GetConnectionTimeoutException: wait millis 120000, active 0, maxActive 24, creating 1, createElapseMillis 1140716, createErrorCount 372

2024-09-09 12:03:41.368 [Thread-184] INFO  c.o.o.d.a.m.MySqlMetadataAccessor - [4fde7704-6ff1-40f7-a1e2-19c9472479c7] Query 1 tables elapsed 4.342 min

Query 1 tables elapsed 4.342 min 《–获取一个表都元数据新建就花了4.3分钟

源库执行sql太慢,优化源库性能后已经解决了。谢谢。

2 个赞

全量/增量数据迁移性能调优

https://www.oceanbase.com/docs/community-oms-cn-1000000001302144