WordPress站点使用MyISAM,我需要切换到InnoDB吗?

时间:2020-05-16 作者:mhweb

我已经管理一个站点很长时间了,所以数据库仍然使用MyISAM作为数据库引擎。因此,现在我使用mysql 8.0.19(在5.7之前)将该站点转移到新服务器上,我想知道是否需要切换到InnoDB。

如果是,如何备份innodb db?与使用mysqldump的MyISAM有什么不同吗?我可以在站点处于活动状态时进行备份吗?

我这么问是因为我读了这个(WordPress use innodb by default?): 在备份Wordpress站点时,这很重要。我通过艰苦的方式学会了这一点。如果数据库是innodb,那么R1云还原类型备份不会保存所有数据,因为必须先关闭它才能进行备份。而MYISAM可以备份,没有问题。

Update info for @gordan-bobic


| wp_comments | CREATE TABLE `wp_comments` (
  `comment_ID` bigint unsigned NOT NULL AUTO_INCREMENT,
  `comment_post_ID` bigint unsigned NOT NULL DEFAULT \'0\',
  `comment_author` tinytext CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `comment_author_email` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',
  `comment_author_url` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',
  `comment_author_IP` varchar(100) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',
  `comment_date` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
  `comment_date_gmt` datetime NOT NULL DEFAULT \'0000-00-00 00:00:00\',
  `comment_content` text CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL,
  `comment_karma` int NOT NULL DEFAULT \'0\',
  `comment_approved` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'1\',
  `comment_agent` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',
  `comment_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT \'\',
  `comment_parent` bigint unsigned NOT NULL DEFAULT \'0\',
  `user_id` bigint unsigned NOT NULL DEFAULT \'0\',
  PRIMARY KEY (`comment_ID`),
  KEY `comment_post_ID` (`comment_post_ID`),
  KEY `comment_approved_date_gmt` (`comment_approved`,`comment_date_gmt`),
  KEY `comment_date_gmt` (`comment_date_gmt`),
  KEY `comment_parent` (`comment_parent`),
  KEY `comment_author_email` (`comment_author_email`(10))
) ENGINE=MyISAM AUTO_INCREMENT=16593 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci |

更新2

@gordan bobic I更新了我的。cnf移除NO_ZERO_IN_DATE, NO_ZERO_DATE 使用这个指南是有效的https://ixnfo.com/en/the-solution-of-error-error-1067-42000-at-line-211-invalid-default-value-for-blablabla.html

因此,基本上,这就是我在安装时所做的:ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION 使用此命令show variables like \'sql_mode\';

所以我更新了我的。具有以下内容的cnf文件:sql_mode=ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

然后,我使用命令将这些表转换为InnoDB,结果成功了。

1 个回复
最合适的回答,由SO网友:Gordan Bobić 整理而成

在过去十年的某个时候,您应该切换到InnoDB,但现在正是您将要找到的最佳时机。:-)

mysqldump也将以同样的方式工作。

数据库正在运行时,无法备份MyISAM。通常不能通过使用简单的方法来备份数据库,例如对文件进行分级。数据必须是静态/时间点一致的。因此,如果您拍摄快照并备份快照,就可以了。

有了InnoDB,您还可以使用xtrabackup,它比mysqldump备份更快,恢复更快。您还可以使用mysqldump—单个事务进行备份,而不锁定表(使用MyISAM的mysqldump会导致在备份过程中锁定所有表)。