MySQL管理工具MySQL Utilities — mysqldbexport(8)

mysqldbexport 从一个或多个数据库导出对象定义的元数据和数据。默认情况下,仅仅导出对象的定义。与mysqldump类似,但区别也大。mysqldbexport 可以有多个格式,使数据更容易提取和转移。

要排出特定对象名称,可以使用–exclude选项,格式:db.*obj* 。也可以提供一个搜索模式。如 –exclude=db1.trig1 ,排除单个触发器。–exclude=trig_ 排除以trig_开头的。也可以使用正则表达式。

跳过对象类型,可以使用–skip选项指定对象列表。这在为了提取某个特定对象情况下,非常有用。同样,跳过BLOB数据更新可以指定 –skip-blobs选项。

输出格式有:

  • sql (默认)以SQL语句方式输出。对于对象定义,以适当的 CREATE 和 GRANT 语句。 对于数据,以 INSERT 语句。(或者批量插入 --bulk-insert指定该选项。.
  • grid网格化输出,类似于mysql命令行客户端输出
  • csv逗号分隔格式输出
  • tab制表符格式输出
  • vertical类似于mysql命令行客户端\G执行的输出

指定要显示多少数据,可以使用 --display 选项:

  • brief只显示重建对象的最小列
  • full完整显示重建对象的列列表
  • names只显示对象名称

注意:对于SQL格式输出,–display选项被忽略。

指定 –no-headers 选项,关闭CSV或tab显示对象的格式头部。

指定–quiet选项,关闭所有反馈信息。

指定 –file-per-table选项,每个表数据单独保存。每个文件的名称以数据库和表名称组成。格式:db1.*table_name*.csv。

默认情况下,复制操作是使用一致性快照来读取源数据库。要改变锁定模式,可以使用–locking选项来指定锁定类型值。值no-locks关闭锁,lock-all只使用表锁。默认是snapshot。此外,使用WRITE锁,在复制过程中将锁定目标表。

从主或者从服务器导数据还可以包含复制语句。–rpl选项指定

  • master包含 CHANGE MASTER 语句,使目标服务器作为指定–server选项的从。在导数据之前,执行 STOP SLAVE 语句。在完成后执行 CHANGE MASTER 和 START SLAVE语句。slave包含 CHANGE MASTER 语句,使目标服务器成为与–server选项指定的服务器的同一个主服务器的从。只对当前服务器是从有效。
  • both同时包含 ‘master’ 和 ‘slave’ 信息的 CHANGE MASTER 语句 ,可以成为当前服务器的新从,也可以成为主。

–repl-user选项指定复制的用户名和密码。如果指定了–rpl-file选项,复制语句信息写入到文件中,而不是输出流。–comment-rpl选项,注释掉CHANGE MASTER 语句。

如果要导出的数据库的服务器上启用了GTIDs(GTID_MODE = ON),如果只导出其中一部分数据库,将会有警告信息产生。这是因为GTID报表生成包括所有数据库的gtids,不仅仅是某个的。

如果有启用GTID,但是使用了–skip-gtid也会收到警告。

如果启用了GTID,最好是导出或导入所有的数据库。

从另一台服务器上导入这些导出的数据,需要确保这些数据以及日志中所有的GTIDs正确记录。

选项

必需提供连接参数和赋予要访问对象的适当权限。

从源服务器上导出所有对象,必须要有:SELECT、SHOW VIEW权限,同时还需要有mysql数据库的SELECT权限。实际所需的权限可能会有所不同,以实际情况为准。

对于 –format, –export 和 –display 选项,参数值不区分大小写,但是不能参数值钱不能包含空格。

实例

只导出定义语句

只导出数据,且是批量插入语句:

如果数据库中并不是所有的表是innodb引擎的,为了确保数据的一致性,需要在导出前锁定表。可以加上–locking=lock-all选项:

为当前的数据库创建一个从服务器:

既然有 mysqldbexport 那就有mysqldbimport 。实物都是对立存在的。 有男就有女,有矛就有盾.