7

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

谢谢

4

2 回答 2

11

将引擎从 更改MyISAMINNODB不应该影响您的数据,但从安全的角度来看,您可以在更改引擎之前轻松备份您的表。

  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;
    
于 2012-08-27T10:25:55.017 回答
7

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

由于最大记录大小,我遇到了将一些表从 MyISAM 的现成应用程序转换为 InnoDB 的问题。MyISAM 支持比 InnoDB 更长的行。默认 InnoDB 安装中的最大值约为 8000 字节。您可以通过 TRUNCATE'ing 失败的表来解决此问题,但这会在稍后的 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 很少见),你可以在不中断用户的情况下运行它。(RENAME 以原子方式运行。如果其中任何一个不起作用,它将退出所有更改。)

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;
于 2012-09-25T14:20:41.147 回答