小编dodobook的博客是wordpress的,之前的mysql是5.6版本的,最近想要迁移到mysql5.7上,因为mysql5.7的性能更强大。我就想先在本地尝试部署一下,顺利过渡之后再还原到服务器正式环境上。

第一步:备份数据库,采用了两种方式,命令行模式或者直接使用Navicat(数据量大的话,建议用命令行mysqldump).

第二步:还原数据库,通用使用两种方式,命令行mysql 或者Navicat.

对于大多数用户的话是直接可以还原成功。然而dodobook却多次尝试也没有成功。只能一步一步的来分析失败的原因。

失败原因1: datetime 的默认值为 '2020-01-01 00:00:00',请全部替换成 '1970-01-01 00:00:00'

CREATE TABLE `wp_comments` (
`comment_ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
`comment_post_ID` bigint(20) unsigned NOT NULL DEFAULT '0',
`comment_date` datetime NOT NULL DEFAULT '2020-01-01 00:00:00',
`comment_date_gmt` datetime NOT NULL DEFAULT '2020-01-01 00:00:00',
`comment_content` text NOT NULL,
`comment_karma` int(11) NOT NULL DEFAULT '0',
`comment_approved` varchar(20) NOT NULL DEFAULT '1',

解决方案:编辑器打开sql文件 把文档里面的 datetime 的默认值为 '2020-01-01 00:00:00',请全部替换成 '1970-01-01 00:00:00' 刚刚测试了一下再mysql5.7里面datetime的默认值不能设置为'2020-01-01 00:00:00' 而5.6里面可以。

失败原因2:dodobook因为是技术博客。所以dodobook里面有一篇文章是写yii备份还原数据库的文章的,所有里面的一些分隔符和相应的代码是冲突的。请看文章 YII下MySQL数据库备份与还原类

解决方案:把这篇文章的代码冲突部分独立成一篇静态的页面 请看文章 YII下MySQL数据库备份与还原类 这样就可以避免以后再次备份的时候出现的因为此篇文章而导致的失败了。

失败原因3:wp_posts里面有很多其他状态值的文章,建议适当的清理,还有就是评论表里面很多杂乱的数据,有些用户填入了混淆的字符串。也可以适当的清理删除。

失败原因4:如果你的数据库很大的话。可以根据错误信息,进行数据库my.ini进行修改。

到此为止,困扰dodobook一周的问题得以解决,也怪自己懒,没有及时的一条一条的数据去排查。另外dodobook觉得wordpress的表设计的有些不简洁。虽然表少了,但是单表里面字段太多,数据量大了之后,性能查询都受限。dodobook有点想重新写一套博客。