ZBlogCMS 搬家出现数据库报错是什么原因
学完这篇,你能按步骤定位 ZBlogCMS 搬家后数据库报错的具体原因,并知道每类错误该改哪个文件、哪个参数。
第一步:先看报错原文,判断是“连不上”还是“查不到”
这一步要做的是把错误归到两类里,做完你就能确定排查方向。
Z-BlogPHP 搬家后常见报错大概分两类:
- 连接类:
Access denied for user 'xxx'@'localhost'、Unknown database 'xxx'、SQLSTATE[HY000] [2002]、Can't connect to MySQL server - 查询类:
Table 'xxx.zbp_post' doesn't exist、Unknown column、Specified key was too long; max key length is 767 bytes、1064 You have an error in your SQL syntax
连接类问题,90% 出在配置文件里的数据库账号、密码、库名、主机地址没改成新服务器上的;查询类问题,多半是数据没导全、表前缀不一致,或者 MySQL 版本变了。
注意:不要一看到“数据库报错”就去重装 Z-BlogPHP,重装会覆盖
zb_users/c_option.php,反而把原配置弄丢。
第二步:改 zb_users/c_option.php 里的连接参数
这一步要做什么:把 Z-BlogPHP 的数据库配置改成新服务器的真实参数,做完后连接类报错基本会消失。
用 FTP 或宝塔面板的「文件」管理器进入网站根目录,找到:
/zb_users/c_option.php
用编辑器打开,重点看这几项:
return array (
'DB_TYPE' => 'mysqli',
'DB_HOST' => '127.0.0.1',
'DB_NAME' => '新的数据库名',
'DB_USER' => '新的数据库用户名',
'DB_PASS' => '新的数据库密码',
'DB_PREFIX' => 'zbp_',
'DB_ENGINE' => 'InnoDB',
);
DB_HOST:宝塔面板里通常填127.0.0.1,不要填localhost,因为部分 PHP 环境会把localhost解析成 socket 连接,导致[2002]错误。DB_PREFIX:必须和导入的 SQL 文件里的表前缀完全一致。老站是zbp_,新库导进去变成zbp2_,就会报Table doesn't exist。DB_NAME、DB_USER、DB_PASS:在宝塔面板「数据库」页面点「添加数据库」时设置的值,三者必须对应。
注意:Z-BlogPHP 1.7 及以上版本配置文件名就是
c_option.php,位置固定在zb_users/下;如果你在根目录找不到,用面板的搜索功能搜c_option.php。
第三步:核对数据表是否完整导入,前缀是否一致
这一步要做什么:确认老库的数据真的进了新库,做完后能排除“表缺失”类报错。
进入 phpMyAdmin,左侧点开新数据库,看表数量。一个正常 Z-BlogPHP 站点通常有 zbp_post、zbp_category、zbp_comment、zbp_config、zbp_member 等 20 张左右的表。
如果表数量明显偏少,重新导入:
- phpMyAdmin 顶部点「导入」
- 点「选择文件」,选搬家时导出的
.sql文件 - 字符集选
utf-8 - 点右下角「执行」
如果导入时提示 Specified key was too long; max key length is 767 bytes,说明新库是 MySQL 5.6 及以下,而老站用了 utf8mb4。解决办法:在 phpMyAdmin 里执行
ALTER DATABASE 你的库名 CHARACTER SET utf8 COLLATE utf8_general_ci;
然后重新导入;或者把新服务器 MySQL 升级到 5.7/8.0。
第四步:检查 MySQL 版本、sql_mode 和 PHP 版本
这一步要做什么:排除因环境升级导致的 SQL 语法报错。
在 phpMyAdmin 首页看「MySQL 版本」。如果老站是 MySQL 5.6,新站是 MySQL 8.0,容易遇到 ONLY_FULL_GROUP_BY 报错,表现为 1055 Expression #1 of SELECT list is not in GROUP BY clause。
在宝塔面板「数据库」→「配置」里,找到 sql_mode,把 ONLY_FULL_GROUP_BY 去掉,保存后重启 MySQL。
PHP 版本也要看:Z-BlogPHP 1.7 推荐 PHP 7.4;如果老站是 PHP 5.6 的旧版 Z-BlogPHP,搬到 PHP 8.0 上会出现 mysqli 扩展不兼容、甚至白屏。宝塔面板「网站」→「站点设置」→「PHP 版本」可以切换。
注意:切换 PHP 版本后,如果插件目录里还有旧版插件,先到 Z-BlogPHP 后台「应用中心」→「插件管理」禁用再测试,避免插件 SQL 残留引发报错。
第五步:用调试模式拿到完整错误
这一步要做什么:当报错只有一句模糊提示时,打开调试拿到完整堆栈。
在 zb_users/c_option.php 中把调试开关打开:
'DEBUG' => true,
保存后刷新报错页面,会显示完整文件路径和 SQL 语句。看完记得改回 false。
如果还是找不到,去 zb_users/logs/ 目录看最新日志文件,里面会记录 error 级别的数据库错误。
小结
- 连接类报错先查
zb_users/c_option.php里的DB_HOST、DB_NAME、DB_USER、DB_PASS - 表缺失类报错查
DB_PREFIX和 SQL 是否完整导入 - MySQL 5.6 遇
utf8mb4索引长度报错,改库字符集或升级 MySQL - MySQL 8.0 的
ONLY_FULL_GROUP_BY可在宝塔「数据库→配置」中关闭 - 旧版 Z-BlogPHP 搬到 PHP 8.0 前先确认兼容性,并禁用旧插件
原文链接:https://www.gj0.com/thread-600.html
转载请注明出处并保留本声明;内容仅代表作者观点,与本站立场无关。若本文涉嫌侵权,请联系本站处理。