【 使用环境 】测试环境
【 OB or 其他组件 】obdumper、mysqldump
【 使用版本 】obdumper为4.3.0 mysqldump为4.3.0all-in-one中附带
【问题描述】使用obdumper导出某个表时一直报「Dump xxx.xxx failed. Reason: java.lang.IllegalStateException: java.lang.ArithmeticException: Rounding necessary」,这个表中有800w的数据,在mysql中约占用29GB,将数据迁移到ob后,想尝试导出数据,在不依赖其他工具的情况下,全量备份数据。
观察obdumper日志发现每次查询WHERE (id
)>(?) AND (id
)<=(?)的数据量大约为30w,将这个查询sql在ob中执行肯定会超时,尝试执行obdumper时配置 --page-size 10000后,观察obdumper日志每次查询的量没有变。想问一下如何解决呢?
后面尝试通过all-in-one自带的mysqldump导出,导出时报4012: Timeout, query has reached the maximum query timeout: 10000000(us),但是observer已经修改了ob_query_timeout为30000000。
【复现路径】
【附件及日志】
你好,可以尝试设置global级别的ob_query_timeout再次操作。
set global xxx
如依然复现问题,建议先将参数ob_query_timeout恢复成默认值。
是通过SET GLOBAL ob_query_timeout = 30000000设置的。
要在测试的租户下执行哈,你是不是在系统租户下执行了
理解了,在测试租户下修改确实可以了。
obdumper的问题可以解决吗?
调整下超时时间再试试,另外我看你看的是日志里的,实际的导出分页,也不是10000吗
java.lang.IllegalStateException: java.lang.ArithmeticException: Rounding necessary
原因:可以考虑使用较老版本的 JBDC 驱动替换(2.4.3 及之前),参考[替换方式]
或使用较老版本的导数工具(< 4.2.6)。
[替换方式]:不同版本的导数工具,其使用的 JDBC 驱动版本也不同。
- 工具 v4.2.1 ~ v4.2.4 使用 OceanBase Connector-J v2.4.3;
- 工具 v4.2.5 - v4.2.6 使用 OceanBase Connector-J v2.4.5;
- 工具 v4.2.7 使用 OceanBase Connector-J v2.4.7.1;
工具内置的 OceanBase Connector-J jar 在 “<工具根目录>/lib” 目录下,您可以自行替换不同版本的 OceanBase Connector-J jar。
具体操作流程:
- 从官网下载指定版本的 OceanBase Connector-J jar 包;
- 备份原有的
<工具根目录>/lib/oceanbase-client.jar
; - 将新 jar 包移动至
<工具根目录>/lib/
。