• mysql转换引擎的方法


    有很多方法可以将表的存储引擎转换成另外一种引擎,每种方法都各有优缺点:

    A:alter table

    将表从一个引擎直接改为另外一个引擎最简单的办法

    alter table tb_name engine=innodb;

    要注意:这种方法需要执行很长的时间,mysql会按行将数据从原表复制到另外一张新表中,在复制期间可能会消耗系统所有的IO能力,同时原表会加上读锁,所以,在繁忙的表上执行此操作需要特别小心,一个替代的方案是采用后边讨论的方法。另外,转换表的存储引擎,将会失去和原引擎相关的所有特性,如:把innodb转换成myisam,再转回innodb,原innodb表上的所有外键将丢失。

    B:导入与导出

    可以使用mysqldump工具将数据导出到文件,然后修改文件中的create table语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同表名,即使是使用不同的存储引擎也不能同名,同时要注意,mysqldump默认会自动在create table语句前加上drop table语句,不注意这一点可能导致数据丢失。

    C:创建与查询

    结合前面两种方法的优点,不需要导出整个表的数据,而是先创建一张新的表,然后使用insert…select语法来导出数据到新表:

    create table tb_name_new like tb_name_old;

    alter table tb_name_new engine=innodb;

    insert into tb_name_new select * from tb_name_old;

    注意:数据量不大的话,这样做很好,如果数据很大,则可以考虑做分批处理(select加一个where条件,或者使用存储过程带上Limit条件),针对每一段数据执行事务提交操作,以避免大事务产生过多的undo。执行完成后,删除原表,把新表改名。

    D:percona-tookit提供了一个pt-online-schema-change工具,可以比较简单,方便地执行上面的过程,避免手工操作可能导致的失误和繁琐。且,这个工具是不锁表的。

  • 相关阅读:
    biji001
    公司内部openStack环境信息
    def
    CI调试
    一:Java之面向对象基本概念
    STL_算法_Heap算法(堆排)(精)
    IOS开发-经常使用站点集合
    【iOS开发-47】怎样下载iOS 7.1 Simulator 以及iOS 8离线的Documentation这些文件?
    设计模式简介
    how to deal with "no such file error or diretory" error for a new programmer in QT creator
  • 原文地址:https://www.cnblogs.com/xiaoboluo768/p/5153371.html
Copyright © 2020-2023  润新知