• MySQL 表空间传输


    聊到MySQL数据迁移的话题,表空间传输时一个很实用的方法。

    在MySQL 5.6 Oracle引入了一个可移动表空间的特征(复制的表空间到另一个服务器)和Percona Server采用部分备份,这意味着你现在可以备份单个数据库或表;由于Percona Server 5.6的出现,innodb_import_table_from_xtrabackup是过时的Percona Server实现Oracle MySQL的可移动表空间的功能,就是在服务器之间复制的表空间的能力(table.ibd)。让我展示通过一个例子,我将采取选择性表部分备份而不是一个完整的MySQL服务器并且在线恢复它,而不需要关闭MySQL服务器

    下面演示怎么从3307实例迁移一个表空间到3308实例:

    3307 实例的表结构

    root@localhost:mysql3307.sock [sbtest]>show create table sbtest1;
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | Table   | Create Table                                                                                                                                                                                                                                                                       |
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    | sbtest1 | CREATE TABLE `sbtest1` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `k` int(11) NOT NULL DEFAULT '0',
      `c` char(120) NOT NULL DEFAULT '',
      `pad` char(60) NOT NULL DEFAULT '',
      PRIMARY KEY (`id`),
      KEY `k_1` (`k`)
    ) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8 |
    +---------+----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
    1 row in set (0.00 sec)

    把以上表结构在3308 实例创建 ,这里忽略

    在3308实例上discard 表空间

    root@localhost:mysql3308.sock [sbtest]>alter table sbtest1 discard tablespace;
    Query OK, 0 rows affected (0.16 sec)
    

    在3307实例上导出表空间

    root@localhost:mysql3307.sock [sbtest]>flush table sbtest1 for export;
    

     可以看到,执行命令之后,innodb_buffer_pool中的脏页刷新到了磁盘。并产生了一个 cfg文件.
    在命令执行之后,该表只能只读访问.


    开启另外一个终端,将该表的ibd文件,cfg文件,TRG文件(记录触发器信息)拷贝到目标实例的数据库中
    然后源实例执行 unlock tables; 

    最后在目标端import

    root@localhost:mysql3308.sock [sbtest]>alter table sbtest1 import tablespace;
    

      

  • 相关阅读:
    Linux上查找最大文件的 3 种方法
    不念过去,不畏将来
    Weblogic/WAS之Full GC监控与计算
    EntityFramework:An error occurred while executing the command definition. See the inner exception for details.
    1051 复数乘法(C#)
    BACnet开发资料与调试工具
    JS设置cookie、读取cookie、删除cookie
    认识BACnet协议
    Unity WebGL请求Http接口出现的Cors跨域问题
    VS 2017 产品密钥
  • 原文地址:https://www.cnblogs.com/rayment/p/7768577.html
Copyright © 2020-2023  润新知