最近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通过后台备份数据后,搬家过程中没全新安装程序,而直接进restore.php页面导入数据,就会出现各种table缺失的情况。
解决办法很简单,进数据库后台重建一下数据表就行(可以ssh 用命令进mysql操作,也可以进phpmyadmin操作)。
解决如下:
1. 先找到官方的安装文件,找到相关表的创建语句:
具体文件位置(Discuz_X3.2_SC_UTF8\upload\install\data\install.sql),找到相关的语句,我这里是:
2. 进phpmyadmin执行语句:
得到错误提示码:
#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后,才会导入成功。
修改后再次执行,成功如图:
3.都修复好后,登录后台,检验一下:
发现不少错误:有表缺失,有些刚才建的表字符集不正确。
成功登录,访问也正常,至此问题一一解决,后面的修复都是重复上面的过程,不再累述。
关于如何修改字符集,文章【如何使用PhpMyAdmin修改数据表(table)的字符集】有图文说明。