如果我将MySQL引擎从MyISAM更改为InnoDB,会影响我的数据吗?

7

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

谢谢。


每个引擎都有一定的特点,例如InnoDB增加了对外键的支持,但是删除了完整索引的支持。但是MySQL可以处理引擎转换而不影响数据本身,最好始终备份数据。 - Hawili
请查看这个链接: http://dev.mysql.com/doc/refman/5.0/en/converting-tables-to-innodb.html。此致。 - esmoreno
为什么是-1??我是新手,所以才来这里问问题,希望能得到一些好的回复 :( - Neha
2个回答

11

将引擎从MyISAM更改为INNODB不应影响您的数据,但出于安全起见,在更改引擎之前可以轻松备份您的表。

  • 备份:

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

  • innodb_buffer_pool_size = 16G
    innodb_additional_mem_pool_size = 2G
    innodb_log_file_size = 1G
    innodb_log_buffer_size = 8M
    
  • 将存储引擎更改为INNODB

  • ALTER TABLE table_name ENGINE=INNODB;
    

    1
    "CREATE TABLE backup_table LIKE your_table" 就像魔术一样。 :-) - everton

    7
    我在将MyISAM表转换为InnoDB时发现了两个注意事项:行大小和对全文索引的支持。
    我遇到了一个问题,即将一些来自现成应用程序的表从MyISAM转换为InnoDB时,由于记录大小的限制而失败。 MyISAM支持比InnoDB更长的行。默认的InnoDB安装中最大值约为8000字节。您可以通过截断失败的表来解决此问题,但这将在插入时影响您。您可能需要将数据拆分成多个表或使用变长列类型(例如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;
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接