当前位置: 首页 > news >正文

如何用 OceanBase 的 LOAD DATA 旁路导入进行大表迁移

前言

在日常工作中,我们时常会遇到需要将某个大数据量的单表进行迁移的情况。在MySQL中,针对这样的大表,我们通常会选择先将原表导出为csv格式,然后利用LOAD DATA语法来导入csv文件,这种方法相较于mysqldump在效率上有一定的提升。OceanBase针对此类需求引入了一项新功能——旁路导入。最新版本的OBdumper/OBloader工具已经能够支持旁路导入。本文将对LOAD DATA旁路导入进行解读。

体验版本

OceanBase 4.2.1.8 MySQL租户

导入前准备

配置 secure_file_priv

该参数用于控制导入或导出到文件时可以访问的路径,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 目录属组

需要配置  secure_file_priv 目录属组,否则导入导出操作会报权限错误

[root@observer062 backup]# chown -R admin.admin csv
[root@observer062 backup]#
注意

具体使用事项参考官网说明

1731939983

LOAD DATA 旁路导入

旁路导入

旁路导入指的是导入数据时跳过数据库的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

MySQL导入效率

在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旁路导入效率

使用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: 0obclient [test]>

总结

1.旁路导入时需要设置 secure_file_priv 参数,并且要注意路径以及文件的权限

2.对于数据量较大的单表迁移,建议使用OB旁路导入功能提升导入效率

相关文章:

  • python自学笔记3 控制结构
  • 用Python实现数据库数据自动化导出PDF报告:从MySQL到个性化文档的全流程实践
  • 在金融发展领域,嵌入式主板有什么优点?
  • goldenDB创建函数索引报错问题
  • 5G金融互联:迈向未来金融服务的极速与智能新时代
  • 每日c/c++题 备战蓝桥杯(洛谷P4715 【深基16.例1】淘汰赛 题解)
  • 安装NASM
  • 虚拟机的三个核心类加载器
  • 【VBA/word】批量替换字体大小
  • 深入解析分布式数据库TiDB:原理、优化与架构实践
  • 宏汇编以及浮点程序设计实验
  • 练习小项目5:基础计算器
  • 算法竞赛 Java 高精度 大数 小数 模版
  • 2025年即时通讯APP如何抵御DDoS攻击?全链路防御方案与实战解析
  • 5.19本日总结
  • Axure跨页面交互:利用IFrame和JS实现父子页面菜单联动
  • 如何快速更换电脑浏览器ip:教程与注意事项
  • 煤化工数字化关键一步:Modbus TCP转Profinet网关实现全流程通信兼容
  • 基于 Vue 和 Node.js 实现图片上传功能:从前端到后端的完整实践
  • Ubuntu服务器部署多语言项目(Node.js/Python)方式实践
  • 让中小学生体验不同职业,上海中高职院校提供超5万个体验名额
  • 新华社千笔楼:地方文旅宣传应走出“魔性尬舞”的流量焦虑
  • 世卫大会中国代表团:中国深入参与全球卫生治理,为构建人类卫生健康共同体贡献中国力量
  • 上海青少年书法学习园开园:少年以巨笔书写《祖国万岁》
  • 解读|战国子弹库帛书漂泊海外79年今归国,追索仍将继续
  • 缅甸发生5.0级地震