转换表的引擎
来源:互联网 发布:淘宝宝贝违规记录没了 编辑:程序博客网 时间:2024/05/21 02:36
转换表的引擎
ALTER TABLE
将表从一个引擎修改为另一个引擎最简单的办法是使用ALTER TABLE语句。例如:
mysql>ALTER TABLE mytable ENGINE = InnoDB
上述语法可以适用任何存储引擎。但有一个问题:需要执行很长时间,MySQL会按行将数据从原表赋值到一张新表中,在复制期间可能会消耗系统所有的I/O能力,同时原表上会加上读锁。所以,在繁忙的表上执行此操作要特别小心。
如果转换表的存储引擎,将会失去和原引擎相关的所有特性。例如:如果将一张InnoDB表转换成MyISAM,然后再转回InnoDB,原InnoDB表上所有的外键将丢失。
导出与导入
为了更好的控制转换的过程,可以使用mysqldump工具将数据导出到文件,然后修改文件中create table语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同的表名,即使他们使用的是不同的存储引擎,同时要注意mysqldump默认会自动在create table语句前加上drop table语句,不注意这一点可能会导致数据丢失。
创建与查询(create 和 select)
第三种转换的技术综合了第一种方法的高效和第二种方法的安全,不需要导出整个表的数据,而是先创建一个新的存储引擎的表,然后利用insert … select语句来导数据。
create table innodb_table like myisam_table;alter table innodb_table ENGINE=InnoDB;insert into innodb_table select * from myisam_table;
数据量不大的话,这样做工作得很好,如果数据量很大,则可以考虑使用条件做分批处理,针对每一段数据执行事务提交操作,以避免大事务产生过多的undo,假设有主键字段id,重复运行以下的语句(最小值x和最大值y进行相应的替换)将数据导入到新表,如下:
start transaction;insert into innodb_table select * from myisam_table where id between x and y; # 通过条件进行范围导入commit;
这样操作完成以后,新表是原表的一个全量复制,原表还在,如果需要可以删除原表,如果有必要,可以在执行的过程中对原表加锁,以确保新表和原表数据一致。
Percona Toolkit提供一个pt-online-schema-change的工具(基于Facebook的一个在线schema变更技术),可以比较简单,方便地执行上述过程,斌面手工操作可能导致的失误和烦琐。
参考资料:
高性能MySQL(第3版)
备注:
转载请注明出处:http://blog.csdn.net/wsyw126/article/details/70184828
作者:WSYW126
- 转换表的引擎
- 转换表的引擎
- Mysql 转换表的引擎
- Mysql转换表的引擎
- 表转换存储引擎的方法总结
- mysql转换表的存储引擎方法
- 批量转换MySQL数据库表的存储引擎的方法
- 旗正规则引擎的使用----内存表的json转换
- 空间数据转换引擎
- MySQL数据库引擎转换
- oracle数据库引擎转换
- Discuz数据库引擎转换
- XQuery 作为xml数据转换引擎的软肋
- 十六.Think引擎转换到Smarty引擎后,success与error跳转的修改
- MySQL从MyISAM引擎转换到InnoDB引擎需要注意的地方
- Mysql 存储过程实现表引擎转换(实现一半)
- 转换discuz X2.5表引擎为InnoDB
- MySQL 转换/修改表存储引擎 详细介绍
- 腾讯十天Vue.js课程之一:Vue.js介绍
- Kruskal算法Java实现
- 浅谈前端性能优化
- javaee期中考前简略只是总结(个人/很简陋)
- Ubuntu 安装mysql和简单操作
- 转换表的引擎
- swustojCalculate Sum-Of-Absolute-Differences(0237)
- 技术部20170415日集训
- JavaWeb(5)——Tomcat服务器HTTPS配置
- 用js实现对话框修改内容,并更新主页面
- SSL2058 字符串编辑
- virtual box安装ms-dos6.22
- linux安装redis详解
- getColor过时,setTextColor的现用方法