首页 > 数据库 > 国内数据库 > OceanBase LOAD DATA 旁路导入使用
工作中经常会遇到某个大数据量的单表进行迁移,在MySQL中对于单个大表通常会使用命令将原表以csv格式导出,再使用LOAD DATA语法来导入csv文件,在效率上要比mysqldump提升一定的性能,OB中对于这种情况引入了一个强大的利器—— 旁路导入,新版本的OBdumper/OBloader工具已经支持旁路导入, 本文先以 LOAD DATA 旁路导入作为探讨
OceanBase 4.2.1.8 MySQL租户
该参数用于控制导入或导出到文件时可以访问的路径,MySQL也有此参数,并且MySQL需要通过配置文件修改该参数并且重启生效,OB中可以通过命令行修改,无需重启。 需要通过本地 Unix Socket 连接 , 本地 OBServer 节点的 Unix Socket 文件路径,位于本地 ObServer 安装目录下的run/sql.sock,默认 Unix Socket 文件路径为 /home/admin/oceanbase/run/sql.sock
[root@observer062 csv]# obclient -S /home/admin/oceanbase/run/sql.sock -uroot@obmysql -p'aaAA11__' Welcome to the OceanBase. Commands end with ; or \g. Your OceanBase connection id is 3221882263 Server version: OceanBase 4.2.1.8 (r108000052024072217-77f9516419866bc291fc79b950b0865f2f4194e0) (Built Jul 22 2024 17:41:00) Copyright (c) 2000, 2018, OceanBase and/or its affiliates. All rights reserved. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. obclient [(none)]> obclient [(none)]> obclient [(none)]> SET GLOBAL secure_file_priv = "/backup/csv"; Query OK, 0 rows affected (0.190 sec) obclient [(none)]> obclient [(none)]>
需要配置 secure_file_priv 目录属组,否则导入导出操作会报权限错误
[root@observer062 backup]# chown -R admin.admin csv [root@observer062 backup]#
具体使用事项参考官网说明

旁路导入指的是 导入数据时跳过数据库的SQL引擎,直接向数据文件中写入文件,由于减少了SQL引擎解析的时间,大大提高了导入效率。OB V4 的版本在语法上已经支持旁路导入,MySQL的 LOAD DATA 语法不支持 旁路导入,PG的旁路导入需要借助 pg_bulkload工具
官方参数解释
| 参数 | 描述 |
|---|---|
| direct | 表示走旁路导入。 |
| need_sort | 表示是否需要 OceanBase 数据库对数据进行排序。
值为 bool 类型: |
| max_error | 表示最大的容忍的错误的行数。值为
INT 类型,超过这个数值
LOAD DATA 会报失败。 |
| parallel(N) | 加载数据的并行度,必填项,取值是大于 1 的整数。 |
具体使用方法可以参考官网说明
https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000507601
在MySQL5.7中,导入 48021216 数据量的CSV文件,耗时6 min 3.57 sec
mysql> LOAD DATA INFILE '/home/csv/bmsql_order_line.csv' INTO TABLE bmsql_order_line FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; Query OK, 48021216 rows affected (6 min 3.57 sec) Records: 48021216 Deleted: 0 Skipped: 0 Warnings: 0
使用OB导入的利器(旁路导入)加上并行导入, 导入相同数据量的CSV文件,耗时 1 min 46.812 sec。 极大的提高导入效率
obclient [test]> LOAD DATA /*+direct(true,1024) parallel(32) */ INFILE '/backup/csv/bmsql_order_line.csv' INTO TABLE bmsql_order_line FIELDS TERMINATED BY ',' ENCLOSED BY '"' LINES TERMINATED BY '\n'; Query OK, 48021216 rows affected (1 min 46.812 sec) Records: 48021216 Deleted: 0 Skipped: 0 Warnings: 0 obclient [test]>
1.旁路导入时需要设置 secure_file_priv 参数,并且要注意路径以及文件的权限
2.对于数据量较大的单表迁移,建议使用OB旁路导入功能提升导入效率
来自 “ ”, 原文作者: ;原文链接:,如有侵权,请联系管理员删除。