逻辑备份obdumper导出有哪些注意事项?
2 个赞
obdumper 导出注意事项
根据 OceanBase 官方文档和实践经验,obdumper 导出时需要关注以下几个方面的注意事项:
环境与权限
-
Java 环境要求:本地必须安装 Java 8+ 并配置
JAVA_HOME环境变量,强烈建议使用 JDK 1.8.0_3xx 及以上版本。 - JVM 内存配置:JVM 内存太小会影响导出性能甚至导致 Full GC 或 GC Crash。建议根据机器规格调整,如机器可用内存 16G,可将 JVM 堆内存设为 8G。
-
用户权限:连接数据库的账号需要拥有
CREATE、SELECT等权限。导出表结构时还需要指定 SYS 租户的 root 密码或 proxyro 用户及其密码,推荐使用 proxyro 用户获取元数据信息。 - 版本兼容性:需确认 obdumper 版本与 OceanBase 数据库版本兼容。
数据一致性
- 不锁表导出:obdumper 支持通过最新的快照版本以不锁表的方式导出全局一致的数据,避免影响线上业务。
- 时间点快照导出:支持指定 SCN 或 TIMESTAMP,导出某一历史时刻的数据快照。
分区表导出
-
组合分区需指定二级分区名:使用
--partition选项导出分区数据时,对于组合分区表需要指定二级分区名,obdumper 无法直接导出一级分区内的数据。如果指定的分区名不存在,会报错提示。
对象定义导出限制
不同 OceanBase 版本对部分对象定义的支持存在差异:
-
MySQL 1.4.72:不支持导出唯一前缀索引定义(如
UNIQUE(c1(10))) -
MySQL 1.4.x:不支持导出生成列定义(如
GENERATED ALWAYS AS (expr)) -
MySQL 2.2.7x:不支持导出垂直分区(如
partition by column)、SYNONYM 对象定义、索引存储列(如storing(column_list)) -
Oracle 模式:不支持导出
interval day(2) to second(0)类型的数据
文件格式与命名
-
文件命名规范:导出数据文件的命名格式为
table.group.sequence.suffix。 - 外键列顺序:外键包含多列时,导出时无法保证列的顺序。
-
特殊字符限制:Windows 系统不能使用
\作为分隔符;数据库对象名不能包含\ / : * ? " < >等特殊符号,否则无法正常导出。 - 分隔符转义:导出 CSV 格式时,如果字段内容中出现指定的分隔符,会对其进行转义处理。
性能调优
-
并发线程:通过
--thread参数控制导出并发数,默认为CPU * 2,上限 32。 -
分页大小:通过
--page-size参数调整任务分页大小,默认 1000000。 - 导出格式选择:CSV 格式通常比 SQL 格式导出速度更快。
- 建议结构和数据分开导出:类似 MySQL 导出实践,建议 DDL 和 DML 分开执行,便于管理和排查问题。
生成列处理
- 导出表数据中包含生成列时,默认会导出生成列的数据。可使用
--exclude-virtual-columns选项跳过生成列。
逻辑库导出
- 使用
--logical-database选项时,导出的是随机的一个物理分库分表的定义,不可直接导入数据库,需要手动将物理库表结构改成逻辑库表结构后才能使用。