繁体   English   中英

如果我将 mysql 引擎从 Myisam 更改为 innodb,是否会影响我的数据

[英]If i change mysql engine from Myisam to innodb, will it affect on my data

我是 Mysql 的新手。 如果我将 mysql 引擎从 Myisam 更改为 innodb,它会影响我在服务器上的数据吗?

谢谢

将引擎从MyISAM更改为INNODB不会影响您的数据,但安全的一面是,您可以在更改引擎之前轻松备份表。

  1. 采取备份:

     CREATE TABLE backup_table LIKE your_table; INSERT INTO backup_table SELECT * FROM your_table;
  2. 它可能会影响查询的性能。 您需要配置 Innodb 特定的 系统变量 例如

    innodb_buffer_pool_size = 16G innodb_additional_mem_pool_size = 2G innodb_log_file_size = 1G innodb_log_buffer_size = 8M
  3. 将引擎更改为INNODB

     ALTER TABLE table_name ENGINE=INNODB;

在将 MyISAM 表转换为 InnoDB 时,我发现了两个警告:行大小和对全文索引的支持

由于最大记录大小,我遇到了一个问题,将一些表从现成的应用程序从 MyISAM 转换为 InnoDB。 MyISAM 支持比 InnoDB 更长的行。 默认 InnoDB 安装中的最大值约为 8000 字节。 您可以通过截断一个失败的表来解决这个问题,但这会在稍后的 INSERT 中咬你。 您可能必须将数据分解为多个表或使用可变长度列类型(例如 TEXT(可能会更慢))对其进行重组。

库存 Innodb 安装不支持 FULLTEXT 索引。 这可能会也可能不会影响您的应用程序。 对于我正在转换的一个应用程序表,我们决定在其他字段中查找我们需要的数据,而不是进行全文扫描。 (在转换为 InnoDB 之前,我对其执行了“ALTER TABLE DROP INDEX ...”以删除 FULLTEXT 索引。)无论如何,我不建议为写入量大的表使用全文索引。

如果第一次尝试使用“ALTER TABLE ...”转换一个充满数据的大表,你可能没问题。

http://dev.mysql.com/doc/refman/5.5/en/innodb-restrictions.html

最后,如果您想在读取繁重的正在运行的系统上从 MyISAM 转换为 InnoDB(其中 UPDATE 和 INSERT 很少见),您可以在不中断用户的情况下运行它。 (重命名以原子方式运行。如果其中任何一个不起作用,它将取消所有更改。)

CREATE TABLE mytable_ind AS SELECT * FROM mytable;
ALTER TABLE mytable_ind ENGINE=InnoDB;
RENAME TABLE mytable TO mytable_myi, mytable_ind TO mytable;
DROP TABLE mytable_myi;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM