设为首页 收藏本站
查看: 965|回复: 0

[经验分享] MySQL 备份恢复单个innodb表

[复制链接]

尚未签到

发表于 2018-10-5 13:03:38 | 显示全部楼层 |阅读模式
  在实际环境中,时不时需要备份恢复单个或多个表(注意:这里除非明确指定,所说的表一律指InnoDB表),而对于innodb引擎恢复单个表需要整体的恢复,xtrabackup也可以单个表恢复,只不过是用的正则过滤的,不知最新版本是否支持表空间传输特性。本文将要说说怎么移动或复制部分或全部的表到另一台服务器上,而所要用到的技术点就是transportable tablespace特性,这就意味着MySQL5.6.6以及以上版本才支持。
  表空间传输特性允许表空间从一个实例移动到另一个实例上。这在以前版本上,这对InnoDB表空间是不可能的,因为所有的表数据都是系统表空间的一部分。

  在MySQL5.6.6以及更改版本,FLUSH TABLES ... FOR EXPORT 语法准备将InnoDB表复制到另一台服务器,然后在另一台服务器上执行ALTER TABLE ... DISCARD TABLESPACE 和>使用限制和说明

  •   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上
      1
      2
      mysql> use test;
      mysql> CREATE TABLE ttlsa(id INT) engine=InnoDB;
  •   在server_B上
      1
      2
      mysql> use test;
      mysql> CREATE TABLE ttlsa(id INT) engine=InnoDB;
  •   在server_B上
      放弃现有的表空间。在表空间导入前,InnoDB必须丢弃已连接到接受表的表空间。
      1

      mysql>>
  •   在server_A上
      执行FLUSH TABLES ... FOR EXPORT语句静默表并生成.cfg元数据文件。FLUSH TABLES ... FOR EXPORT 这个执行之后,会话不能退出,否则cfg自动消失。
      1
      2
      mysql> use test;
      mysql> FLUSH TABLES ttlsa FOR EXPORT;
      文件.cfg创建在InnoDB数据目录。
  •   在server_A上
      复制.ibd和.cfg文件到server_B上
      1
      shell> scp /path/to/datadir/test/ttlsa.{ibd,cfg} destination-server:/path/to/datadir/test
      文件.ibd和.cfg必须在释放共享锁之前复制。
  •   在server_A上
      释放FLUSH TABLES ... FOR EXPORT语句锁
      1
      2
      mysql> use test;
      mysql> UNLOCK TABLES;
  •   在server_B上
      导入表空间
      1
      2
      mysql> use test;

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

  •   当在server_B上执行ALTER TABLE ... DISCARD TABLESPACE
      该表锁定在X模式下
      表空间从该表分离
  •   当在server_A上执行FLUSH TABLES ... FOR EXPORT
      表锁定在共享模式下
      purge coordinator 线程停止
      脏页被同步到磁盘上
      表元数据写入到二进制.cfg文件中
      日志信息如下:
      1
      2
      3
      4
      [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 线程将重启
      日志信息如下:
      1
      2
      [Note] InnoDB: Deleting the meta-data file './test/ttlsa.cfg'
      [Note] InnoDB: Resuming purge
  •   当在server_B上执行ALTER TABLE ... IMPORT TABLESPACE
      每个表空间页面将检查损坏
      每个空间ID和日志序号(LSN)将更新
      标志有效的和LSN更新头页
      Btree页将更新
      页面状态被设置为脏将被写入到磁盘
      日志信息如下:
      1
      2
      3
      4
      5
      6
      [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
  下文实际操作。理论弄清楚了,实际操作就知道是咋么一回事了。还是那句话,死磕手册。
  转载于:http://www.ttlsa.com/mysql/mysql-backup-recovery-innodb-table/


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-612689-1-1.html 上篇帖子: MySQL运维进阶-MySQL双主(master-master)+半同步(Semisync Repl 下篇帖子: mysql主从复制及维护--单主、双主
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表