Mysql 转换表的引擎
2015-08-24 13:18
609 查看
下面接受三种Mysql 数据库将表的存储引擎转换成另外一种引擎。每种方法都有优缺点。
上述语法可以适合任何储存引擎。但是有一个问题:需要执行很长时间。Mysql会按行讲源数据复制到另一新表当中,在复制期间可能会消耗系统所有的I/O能力,同时原表会加上锁。所以在繁忙的表上执行此操作要下心。
如果转换表的存储引擎将会丢失和原引擎相关的所有特性。如,将一张InnoDB表转换为MyISAM,然后转换InnoDB,原InnoDB上的所有外键将会丢失。
ALTER TABLE
将表的一个引擎修改为另个引擎最简单的办法就是是用alter table 语句,下面是修改user 表的储存引擎;mysql> alter table user engine=InnoDB; Query OK, 0 rows affected (0.07 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> show table status like 'user' \G;
上述语法可以适合任何储存引擎。但是有一个问题:需要执行很长时间。Mysql会按行讲源数据复制到另一新表当中,在复制期间可能会消耗系统所有的I/O能力,同时原表会加上锁。所以在繁忙的表上执行此操作要下心。
如果转换表的存储引擎将会丢失和原引擎相关的所有特性。如,将一张InnoDB表转换为MyISAM,然后转换InnoDB,原InnoDB上的所有外键将会丢失。
导入和导出
为了更好的控制转换过程,可是使用mysqldump 工具将数据导入文件中,然后修改文件中的create table 语句中的存储引擎选项,mysqldump 工具默认会在create table 中加上drop 语句。创建和查询
第三种装换技术综合了第一种的高效和第二种方法的中的安全,不需要导出真个表的数据。而是先创建一个新的存储引擎的表。然后利用 Insert 。。。。select 语句来导出,mysql> create table myInnoDB like user; Query OK, 0 rows affected (0.04 sec) mysql> alter table myInnoDB engine=innodb; Query OK, 0 rows affected (0.08 sec) Records: 0 Duplicates: 0 Warnings: 0 mysql> insert into myInnoDB select * from user;
相关文章推荐
- MySQL中的integer 数据类型
- MySQL存储过程
- mysql中int、bigint、smallint 和 tinyint的区别与长度
- mysql load data 导出、导入 csv
- source命令执行SQL脚本文件
- MySQL创建用户及权限控制
- MySQL管理数据表
- linux下mysql添加用户
- mysql procedure
- mysql触发器
- MySQL 备份和恢复策略
- mac下安装mysql(转载)
- mysql 修改编码 Linux/Mac/Unix/通用(杜绝修改后无法启动的情况!)
- MySQL数据的导出、导入(mysql内部命令:mysqldump、mysql)
- mysql数据行转列
- Linux下修改MySQL编码的方法
- MySQL Server 日志
- MySQL 安全事宜
- MySQL 备份与恢复