typecho启用Handsome主题插件时报Database Query Error或General error: 3161 Storage engine MyISAM is disabled错误的解决方法

首页 / 技术栈 / 正文

前言

 今天在折腾回typechoHandsome主题时发现了Database Query Error错误。事情经过是我在迁移回Handsome时,重新打开插件但遇到数据库出错了,因为这个报错并不详细,我第一反应觉得是我的主题用了emjoy,以为数据库字符集是utf8编码,去检查了字符集后正常utf8mb4,PHP版本也正常,事情一度陷入了尴尬的境界....

解决思路

 因为这个报错并不明显,所以我们需要更为详细的debug报错,首先先备份一份当前的数据库文件,以防万一.
Test
我使用的是Navicat这款软件,右击转储 -> 结构和数据
接下来打开typecho的根目录,双击打开config.inc.php文件
define('__TYPECHO_ADMIN_DIR__', '/admin/');的后面添加下面这段代码

define('__TYPECHO_DEBUG__', true);

再次重复刚才的报错操作,这次就会详细列出报错信息,以下是我的报错信息:

SQLSTATE[HY000]: General error: 3161 Storage engine MyISAM is disabled (Table creation is disallowed).
Typecho\Db\Adapter\SQLException: SQLSTATE[HY000]: General error: 3161 Storage engine MyISAM is disabled (Table creation is disallowed). in /www/wwwroot/7yog/var/Typecho/Db/Adapter/Pdo.php:111
Stack trace:
#0 /www/wwwroot/7yog/var/Typecho/Db.php(391): Typecho\Db\Adapter\Pdo->query()
#1 /www/wwwroot/7yog/usr/plugins/Handsome/cache/driver/sql/mysql.class.php(26): Typecho\Db->query()
#2 /www/wwwroot/7yog/usr/plugins/Handsome/cache/driver/sql/sql.inteface.php(21): HandsomeSQL->install()
#3 /www/wwwroot/7yog/usr/plugins/Handsome/cache/driver/dao/sql.base.php(25): SqlInterface->__construct()
#4 /www/wwwroot/7yog/usr/plugins/Handsome/cache/driver/dao/tag.php(9): SqlBase->__construct()
#5 /www/wwwroot/7yog/usr/plugins/Handsome/cache/driver/controller/tag_util.php(14): HandsomeTag->__construct()
#6 /www/wwwroot/7yog/usr/plugins/Handsome/Plugin.php(82): TagUtil->__construct()
#7 [internal function]: Handsome_Plugin::activate()
#8 /www/wwwroot/7yog/var/Widget/Plugins/Edit.php(65): call_user_func()
#9 /www/wwwroot/7yog/var/Widget/Plugins/Edit.php(313): Widget\Plugins\Edit->activate()
#10 /www/wwwroot/7yog/var/Widget/Action.php(71): Widget\Plugins\Edit->action()
#11 /www/wwwroot/7yog/var/Typecho/Widget.php(155): Widget\Action->execute()
#12 /www/wwwroot/7yog/var/Typecho/Router.php(96): Typecho\Widget::widget()
#13 /www/wwwroot/7yog/index.php(26): Typecho\Router::dispatch()
#14 {main}

等等,这份报错日志中提到了一个关键字MyISAM,这是一种数据库引擎,而在阿里云RDS for MySQL当中,这玩意是不被支持的.看到这,事情彷佛明朗了起来
因为我的数据库并不是自建,使用的正是阿里云RDS for MySQL
看下面的报错路径,都指向了主题插件的路径,所以,我们只需要修改插件中,sql文件的引擎为InnoDB即可
打开/usr/plugins/Handsome/cache/driver/sql/file/mysql目录,修改这三个文件
将:

) ENGINE=MyISAM  DEFAULT CHARSET =%charset%;

修改为:

) ENGINE=InnoDB  DEFAULT CHARSET =%charset%;

也就是更换MyISAM引擎为InnoDB即可.
刷新报错页面,就...又会发现报了别的错误
Test
正当我绝望之际,喝杯水之后又刷新了两三次,居然又ok了
事后发现这玩意有三个表,你得多刷新几次报错页面才会创建表成功....
于是...就这么结束了...

无标签
评论区
头像