首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

数据库导入导出基础扫盲

在使用MySQL/Oracle数据库过程中,难免会遇到数据迁移的需求,此时就需要使用工具对数据执行提取和导入操作。由于业务暂时只涉及同构数据库的数据迁移(即MySQL->MySQL和Oracle->Oracle),并且不考虑导数过程中的增量数据,因此不会使用ETL工具,而是使用基本的逻辑导出和逻辑导入的方式来执行。最近做了一些实验,在此总结一下。

在导入导出工具的选择上,使用 进行MySQL的数据导入导出,使用 进行Oracle的数据导入导出。接下来分别对这两种数据库的迁移过程作介绍。

mydumper/myloader

常用的MySQL逻辑备份工具主要有Oracle官方的 和 ,以及本篇文章介绍的 这三种。之所以不选用官方工具是由于 是单线程的备份工具,性能比较差;而 只支持备份5.7之后版本的MySQL且单表依然是单线程导出。 既支持多线程,也支持5.6版本,是比较合适的选择。

安装过程不再赘述,直接介绍 命令常用的几个参数,其余参数可以通过 命令查询:

另外,连接数据库的参数(-u, -p, -h 等)与mysql命令的代表的意思一致。举几个例子说明 使用方法:

导出的文件分为4种类型,分别为:

包含导出时刻的binlog 位点信息 ,如果启用gtid ,则记录gtid信息。

数据文件,包含insert语句,如果是空表默认不生成此文件。

包含建表语句

包含建库语句

以第三条命令为例,执行后生成的备份文件如下:

可以看出由于testdb.b里没有数据,因此没有生成相应的数据文件。

相应地,对于导入工具 ,经常使用的参数有:

这里解释下第二条命令:“依据备份文件的命名规则导入到相应目标库”。上面提到 生成的文件有特定的格式,除了 之外的备份文件都是以db名开头的,这样就可以保证在执行 命令时不使用 参数指定目标db也能顺利执行,由程序按照命名规则判断导入到哪个db。经过测试发现,通过修改特定备份文件的db前缀,就可以达到控制此文件的导入db的目的。这样也变相使得 工具拥有了同时对多个db名进行remap的能力。

expdp/impdp

oracle 10g之前的版本提供了导出和导入实用程序( ),大家应该比较熟悉。它们在oracle 11g中仍然可以使用,但是Oracle官方强烈建议使用数据泵( )来代替,因为数据泵不仅性能更好,还提供了更多的高级特性,例如通过 、 两个参数提供了非常细粒度的目标对象控制,通过 、 、 几个参数实现导入过程中自动修改对象属主、 表名或数据所在表空间。对于部分担心还要重新学习新命令使用方式而依然坚守 的dba们,数据泵还提供了legacy模式,用于支持之前的 的参数写法。不过有两点需要注意:一是数据泵是服务器端工具,而不是客户端工具;二是 在备份之前需要建立辅助的master table,因此只能在可写的库上执行导出程序。

数据泵不支持直接指定备份文件的操作系统路径,而是使用oracle的directory对象映射到服务器的实际目录。如果未指定directory对象,oracle将使用默认的目录对象DATAPUMPDIR,但只有SYS和SYSTEM用户才可以使用这个默认目录。为了使用自己指定的路径,一般都新建一个directory并授权给数据泵用户:

输入 命令可以显示出 命令的帮助信息, 也一样。介绍一些常用参数:

以下示例都使用SYS用户连接,这样就会避免遇到各种权限问题。数据库版本是11.2.0.4。

注意示例2在导出元数据时排除掉了表和索引的统计信息,这是因为如果 导入带有统计信息的表结构到新库,会出现统计信息锁定的问题。通过查询以下几张视图,可以获取到所有可以在导出时过滤掉的对象的类型: (FULL模式), (SCHEMA模式), (TABLE和TABLESPACE模式)。

例如下面的查询就列出了在SCHEMA操作模式下默认会被导出的与权限相关的对象:

不同于MySQL,使用 导入数据到库时一定要注意表空间的问题。在使用 和 操作模式的时候,导出文件中的建库建表语句会带上表空间的名字,但不会包含创建表空间的语句。因此在导入数据的时候,要保证目标库中已经存在了相关表空间;如果使用了 参数,要保证映射后的表空间存在,如果目标库表空间不存在是会报错的。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180706G1HOCQ00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券