MySQL 备份恢复单个innodb表呢,对于这种恢复我们我们很多朋友都不怎么了解了,下面一起来看一篇关于MySQL 备份恢复单个innodb表的教程

在实际环境中,时不时需要备份恢复单个或多个表(注意:这里除非明确指定,所说的表一律指InnoDB表),而对于innodb引擎恢复单个表需要整体的恢复,xtrabackup也可以单个表恢复,只不过是用的正则过滤的,不知最新版本是否支持表空间传输特性。本文将要说说怎么移动或复制部分或全部的表到另一台服务器上,而所要用到的技术点就是transportable tablespace特性,这就意味着MySQL5.6.6以及以上版本才支持。
表空间传输特性允许表空间从一个实例移动到另一个实例上。这在以前版本上,这对InnoDB表空间是不可能的,因为所有的表数据都是系统表空间的一部分。
在MySQL5.6.6以及更改版本,FLUSH TABLES ... FOR EXPORT 语法准备将InnoDB表复制到另一台服务器,然后在另一台服务器上执行ALTER TABLE ... DISCARD TABLESPACE 和 ALTER TABLE ... IMPORT TABLESPACE 将数据导入。将.cfg 和 .ibd 文件复制过去,用于在导入时更新表元数据,如空间ID。
使用限制和说明
innodb_file_per_table必须设置为on,在 MySQL5.6.6版本默认是开启的。居留在共享系统表空间的表不能静默。

当表静默时,只有只读事务被允许。

当导入表空间时,页面大小必须与导入实例的页面大小相符合。
DISCARD TABLESPACE 不支持分区表,也就意味着transportable tablespaces 也不支持分区表。如果在分区表上执行ALTER TABLE ... DISCARD TABLESPACE 将会返回下面的错误信息:ERROR 1031 (HY000): Table storage engine for 'part' doesn't have this option.
当foreign_key_checks=1时,DISCARD TABLESPACE 不支持主键外键约束关系。操作这些表时需要设置为foreign_key_checks。
ALTER TABLE ... IMPORT TABLESPACE 不强制外键约束。如果表之间有外键约束,所有的表应该在同一个时间点被导出。
ALTER TABLE ... IMPORT TABLESPACE 导入表空间不要求.cfg元数据文件。然而在导入时缺少了.cfg文件元数据检查就无法完成,或返回下面的信息:InnoDB: IO Read error: (2, No such file or directory) Error opening '.\test\t.cfg', will attempt to import without schema verification 1 row in set (0.00 sec) 。
当没有不匹配的表结构时,导入没有.cfg文件可能会更方便。此外,在元数据不能从.ibd文件中收集的故障恢复时,导入没有.cfg可能更有用的。
导出导入的MySQL版本需要相同。否则,文件必须要在导入的服务器上创建。
在复制架构中,主和从必须设置innodb_file_per_table=1。
在windows中,文件是不区分大小写的,而Linux和unix是区分大小写的,在跨平台导入导出时,需要设置lower_case_table_names=1。
将表空间复制到另一台上
此过程将演示如何从一个运行的MySQL服务器实例上将表空间复制到另一台上。假设源实例为server_A,目的实例为server_B。
在server_A上

mysql> use test;
mysql> CREATE TABLE ttlsa(id INT) engine=InnoDB;

在server_B上

mysql> use test;
mysql> CREATE TABLE ttlsa(id INT) engine=InnoDB;

在server_B上
放弃现有的表空间。在表空间导入前,InnoDB必须丢弃已连接到接受表的表空间。

mysql> ALTER TABLE ttlsa DISCARD TABLESPACE;

在server_A上
执行FLUSH TABLES ... FOR EXPORT语句静默表并生成.cfg元数据文件。FLUSH TABLES ... FOR EXPORT 这个执行之后,会话不能退出,否则cfg自动消失。

mysql> use test;
mysql> FLUSH TABLES ttlsa FOR EXPORT;

文件.cfg创建在InnoDB数据目录。
在server_A上
复制.ibd和.cfg文件到server_B上

shell> scp /path/to/datadir/test/ttlsa.{ibd,cfg} destination-server:/path/to/datadir/test

文件.ibd和.cfg必须在释放共享锁之前复制。
在server_A上
释放FLUSH TABLES ... FOR EXPORT语句锁

mysql> use test;
mysql> UNLOCK TABLES;

在server_B上

导入表空间

mysql> use test;
mysql> ALTER TABLE ttlsa IMPORT TABLESPACE;

Transportable Tablespace 内幕

以下说明在表空间传输过程中的内部和错误日志信息。
当在server_B上执行ALTER TABLE ... DISCARD TABLESPACE
该表锁定在X模式下
表空间从该表分离
当在server_A上执行FLUSH TABLES ... FOR EXPORT
表锁定在共享模式下
purge coordinator 线程停止
脏页被同步到磁盘上
表元数据写入到二进制.cfg文件中

日志信息如下:

[Note] InnoDB: Sync to disk of '"test"."ttlsa"' started.
 [Note] InnoDB: Stopping purge
 [Note] InnoDB: Writing table metadata to './test/ttlsa.cfg'
 [Note] InnoDB: Table '"test"."ttlsa"' flushed to disk

当在server_A上执行UNLOCK TABLES
二进制.cfg文件将删除
共享锁将释放,purge coordinator 线程将重启
日志信息如下:

[Note] InnoDB: Deleting the meta-data file './test/ttlsa.cfg'
 [Note] InnoDB: Resuming purge
当在server_B上执行ALTER TABLE ... IMPORT TABLESPACE

每个表空间页面将检查损坏
每个空间ID和日志序号(LSN)将更新
标志有效的和LSN更新头页
Btree页将更新
页面状态被设置为脏将被写入到磁盘
日志信息如下:

[Note] InnoDB: Importing tablespace for table 'test/ttlsa' that was exported from host 'ubuntu'
 [Note] InnoDB: Phase I - Update all pages
 [Note] InnoDB: Sync to disk
 [Note] InnoDB: Sync to disk - done!
 [Note] InnoDB: Phase III - Flush changes to disk
 [Note] InnoDB: Phase IV - Flush complete

下文实际操作。理论弄清楚了,实际操作就知道是咋么一回事了。还是那句话,死磕手册

MySQL 备份恢复(导入导出)单个 innodb表的更多相关文章

  1. 云服务器 ECS Linux 系统 MySQL 备份的导入导出

    MySQL 备份的导出 注意: 如果您使用的是帮助中心的一键环境配置,那么 MySQL 的安装目录是 /alidata/server/mysql. 如果您将 MySQL 安装到其他目录,您需要输入您 ...

  2. MySQL导入导出数据和表结构 source和mysqldump

    MySQL导入数据的方式: 1.使用source /dir/test.sql导入数据进入数据库:查询数据库编码格式show variables like "%char%";设置编码 ...

  3. linux mysql 数据库操作导入导出 数据表导出导入

    linux mysql 数据库操作导入导出 数据表导出导入 1,数据库导入 mysql -uroot -p show databases; create database newdb; use 数据库 ...

  4. 《MySQL数据库》MySQL备份恢复

    前言 MySQL数据库最重要的部分就是数据,所以保证数据不被损坏尤为重要,大家都知道911事件,当时非常多的数据丢失,导致经济混乱.接下来我们就来讲讲MySQL是如何保障数据完整,应对特殊情况,如何恢 ...

  5. Linux下MySql数据的导入导出

    1,每天4点备份mysql数据: 2,为节省空间,删除超过3个月的所有备份数据: 3,删除超过7天的备份数据,保留3个月里的 10号 20号 30号的备份数据: mysqldump -u用戶名 -p密 ...

  6. (oracle/mysql)启停,导入导出,DB字符集

    ==================================================================================== DB启动停止 ======== ...

  7. MongoDB系列----备份与导入导出

    参考: http://my.oschina.net/xiaomaoandhong/blog/63471,<> 1.停掉服务器 然后备份 Mongodb将所有数据都存放在"数据目录 ...

  8. Mysql:数据库导入导出

    Mysql:数据库导入导出 Mysql数据库导出 mysqldump -h IP -u 用户名 -p 数据库名 > 导出的文件名 1.mysqldump是在cmd下的命令,需要在linux命令行 ...

  9. MySQL问题记录——导入导出权限设置

    MySQL问题记录——导入导出权限设置 摘要:本文主要记录了在使用MySQL的过程中导入导出权限设置时遇到的问题以及解决方案. 相关日志 [Note] --secure-file-priv is se ...

随机推荐

  1. Python turtle库学习笔记

    1.简介 Python的turtle库的易操作,对初学者十分友好.对于初学者来说,刚学编程没多久可以写出许多有趣的可视化东西,这是对学习编程极大的鼓舞,可以树立对编程学习的信心.当然turtle本身也 ...

  2. Java NIO学习与记录(二):FileChannel与Buffer用法与说明

    FileChannel与Buffer用法与说明 上一篇简单介绍了NIO,这一篇将介绍FileChannel结合Buffer的用法,主要介绍Buffer FileChannel的简单使用&Buf ...

  3. 利用CSS 修改input=radio的默认样式(改成选择框)

    html部分: <input id="item2" type="radio" name="item"> <label fo ...

  4. Java并发编程——阻塞队列BlockingQueue

    Java 并发编程系列文章 Java 并发基础——线程安全性 Java 并发编程——Callable+Future+FutureTask java 并发编程——Thread 源码重新学习 java并发 ...

  5. javascript004引用类型

    –掌握数组的概念.特性.常用方法(重点) –掌握Object,学会使用对象(重中之重) –了解其他引用类型对象 一:数组 •在ECMAScript中数组是非常常用的引用类型了.ECMAScript所定 ...

  6. php 使用 rabbitmq

    1,配置好rabbitmq 服务器 (参照 http://www.cnblogs.com/spicy/p/7017603.html)(我是linux) 2,新增了一个用户 并点击该用户 增加权限如下

  7. ubuntu 添加多个IP

    上次这个问题 :  UBUNTU 无法解析域名 解决方法 解决后,每次重启电脑都需要重新配置 /etc/resolv.conf. 这次添加IP的时候留心发现,在/etc/network/interfa ...

  8. Android多媒体之照相机

    1.调用系统的照相机 public void click(View view) { // 激活系统的照相机拍照 Intent intent = new Intent("android.med ...

  9. FocusBI:租房分析可视化(PowerBI网址体验)

    微信公众号:FocusBI关注可了解更多的商业智能.数据仓库.数据库开发.爬虫知识及沪深股市数据推送.问题或建议,请关注公众号发送消息留言;如果你觉得FocusBI对你有帮助,欢迎转发朋友圈或在文章末 ...

  10. 【扫盲】】32位和64位Windows的区别

    用户购买windows安装盘或者重新安装操作系统的时候,通常会遇到这个问题,就是不知道该如何选择使用32位操作系统和64位操作系统,有人说64位系统速度快,其实理论上确实是这样,不过具体还要根据你的个 ...