阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

MySQL转换表的引擎

160次阅读
没有评论

共计 1525 个字符,预计需要花费 4 分钟才能阅读完成。

有很多种方法可以将表的存储引擎转换成另一种引擎。每种方法都有其优缺点,在这里介绍四种方法:

选择优先级(pt-online-schema-change > 创建与查询 > 导出和导入 > ALTER TABLE)。
 
•ALTER TABLE

  将表从一个引擎修改为另一个引擎最简单的方法是使用 ALTER TABLE 语句。下面的语句将 TB 表的引擎修改为 InnoDB:

MySQL> ALTER TABLE TB ENGINE = InnoDB;

PS:该方法适用于任何存储引擎。但有一个问题:需要很长的执行时间。

MySQL 会按行将数据库从原表复制到一张新的表中,在复制期间可能会消耗系统所有的 I / O 能力,同时原表上会加上读锁。
 
•导出和导入(mysqldump)

  为了更好的控制转换的过程,可以使用 mysqldump 工具将数据导出到文件,然后修改文件中 CREATE TABLE 语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同的表名,即使他们使用的是不同的存储引擎。

PS:mysqldump 默认会自动在 CREATE TABLE 语句前加上 DROP TABLE 语句,不注意这一点可能会导致数据丢失。

1、下面的语句将 DB 库中的 TB 表数据导出到 tb.sql 文件中:

[root@desktop]# mysqldump -u root -p DB TB > tb.sql

2、修改 tb.sql 文件(如果需要备份 TB 表,请更改表名):

CREATE TABLE `TB` (
  `name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、下面的语句将 tb.sql 文件导入到 DB 库中:

[root@desktop]# mysql -u root -p DB < tb.sql

 
•创建与查询(CREATE 和 SELECT)

这种方法综合第一种方法的高效和第二种方法的安全。不需要导出整个表的数据,而是首先创建一个新的存储引擎的表,然后利用 INSERT…SELECT 语法来导数据:

数据量不大使用以下语句:

mysql > CREATE TABLE TB2 like TB1;
mysql > ALTER TABLE TB2 ENGINE=InnoDB;
mysql > INSERT INTO TB2 SELECT * FROM TB1;

数据量大使用以下语句:

mysql > CREATE TABLE TB2 like TB1;
mysql > ALTER TABLE TB2 ENGINE=InnoDB;
mysql > START TRANSACTION;
mysql > INSERT INTO TB2 SELECT * FROM TB1 WHERE id BETWEEN x AND y;
mysql > COMMIT;

PS:这样的操作完成后,新表是原表的一个全量复制,原表还在,如需要可以删除原表。

如果有必要,可以在执行的过程中对原表进行加锁,以确保新表和原表的数据一致。

•使用 Percona Toolkit 提供的 pt-online-schema-change 工具:

使用以下命令可将 DB 库中的 TB1 表转换成 InnoDB:

[root@desktop]# pt-online-schema-change -u root -h 127.0.0.1 -p 123456 –alter=’ENGINE=Innodb’ –execute A=utf8,D=DB,t=TB1

执行成功后会有如下提示:

Successfully altered `DB`.`TB1`.

PS:原理为创建临时表 -> 修改修改结构 -> 记录数据 -> 删掉原表 -> 重命名临时表 

本文永久更新链接地址 :http://www.linuxidc.com/Linux/2018-01/150411.htm

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-22发表,共计1525字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中