zoukankan      html  css  js  c++  java
  • 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;
    

      

  • 相关阅读:
    软件设计7个原则
    vue.js 样式绑定 font-size 问题
    实例理解scala 隐式转换(隐式值,隐式方法,隐式类)
    著名端口整理(常用服务的默认端总结)
    .NET Core Web API 实现大文件分片上传
    ngnix反向代理tomcat,ssl证书配置及自定义错误页面
    微信登录闪退
    gradle如何配置阿里云的中央仓库
    HashMap底层实现和原理
    关于Java中String类的hashCode方法
  • 原文地址:https://www.cnblogs.com/rayment/p/7768577.html
Copyright © 2011-2022 走看看