`

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。

  1. 在server_A上
  2. 在server_B上
  3. 在server_B上
    放弃现有的表空间。在表空间导入前,InnoDB必须丢弃已连接到接受表的表空间。
  4. 在server_A上
    执行FLUSH TABLES ... FOR EXPORT语句静默表并生成.cfg元数据文件。FLUSH TABLES ... FOR EXPORT 这个执行之后,会话不能退出,否则cfg自动消失。

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

    文件.ibd和.cfg必须在释放共享锁之前复制。
  6. 在server_A上
    释放FLUSH TABLES ... FOR EXPORT语句锁
  7. 在server_B上
    导入表空间

Transportable Tablespace 内幕

以下说明在表空间传输过程中的内部和错误日志信息。

  1. 当在server_B上执行ALTER TABLE ... DISCARD TABLESPACE
    该表锁定在X模式下
    表空间从该表分离
  2. 当在server_A上执行FLUSH TABLES ... FOR EXPORT
    表锁定在共享模式下
    purge coordinator 线程停止
    脏页被同步到磁盘上
    表元数据写入到二进制.cfg文件中
    日志信息如下:
  3. 当在server_A上执行UNLOCK TABLES
    二进制.cfg文件将删除
    共享锁将释放,purge coordinator 线程将重启
    日志信息如下:
  4. 当在server_B上执行ALTER TABLE ... IMPORT TABLESPACE
    每个表空间页面将检查损坏
    每个空间ID和日志序号(LSN)将更新
    标志有效的和LSN更新头页
    Btree页将更新
    页面状态被设置为脏将被写入到磁盘
    日志信息如下:

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

 

转至:

https://www.ttlsa.com/mysql/mysql-backup-recovery-innodb-table/

分享到:
评论

相关推荐

    MySQL备份与恢复记录

    MySQL备份与恢复是数据库管理中的关键任务,确保数据安全和业务连续性。在本文中,我们将探讨两种主要的MySQL备份方法——冷备份和工具备份,以及如何进行恢复操作。 首先,冷备份是最简单的备份方式,它涉及在...

    MySQL InnoDB Cluster安装.docx

    它基于InnoDB存储引擎,提供了一种自动化的故障切换和数据复制功能,确保即使在单个节点故障时,整个集群也能保持运行。以下是根据提供的文档内容详细解释搭建MySQL InnoDB Cluster的步骤: 1. **安装准备**: 在...

    InnoDB: Hot Backup Manual

    使用备份恢复数据并启动MySQL服务: ``` innobackup --start mysqld my2.cnf ``` ##### 5.4 示例:将数据库恢复至原始位置 将备份数据恢复至原位: ``` innobackup --restore my2.cnf ``` ##### 5.5 示例:为...

    MySQL备份与恢复(PDF版)借鉴.pdf

    InnoDB表的碎片整理可以通过`ANALYZE TABLE`或`OPTIMIZE TABLE`命令进行,而模糊检查点(fuzzy checkpoint)是指在InnoDB中的一种优化策略,用于控制redo log的刷新,以平衡性能和安全性。 MySQL的恢复操作通常涉及...

    MySQL 项目备份方案建议

    - 全量备份恢复测试:1.1GB InnoDB表的恢复,耗时大约5秒。 - 增量备份恢复 - 结论:对于含有1.7GB MyISAM表的数据库,恢复总耗时约为1分50秒。 **结论** XtraBackup提供了高效的物理热备解决方案。相比于...

    MYSQL innodb性能优化学习总结

    - **innodb_file_per_table**:该参数控制InnoDB是否为每个表使用独立的数据表空间,建议设置为1,以避免共享表空间(ibdata1)可能带来的问题,例如难以进行数据库的备份和恢复。 - **innodb_stats_on_metadata**...

    深入分析MySQL 的备份和恢复机制

    InnoDB表的备份则更复杂,因为所有表数据都存储在单个或多个`.ibd`文件中,通常需要配合binlog一起使用。 对于InnoDB表,由于其事务处理和行级锁定特性,备份更为复杂。除了拷贝数据文件外,通常会结合binlog备份,...

    MySQL数据恢复的三种常用的方式

    当单个 `.ibd`(InnoDB 表空间)文件丢失时,如果有备份,可以采取以下步骤: - 创建一个与丢失表结构相同的测试表。 - 使用 `ALTER TABLE DISCARD TABLESPACE` 丢弃目标表的 `.ibd` 文件。 - 刷新源表,以便...

    MySQL数据恢复

    MySQL提供了多种内置工具来支持数据备份和恢复,例如`mysqldump`,这是一个命令行工具,用于创建数据库或表的SQL脚本备份。通过运行这些脚本,可以在需要时恢复数据。此外,还有`mysqlpump`,它是`mysqldump`的更...

    mysql8备份-centos8.zip

    1. **mysqldump**: 这是MySQL官方提供的命令行工具,可以生成SQL脚本来还原整个数据库或单个表。例如,要备份所有数据库,可以运行`mysqldump -u root -p --all-databases > backup.sql`,这将创建一个名为`backup....

    MYSQL-innodb性能优化学习总结.pdf

    8. **innodb_file_per_table**:开启后,每个InnoDB表都有独立的数据文件,便于管理、备份和恢复。默认关闭时所有表共享一个表空间,可能导致空间无法自动收缩。 9. **innodb_stats_on_metadata**:关闭时,统计...

    MySQL 从全库备份中恢复指定的表和库示例

    但是,如果我们需要从全库备份中恢复单个表,比如名为“t”的表,可以使用正则表达式来提取该表的结构和数据。以下是提取表结构的命令: ```bash # 提取表结构 [root@HE1 ~]# sed -e'/./{H;$!d;}' -e 'x;/CREATE ...

    mysql Unable to lock ./ibdata1, error: 11

    - `mysqldump`:用于备份MySQL数据库,可帮助在出现问题时恢复数据。 - `mysqladmin`:提供数据库管理功能,如强制关闭MySQL服务。 - `mysqlcheck`:MySQL的诊断工具,能检查、修复和分析表。 综上所述,当遇到...

    Mysql数据备份与mysqldump增量备份.pdf

    本文主要探讨了两种常见的MySQL备份方法:直接拷贝数据库文件和使用mysqldump进行增量备份。 **一、直接拷贝数据库文件** 直接拷贝MySQL的数据文件是一种快速且简便的备份方式,尤其适用于MyISAM存储引擎的表,...

Global site tag (gtag.js) - Google Analytics