默认情况下,InnoDB表不能通过直接复制表文件的方式在mysql服务器之间进行移植,即便使用了innodb_file_per_table选项。而使用Xtrabackup工具可以实现此种功能,不过只能"导出"具有.ibd文件的表,也就是说导出表的mysql服务器启用了innodb_file_per_table选项,而且要导出的表还是在启用该选项之后才创建的。

导入表的是,要求导入表的服务器版本是MySQL 5.6+,且启用了innodb_file_per_table选项。

(1). 导出表

导出表是在"准备"的过程中进行的,不是在备份的时候导出。对于一个已经备份好的备份集,使用"--apply-log"和"--export"选项即可导出备份集中的表。

假如以全备份集/bakdir/2017-04-02_17-41-38为例,要导出其中的表。

innobackupex --apply-log --export /bakdir/2017-04-02_17-41-38

在导出过程中,会看到如下信息:

1

2

xtrabackup:export metadata of table'backuptest/num_innodb' tofile `./backuptest/num_innodb.exp` (1 indexes)

xtrabackup:     name=PRIMARY,id.low=144, page=3

它说明了创建了一个.exp文件。

查看备份集目录下的backuptest目录,会发现多出了2个文件:.cfg和.exp,再加上.ibd文件,这3个文件是后续导入表时所需的文件。

-rw-r--r-- 1 root root  349 Apr  2 18:15 num_innodb.cfg
-rw-r----- 1 root root  16K Apr  2 18:15 num_innodb.exp
-rw-r----- 1 root root 8.4K Apr  2 17:41 num_innodb.frm
-rw-r----- 1 root root  31M Apr  2 17:41 num_innodb.ibd

其中.cfg文件是一种特殊的innodb数据字典文件,它和exp文件的作用是差不多的,只不过后者还支持在xtradb中导入,严格地讲,要将导出的表导入到MySQL5.6或者percona server 5.6中,".cfg"文件完全可以不需要,但是如果有该文件的话,会进行架构验证。

(2). 导入表

要在mysql服务器上导入来自于其它服务器的某innodb表,需要先在当前服务器上创建一个跟原表表结构一致的表,而后才能实现将表导入:

mysql> CREATE TABLE tabletest (...)  ENGINE=InnoDB;

然后将此表的表空间:

mysql> ALTER TABLE mydatabase.tabletest  DISCARD TABLESPACE;

接下来,将来自于"导出"表的的.ibd和.exp文件复制到当前服务器的数据目录,如果导入目标服务器是MySQL 5.6+,也可以复制.cfg文件。然后使用如下命令将其“导入”:

mysql> ALTER TABLE mydatabase.tabletest IMPORT TABLESPACE;

xtrabackup支持部分备份,意味着可以指定备份哪个数据库或者哪个表。

部分备份只有一点需要注意:在恢复的时候不要通过"--copy-back"的方式拷贝回datadir,而是应该使用导入表的方式。尽管使用拷贝的方式有时候是可行的,但是很多情况下会出现数据库不一致的状态。

(1). 备份

创建部分备份有三种方式:

  1. 通过"--include"选项可以指定正则来匹配要备份的表,这种方式要使用完整对象引用格式,即db_name.tab_name的方式。
  2. 将要备份的表分行枚举到一个文件中,通过"--tables-file"指定该文件。
  3. 或者使用"--databases"指定要备份的数据库或表,指定备份的表时要使用完整对象引用格式,多个元素使用空格分开。

使用前两种部分备份方式,只能备份innodb表,不会备份任何myisam,即使指定了也不会备份。而且要备份的表必须有独立的表空间文件,也就是说必须开启了innodb_file_per_table,更精确的说,要备份的表是在开启了innodb_file_per_table选项之后才创建的。第三种备份方式可以备份myisam表。

例如 --include='^back.*[.]num_*' ,将备份back字母开头的数据库中num开头的表,其中"[.]"的中括号不能少,因为正则中"."有特殊意义,所以使用中括号来枚举以实现对象的完整引用。

innobackupex --user=root --password=123456 --include='^back*[.]num_*' /bakdir/

使用"--include"和"--tables-file"备份后,会生成一个时间戳目录,目录中只有和要备份的表有关的文件。

[root@xuexi data]# ls /bakdir/2017-04-02_17-35-46/
backup-my.cnf  ibdata1  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile

如果使用的是--databases选项,则会生成一个时间戳目录,里面有备份的数据库代表的目录,如果只备份了某个表,则该数据库目录中只有该表相关的文件。

innobackupex --user=root --password=123456 --databases='mysql.user backuptest' /bakdir/

上面只备份mysql.user表和backuptest数据库,在生成的时间戳目录中将有两个mysql目录和backuptest目录。

[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/
backup-my.cnf  backuptest  ibdata1  mysql  xtrabackup_binlog_info  xtrabackup_checkpoints  xtrabackup_info  xtrabackup_logfile[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/backuptest/
db.opt  num_innodb.frm  num_innodb.ibd  num_isam.frm  num_isam.MYD  num_isam.MYI[root@xuexi data]# ls /bakdir/2017-04-02_17-41-38/mysql/
user.frm  user.MYD  user.MYI

innobackupex实现导出和导入单张表相关推荐

  1. oracle如何导出和导入数据库/表

    oracle如何导出和导入数据库/表 oracle如何将项目中的表导出后在导入自己的数据库中,这是一个完整的操作,对于数据库备份或在本地查看数据验证数据进场用到,一般情况下我都用dos黑窗口进行操作, ...

  2. 2019-7-27 [MySQL] DQL 简单查询[别名/去重/运算] 条件查询 排序查询 聚合查询 分组查询 导出与导入 多表操作[一对多/多对多][创外键 创联合主键 约束 添加 删除 测试]

    文章目录 5 SQL语句(DQL) 5.1DQL准备工作和语法 5.1.1准备工作 5.1.2 DQL语法: 5.2 简单查询 5.2.1 查询所有的商品 5.2.2 查询商品名和商品价格. 5.2. ...

  3. 使用si ob 导出,导入部分表

    1.导出 2.导入 参考:http://www.presoft.com.cn/ob/course/No6_transfer_B.html

  4. oraclek导出表_oracle如何导出和导入数据库/表

    oracle如何将项目中的表导出后在导入自己的数据库中,这是一个完整的操作,对于数据库备份或在本地查看数据验证数据进场用到,一般情况下我都用dos黑窗口进行操作,简单记录下,毕竟好记性不如烂笔头嘛! ...

  5. postgresql 数据库导出和导入

    简介 本篇文章主要介绍PostgreSQL库和表的导出和导入以及常用的数据库管理工具的使用 一.数据库的导出和导入 1. 使用pgAdmin导出和导入数据库 导出 导入 新建数据库,右键Restore ...

  6. Oracle对数据的导出和导入,建立用户,删除用户以及其下的所有表

    转自:http://blog.csdn.net/angus_17/article/details/7675302 1.对数据的导出: a.备份单张表 :exp  userid=scott/centre ...

  7. mysq命令行导出sql_MySQL命令行导出、导入数据库,备份数据库表

    MySQL导出数据库/数据表 1.首先,将你MySQL安装目录,例如C:\Program Files\MySQL\MySQL Server 5.7\bin添加到你的系统环境变量PATH中: 2.导出数 ...

  8. Oracle数据库表导出和导入csv文件操作

    Oracle数据库表导出和导入csv文件操作 数据库是Oracle 9i 1.导出csv文件 这个十分简单,用pl/sql工具即可,首先选中要导出的表,右键选择Query data,在左侧出现的窗口中 ...

  9. PL/SQL导入/导出dmp文件-Oracle表空间不一致

    背景 今天进行UAT数据还原到SIT时,两个环境Oracle数据库用户和表空间不一致,刚开始没在意,经过一翻反复导入导出发现最终导入的只有表结构,数据始终无法导入. 导入的表结构 .sql文件和表数据 ...

最新文章

  1. gprof 使用例程(转)
  2. spring整合webservice
  3. django入门与实践 3-1 环境搭建
  4. [渝粤教育] 西南科技大学 微机原理与应用 在线考试复习资料(1)
  5. [html] 使用a标签的download属性下载文件会有跨域问题吗?如何解决?
  6. 如何实现动态水球图 --》 echars结合echarts-liquidfill实现
  7. javascript 开发多种类型的应用(Electron 跨平台开发)
  8. Android 5.0 十大新特性
  9. nginx开发从入门到精通【淘宝核心系统服务器】
  10. maven配置私服信息
  11. linux宿主机文件拷贝,linux 虚拟机和宿主机相互拷贝文件
  12. 机器学习中的GPU硬件设备及共享访问
  13. deepIn 、 DDE 系统桌面黑屏解决方案
  14. Matlab中ind2sub函数的使用
  15. Holy Grail 计蒜客41305
  16. 表格数据横向转纵向并在el-table中渲染
  17. stm32c8t6+dht11+MQ系列环境检测模块+oled显示屏(基于物联网的家庭环境检测系统设计)
  18. routeros php插件,RouterOS的Webfig的使用方法
  19. 读书笔记《CSS权威指南》
  20. java实现点歌操作_Java中linked list集合实现KTV点歌台功能

热门文章

  1. 零基础学python难_0基础学python有多难
  2. 天龙八部服务器都需要那种系统,天龙八部排行榜系统怎么看 排行榜系统分类介绍...
  3. qt使用动画提示正在载中
  4. jq之$(“a[target=‘_blank‘]“)
  5. 浅析Linux开发工具之Makefile
  6. [Leetcode456]132模式 - 单调栈
  7. 云服务器 管理控制台_关于小白如何初步管理自己的云服务器
  8. android 移除fragment,Android Viewpager+Fragment取消预加载及Fragment方法的学习
  9. 卸载 windows_Windows 10可能很快会自动卸载有问题的Windows更新
  10. .class文件转换.java_Java中的动态链接VS操作系统动态链接