zoukankan      html  css  js  c++  java
  • MySQL可传输表空间:将一个表从一个实例拷贝到另一个实例

    MySQL版本:5.7.23

    1.在源实例上,创建一个表(如果不存在):

    mysql> USE abce;
    mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
    mysql> insert into t values(1);
    

    2.在目标实例上,如果不存在表,请创建一个表:

    mysql> USE abce;
    mysql> CREATE TABLE t(c1 INT) ENGINE=InnoDB;
    

    3.在目标实例上,discard现有表空间:

    mysql> ALTER TABLE t DISCARD TABLESPACE;
    

    执行这一步操作后,目标实例上会将t表的ibd文件删除,只留下t.frm文件

    4.在源实例上,运行FLUSH TABLES ... FOR EXPORT以使表停顿并创建.cfg元数据文件:

    mysql> USE abce;
    mysql> FLUSH TABLES t FOR EXPORT;
    

    FLUSH TABLES ... FOR EXPORT语句可确保对表的更改已刷新到磁盘,以便在实例运行时可以进行二进制表拷贝。当运行FLUSH TABLES ... FOR EXPORT时,InnoDB在与表相同的数据库目录中生成一个.cfg文件。.cfg文件包含导入表空间文件时用于schema验证的元数据。

    5.将.ibd文件和.cfg元数据文件从源实例复制到目标实例。 例如:

    shell> scp /path/to/datadir/abce/t.{ibd,cfg} destination-server:/path/to/datadir/abce
    

    必须先拷贝.ibd文件和.cfg文件,然后释放共享锁,如下一步所述。


    6.在源实例上,使用UNLOCK TABLES释放由FLUSH TABLES ... FOR EXPORT获取的锁:

    mysql> USE abce;
    mysql> UNLOCK TABLES;
    

      

    7.在目标实例上,导入表空间:

    mysql> USE abce;
    mysql> ALTER TABLE t IMPORT TABLESPACE;
    

      

    8.目标验证一下:

    root@localhost:abce 03:45:49>select * from t;
    +------+
    | c1   |
    +------+
    |    1 |
    +------+
    1 row in set (0.01 sec)
  • 相关阅读:
    37. Sudoku Solver(js)
    36. Valid Sudoku(js)
    35. Search Insert Position(js)
    34. Find First and Last Position of Element in Sorted Array(js)
    33. Search in Rotated Sorted Array(js)
    32. Longest Valid Parentheses(js)
    函数的柯里化
    俞敏洪:我和马云就差了8个字
    vue路由传值params和query的区别
    简述vuex的数据传递流程
  • 原文地址:https://www.cnblogs.com/abclife/p/11787591.html
Copyright © 2011-2022 走看看