深圳建设银行宝安支行网站,谷歌seo优化排名,班级优化大师官方网站,郑州建立一个网站需要哪些本文作者#xff1a;玉璁#xff0c;OceanBase 生态产品技术专家。工作十余年#xff0c;一直在基础架构与中间件领域从事研发工作。现负责OceanBase离线导数产品工具的研发工作#xff0c;致力于为 OceanBase 建设一套完善的生态工具体系。 背景介绍
在互联网与云数据库技…本文作者玉璁OceanBase 生态产品技术专家。工作十余年一直在基础架构与中间件领域从事研发工作。现负责OceanBase离线导数产品工具的研发工作致力于为 OceanBase 建设一套完善的生态工具体系。 背景介绍
在互联网与云数据库技术的蓬勃发展下MySQL已在全球范围内被大规模使用。当前也有很多用户开始体验与MySQL高度兼容的分布式数据库OceanBase。面对从MySQL向OceanBase的迁移很多小体量的业务常通常依赖MySQL生态中的轻量级工具进行逻辑备份与数据导入导出。
为了让用户更轻便快捷的进行迁移OceanBase官方推出了多款专用的迁移工具如OMS、DataX开源版及OBLOADER等以在让用户能够沿用现有系统设计方案顺利完成数据库迁移。本文是以在离线导数方案来教大家使用 mysqldump 和 OBLOADER 完成一次数据库迁移的实践。同时在文末作者也会简单分享 OBLOADER 为了兼容 mysqldump 导出的文件格式的实现原理。 工具推荐
这一节我们会关注两个自研的生态工具mysqldump 和 OBLOADER。mysqldump 作为 MySQL社区免费的导数工具也常被用作MySQL逻辑备份程序。外部有不少用户的数据库运维系统也会集成mysqldump程序实现备份恢复功能。无论是导入导出还是备份恢复日常的操作都是出库和入库。首先我们介绍一下 MySQL 官方的介绍 提示: 1. mysqldump 支持导出 SQL-format, Delimited-text 文件格式 2. SELECT ... INTO OUTFILE 仅支持导出 Delimited-text 文件格式 3. SQL-format 文件格式可以使用 mysql 客户端导入 4. Delimited-text 文件格式使用 LOAD DATA 或者 mysqlimport 客户端 上述是我在阅读 MySQL 官方文档时提取出来与本文联系较大的内容。OBLOADER 需要能够正确识别 mysqldump 导出的文件。另外还要求用户熟练掌握 mysqldump 工具这样整个实践的过程才会更加顺畅。数据库导出包括Schema定义导出和表中的数据导出两部分内容。Schema导出只能使用 SQL-format格式但是数据导出会更加灵活mysqldump 同时支持 SQL-format 文件格式和 Delimited-text 文件格式。那么用户何时使用 SQL-format 文件格式何时使用 Delimtied-text 文件格式呢表中定义有二进制数据类型例如BIT, BINARY, VARBINARY, BLOB 以及BINARY字符集的字符类型时表中的数据必须按照 SQL-format 文件格式导出同时命令行加上 --hex-blob 选项该选项可以控制 mysqldump 对二进制数据进行十六进制编码处理。注意按照 Delimited-text 文件格式导出数据时mysqldump 是无法使用 --hex-blob 选项。表中没有定义二进制数据类型时强烈建议使用 Delimited-text 文件格式。下面我们结合MySQL导出和OceanBase导入操作来介绍工具的简单用法
MySQL CE 导出数据示例
SQL-format 格式导出示例不推荐
mysqldump -h127.0.0.1 -P 3306 -uroot -pxxx --databases test --compact --complete-insert --disable-keys --hex-blob test-data.sql S
说明该示例是将数据库中定义的Schema信息和表数据按照SQL-format格式写进同一份文件中。 示例中的关键选项说明
选项说明--compact导出产生更少用于调试的输出信息例如去掉注释和头尾等结构信息。--complete-insert导出的 Insert SQL 语句会带上列名。例如INSERT INTO table (column1, [column2...]) ...--disable-keys为了提升导入性能导出的 Insert SQL 语句前后加上开关延迟构建索引。--hex-blob对于二进制数据类型采用16进制字符串进行编码。--skip-extended-insert导出的 Insert SQL 语句是单行插入语句为了提升导入性能默认导出的是 Multi-values 格式。--net-buffer-length默认值是1MB最大值是16MB。该选项可以限制 Insert SQL 语句的长度。
提示为了降低文件的存储空间导出时可以加上一些命令行选项减少非必需的信息输出。 Delimited-text 格式导出示例推荐
mysqldump -h127.0.0.1 -P 3306 -uroot -pxxx --databases test --compact --fields-optionally-enclosed-by --fields-escaped-by \\ --fields-terminated-by , --lines-terminated-by \n --tab/var/tmp/;
说明该示例将数据库中定义的Schema和表数据分开导出Schema是按照SQL-format格式输出数据是按照标准的 CSV 格式输出CSV规范可参考 RFC-4180。 示例中的关键选项说明
选项说明--compact导出产生更少用于调试的输出信息例如去掉注释和头尾等结构信息。--fields-optionally-enclosed-by 指定列定界符。示例指定的是单引号。--fields-escaped-by \\指定转义符。示例指定的是反斜杠。--fields-terminated-by ,指定列分隔符。示例指定的是逗号。--lines-terminated-by \n指定行分隔符。示例指定的是 \n。注意不同操作系统的换行符有差异。--tab/var/tmp/指定Schema文件和数据文件的存放目录。 OceanBase 导入数据示例
本文是围绕着 OceanBase MySQL 模式来实践的由于 MySQL 与 Oracle 之间存在差异暂不涉及到 OceanBase Oracle 模式。基于上述的 MySQL 导出操作完成我们使用 OceanBase 自研的客户端导入工具 OBLOADER 完成数据库导入操作。第一步是将数据库中定义的Schema导入到OceanBase中。 SQL-format 格式导入示例不推荐
./obloader -hxxx.xxx.xxx -P2883 -ttenant -ccluster -uuser -pxxx --sys-password --mix -f /var/tmp Delimited-text 格式导入示例推荐
./obloader -hxxx.xxx.xxx -P2883 -ttenant -ccluster -uuser -pxxx --sys-password --csv -f /var/tmp 兼容性分析
在介绍解析 SQL-format 原理之前我们对于 mysqldump 导出的文件作一个简要的兼容性分析。SQL-format文件内容主要是可执行的SQL语句例如DCL, DDL, Insert SQL以及Comment信息。但是这些语句并非OceanBase是可以兼容的。下面举一个例子
/*!40000 ALTER TABLE t2 DISABLE KEYS */;
上述SQL语句在MySQL中称之为 single-line /*! */ version comments它与普通的 comments 区别在于SQL引擎并非直接跳过该注释语句而是根据条件选择性地执行上述语句SQL引擎会判断当前的MySQL数据库版本是否大于等于4.0.0只有版本满足条件才会执行后续的变更语句否则跳过。但是 OceanBase 会把上述语句当作普通的 multiple-line comment 语句处理这会导致 single-line /*! */ version comments 中定义的Schema可能会丢失最终造成数据库导入信息缺失的问题。同时OceanBase 语法、功能上也未支持上述ALTER语句的变更功能诸如此类的兼容问题较多。未来 OBLOADER 研发同学会考虑对于 mysqldump 导出的 SQL-format 文件进行分析、识别与转换处理最大程度保证数据库的定义信息可以导入进 OceanBase 中。 写在最后
数据库以及生态工具的兼容性处理是一项非常细致且复杂的工作。如果想开发一款好用的工具产品要求开发者对数据库的原理特性甚至是细节方面都有深入的了解和把握。OBLOADER 正在尝试解决异构数据库之间的导入导出所面对的各种兼容性的问题尽最大努力让同异构数据库之间的导入导出工作变得更加平顺一些。