最近Linode是出了$5的VPS,感觉性能足够运行一个站,以前的$10一个月的VPS 只跑一个论坛,感觉有点浪费,就把VPS刚成5刀的plan。顺便重做一个环境,不安装WDCP了,直接安装一个Lnmp环境,然后在原来论坛搬家的过程中就出现了以下问题。

当把程序全部传上VPS后,到 http://www.YourUrl.com/data/restore.php 选择要导入的数据,到这里一切正常。

然后打开论坛首页,显示 116错误,具体错误代码如下:

Discuz! Database Error

(1146) Table 'xxx.common_syscache' doesn't exist

SELECT * FROM common_syscache WHERE `cname` IN('setting','style_default','cronnextrun')

PHP Debug

No. File Line Code
1 admin.php 25 discuz_application->init()
2 source/class/discuz/discuz_application.php 66 discuz_application->_init_setting()
3 source/class/discuz/discuz_application.php 686 loadcache(Array)
4 source/function/function_core.php 702 table_common_syscache->fetch_all(Array)
5 source/class/table/table_common_syscache.php 63 discuz_database::query(%s)
6 source/class/discuz/discuz_database.php 136 db_driver_mysql->query(%s, false, false)
7 source/class/db/db_driver_mysql.php 153 db_driver_mysql->halt(%s, %d, %s)
8 source/class/db/db_driver_mysql.php 224 break()

解决Discuz! 恢复数据时出现 1146 表不存在的错误

查找相关资料,得到结论是Discuz通过后台备份数据后,搬家过程中没全新安装程序,而直接进restore.php页面导入数据,就会出现各种table缺失的情况。

解决办法很简单,进数据库后台重建一下数据表就行(可以ssh 用命令进mysql操作,也可以进phpmyadmin操作)。

解决如下:

1. 先找到官方的安装文件,找到相关表的创建语句:

具体文件位置(Discuz_X3.2_SC_UTF8\upload\install\data\install.sql),找到相关的语句,我这里是:

2. 进phpmyadmin执行语句:

解决Discuz! 恢复数据时出现 1146 表不存在的错误

得到错误提示码:

MySQL 返回:解决Discuz! 恢复数据时出现 1146 表不存在的错误

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'TYPE=MyISAM' at line 7

竟然说是语法错误,再次查找相关资料,得到的结论是:

这个错误出现是由于MySQL创建表的写法 TYPE=MyISAM 太古老了,在MySQL 5.6.20上已经不支持了,这个应该在MySQL 5.1后的相关版本已经取消了支持,具体参考链接http://bugs.mysql.com/bug.php?id=17501,只能将mysqldump导出的脚本文件里面的TYPE=MyISAM 全部替换成ENGINE=InnoDB后,才会导入成功。

修改后再次执行,成功如图:

解决Discuz! 恢复数据时出现 1146 表不存在的错误

3.都修复好后,登录后台,检验一下:

发现不少错误:有表缺失,有些刚才建的表字符集不正确。

解决Discuz! 恢复数据时出现 1146 表不存在的错误

成功登录,访问也正常,至此问题一一解决,后面的修复都是重复上面的过程,不再累述。

关于如何修改字符集,文章【如何使用PhpMyAdmin修改数据表(table)的字符集】有图文说明。