【问题标题】:Changing InnoDB to MyIsam in Backup file okay?在备份文件中将 InnoDB 更改为 MyIsam 好吗?
【发布时间】:2018-05-04 01:19:08
【问题描述】:

您好,我有一个 SQL 备份文件,我注意到我的 Mysql 服务器在导入或创建新表时默认配置为使用 utf8 和 innodb。

当我在每个表的 sql 文件中安装脚本时,引擎被指定为 myisam 和 charset latin。 所以来自 cms 的基本表是 latin1 和 myisam 格式的。

现在我安装了一些插件和表,插件导入为 innodb 和 utf8。

我现在在我的备份文件中手动将引擎和字符集从 innodb/utf8 更改为 myisam/latin1 并重新导入。

导入是可能的,没有任何问题,似乎一切正常,但问题是:

我可以在没有任何问题的情况下将“Engine=Innodb”替换为“Engine=MyIsam”吗?

【问题讨论】:

  • 不会出现数据完整性问题。但是,在查询方面,这两个引擎的工作方式非常不同。事务、行锁定、崩溃恢复等东西在 InnoDB 中都更好,你真的应该使用它。 dba.stackexchange.com/questions/1/…
  • 感谢您提供可以将 innodb 表转换为 myisam 的信息。现在我很平静。 :)
  • 我没说没关系。我说数据至少应该结转。在 2017 年,您想要 MyISAM 的场景非常少。
  • 数据结转 = 它(脚本)有效,对吗?我知道 innodb 可能更好,但该脚本是为旧的 php mysql 版本设计的,最初我只是在本地使用它。
  • 不,脚本不一定能正常工作。例如,InnoDB 没有FULLTEXT 索引,因此如果您的应用程序依赖于一个会损坏的索引。如果您的应用程序需要事务,将所有内容切换到 MyISAM 会破坏这一点。由于 MyISAM 的糟糕锁定,您可能会看到糟糕的性能。

标签: mysql utf-8 innodb myisam iso-8859-1


【解决方案1】:

我认为没有问题。假设备份是由mysqldump 等创建的,它是一个文本文件,您可以在其中验证以下内容。

转储已将每列的CHARACTER SETCOLLATION 烘焙到其中。这会覆盖表的“默认值”。

您所做的任何CREATE TABLE 都可以通过以下两种方式之一完成:

  • 明确指定每列的字符集。
  • 明确指定表上的字符集;这将传播到列。
  • 两者都不做,在这种情况下,你会得到新的默认值(听起来你不想要)。

至于更改ENGINE= 子句,有少量罕见的差异。但最简单的方法是更改​​它,看看是否有任何错误。

  • 非常旧的转储可能会说TYPE= 而不是ENGINE=;改变它。
  • MyISAM 允许 second 列的 2 列主键为 AUTO_INCREMENT; InnoDB 没有该功能。
  • MyISAM 不处理FOREIGN KEYs;他们的定义将被忽略。

更多关于从 MyISAM 转换到 InnoDB:http://mysql.rjweb.org/doc.php/myisam2innodb

从 InnoDB 回归到 MyISAM 是个坏主意。

是的,您可以更改表上的字符集,然后导入。 但是,加载需要指定转储中字节的字符集,而不是要加载到的表的字符集。 (如果需要,将为您完成转换。)

【讨论】:

    猜你喜欢
    • 2011-10-14
    • 2010-12-16
    • 2014-02-26
    • 2013-04-25
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    相关资源
    最近更新 更多