MySQL中怎么备份恢复单个innodb表
创始人
2024-12-22 03:01:21
0次

  使用限制和说明

  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必须丢弃已连接到接受表的表空间。

  1mysql> 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

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...