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. IDEA 笔记汇总

    Intellij IDEA 像eclipse那样给maven添加依赖 Intellij idea maven 引用无法搜索远程仓库的解决方案 Intellij IDEA 封装Jar包(提示错误: 找不 ...

  2. P4859 已经没有什么好害怕的了

    传送门 见计数想容斥 首先题目可以简单转化一下, 求 糖果比药片能量大的组数比药片比糖果能量大的组数多 $k$ 组 的方案数 因为所有能量各不相同,所以就相当于求 糖果比药片能量大的组数为 $(n+k ...

  3. css变量的应用

    微软在2017年3月份宣布 Edge 浏览器将支持 CSS 变量,到现在已经过去一年多了,哈哈,是不是有点后知后觉? 这个知识点是在阮一峰的日志上浏览到的,在此借用一下了..跟大家分享一下..... ...

  4. 在linux上安装 sql server for linux

    在linux上安装 sql server for linux Install SQL Server on Red Hat Enterprise Linux Install SQL Server To ...

  5. python-锁机制

    锁 Lock() Lock(指令锁)是可用的最低级的同步指令.Lock处于锁定状态时,不被特定的线程拥有.Lock包含两种状态——锁定和非锁定,以及两个基本的方法. 可以认为Lock有一个锁定池,当线 ...

  6. Ubuntu系统Apache Maven安装

    操作系统:Linux x64 / Ubuntu 14.04 Apache Maven版本:3.3.9 建议预先搭建Java开发环境:详见上一篇<Linux Ubuntu系统下Java开发环境搭建 ...

  7. Tomcat的配置文件Server.xml解析

    配置元素说明: 元素名 属性 解释 server port 指定一个端口,这个端口负责监听关闭tomcat 的请求 shutdown 指定向端口发送的命令字符串 service name 指定serv ...

  8. 开始使用 Vuejs 2.0 ---简单总结1

    Vue.js(读音 /vjuː/, 类似于 view) 是一套构建用户界面的 渐进式框架.与其他重量级框架不同的是,Vuejs 采用自底向上增量开发的设计.Vuejs 的核心库只关注视图层,并且非常容 ...

  9. 【LeetCode题解】2_两数相加

    目录 [LeetCode题解]2_两数相加 描述 方法一:小学数学 思路 Java 代码(非递归写法) Java 代码(递归写法) Python 代码(非递归写法) [LeetCode题解]2_两数相 ...

  10. 【转载】在Angular 2/Typescript中声明全局变量的最佳方式是什么?

    问题详细描述 我想在Typescript语言中的Angular 2中声明一些全局可见的变量.最佳的实践方法是? 推荐的实现方法 这是最简单的解决方案,无需使用Service或Observer: 将全局 ...