信科网络 · 11 年只做 WordPress | 建站 / 主题 / 插件 / 商城 / 迁移 / 托管 | 累计服务 3000+ 企业 | 源码全交付
服务热线:13280692153 邮箱:web@wordpressx.com
工作日 08:30-18:0013280692153 免费诊断
首页/WordPress 数据库报错处理
DATABASE ERROR TRIAGE

WordPress 数据库报错处理
先分清是连不上、表坏了,还是查询被打断了

数据库报错在浏览器里往往只显示一句话,但背后的原因可能差得很远:凭据写错、服务没起、磁盘写满、表结构损坏、单条 SQL 超出包大小、或者某个插件把连接数占满。「Error establishing a database connection」和「Table is marked as crashed」看起来都是打不开,处理方式完全不同。这一页按报错原文分类,给出判断依据、命令与恢复动作。

电话咨询 13280692153 提交需求

11 年WordPress 深耕
3000+服务企业
4 类报错分支
100%动手前先备份

READ THE MESSAGE

六种报错,六个方向
原文决定了该查哪一层

同样表现为「网站打不开」,报错文字已经把排查范围缩小了一半。先把屏幕上那句话原样抄下来,再对照下面五类。

01

连不上数据库

Error establishing a database connection。这句话由 WordPress 自己输出,意味着 PHP 已经跑起来了,但 mysqli 握手失败。方向在凭据、服务状态、网络与权限四者之间。

02

表损坏

Table './db/wp_options' is marked as crashed and should be repaired。表文件本身坏了,通常是异常断电、强制杀进程或磁盘故障留下的。数据可能还在,但索引需要重建。

03

连接中途断开

MySQL server has gone away,或 Lost connection to MySQL server during query。查询跑到一半连接被掐断,多见于大导入、大导出、长事务。

04

锁等待与死锁

Deadlock found when trying to get lock; try restarting transaction,或 Lock wait timeout exceeded。两个请求互等对方的行锁,InnoDB 会主动杀掉其中一个。

05

致命错误兜底页

There has been a critical error on this website。这是 WordPress 5.2 之后加的兜底提示,真实错误被藏起来了,必须去看 wp-content/debug.log 或 PHP 错误日志才能知道详情。

06

写入失败但前台正常

页面能打开,发布文章时报 Could not insert post into the database。说明读没问题、写被拒,多半是数据库用户缺少 INSERT 权限,或磁盘已满导致表只读。

CANNOT CONNECT

连不上的六种原因
按出现频率排序

这一类的排查成本最低,多数问题在十分钟内能定位。关键是不改任何东西就先做一次手工连接测试,让 MySQL 自己把原因说出来。

01

凭据写错或迁移后未更新

打开 wp-config.php,核对 DB_NAME、DB_USER、DB_PASSWORD、DB_HOST 四项。迁移后最常见的是库名带了主机商的前缀,比如从 wordpress 变成 user_wp123。密码里有单引号或反斜杠时,转义也会让连接失败。

02

DB_HOST 不是 localhost

云数据库、容器化环境里,主机地址通常是内网域名或 127.0.0.1:3306 这种带端口的写法。写 localhost 时 MySQL 走 Unix socket,写 127.0.0.1 时走 TCP,两者在部分环境下行为不同,socket 路径不对就会连不上。

  • 先试 localhost,不行换 127.0.0.1
  • 再不行问主机商要内网地址
03

数据库服务没起来

服务器重启后 MySQL 没设开机自启,或者因内存不足被系统 OOM killer 杀掉。表现是所有站点同时打不开,而不只是某一个。查服务状态 systemctl status mysqld,再看 /var/log/mysql/error.log 的末尾。

04

磁盘写满

MySQL 无法写 binlog 或临时表时,连接会被拒绝。用 df -h 看根分区,用 du -sh /var/lib/mysql 看库体积。常见元凶是 binlog 未清理、慢日志涨到几十 GB、或者备份文件放在了同分区。

05

连接数被占满

报错原文是 Too many connections。先 SHOW PROCESSLIST 看有多少 Sleep 状态的连接,再 SHOW VARIABLES LIKE 'max_connections'。默认 151,小内存机器上被几个爬虫同时抓就会打满。

06

用户没有该库的权限

能连上服务器但选不了库,报 Access denied for user 'xx'@'localhost' to database 'yy'。用 SHOW GRANTS FOR 'xx'@'localhost'; 确认授权范围,缺的话让主机商或 DBA 补一条 GRANT。

最快的验证方式是绕开 WordPress 直接连:mysql -u 用户名 -p -h 主机地址 库名。能进说明凭据和服务都正常,问题在 WordPress 这一侧(多半是缓存了旧的连接信息);进不去,错误提示会直接告诉你是密码错、主机不通还是权限不足。

CRASHED TABLES

表损坏的修复路径
先备份,再修,修不好就重建

看到 crashed 字样不要慌,多数情况下表能修回来。但要先明确一件事:修复动作本身有可能让数据进一步丢失,所以在执行任何 REPAIR 之前,先把整个库导一份出来。

01

先导出,哪怕库是坏的

mysqldump -u root -p --single-transaction --quick 库名 > before-repair.sql。损坏的表可能导不出来,加上 --force 让它跳过继续导其余的,至少把能救的先救出来。

02

用 mysqlcheck 批量检查

mysqlcheck -u root -p --auto-repair --all-databases 会先检查再自动修。只想看不想修,把 --auto-repair 换成 --check。装了 WP-CLI 的话,wp db check 与 wp db repair 更贴合 WordPress 的表前缀。

03

单表修复与引擎判断

针对具体表执行 REPAIR TABLE wp_options;。MyISAM 表多数能修好,InnoDB 表在 MySQL 8 里对 REPAIR 支持有限,往往需要 ALTER TABLE wp_options ENGINE=InnoDB; 触发重建,或从备份单独恢复这张表。

04

修不好就换表重建

把坏表改名留档,从备份导入同名表,再补上备份之后产生的差异。wp_options 这类配置表体积小,重建代价低;wp_posts 体积大,重建前务必确认备份时间点,否则会丢掉最近的发文。

修完不要立刻收工。跑一次 wp db check 确认全部 OK,再看 /var/log/mysql/error.log 里有没有 InnoDB: Database page corruption 之类的记录。有的话说明是磁盘层面的问题,表会反复损坏,该换机器了。数据库优化与冗余清理的日常做法,见数据库优化与冗余清理。

IMPORT & TIMEOUT

导入导出时断连
三个参数决定成败

迁移、还原、换主机时最容易撞上的就是这一类。表现是导入跑到一半停住,或者 SQL 文件导进去只成功了一部分,前台看起来正常,实际上少了几百篇文章。

01

max_allowed_packet

单条 SQL 超过这个值就会被截断,报 MySQL server has gone away。默认常见 4M 或 16M,导入含长文本的库时明显不够。临时调:SET GLOBAL max_allowed_packet=67108864;,持久化要写进 my.cnf 的 [mysqld] 段。

02

wait_timeout

连接空闲超过这个秒数会被服务端断开,默认 28800 秒通常在网页侧够用,但命令行跑长脚本时就容易断。导入期间临时设为 600 以上,导完改回来。

03

PHP 侧的执行时间

用 phpMyAdmin 导入时,真正的瓶颈常是 max_execution_time 与 upload_max_filesize。50MB 以上的 SQL 建议走命令行,不要用网页工具,超时和上传限制两道坎都绕不开。

导入完成后一定要核对行数:SELECT COUNT(*) FROM wp_posts; 与源库对比,差几十条就是中断了。另外,导入前把目标库字符集设为 utf8mb4,排序规则与原库一致,否则中文会变成问号,这类问题在恢复之后才发现就晚了,相关流程见备份与恢复。

ERROR MATRIX

报错速查表
原文、含义、动作、风险

动手前先对号入座。风险一列写的是「做错会怎样」,不是「可能有问题」。

报错原文片段 含义 处理动作 操作风险
Error establishing a database connection 凭据或服务异常 核对 wp-config 四项,手工 mysql 连接测试 改错库名会连到空库,前台看似重置
Access denied for user 账号或授权不对 SHOW GRANTS 确认,补授权 误删授权会导致其他站一起挂
Unknown database 库不存在或名字错 确认库名,必要时新建后导入 新建空库再访问会触发重装流程
Table is marked as crashed 表文件损坏 先 dump,再 REPAIR 或重建表 直接 REPAIR 可能丢掉最后几条记录
MySQL server has gone away 包超限或连接被断 调大 max_allowed_packet,减少单条体积 全局改参数需重启,影响同机其他应用
Too many connections 连接数打满 清 Sleep 连接,调 max_connections 调太高会耗尽内存导致服务崩溃
Deadlock found 行锁互等 重试事务,优化批量写入顺序 忽略会周期性复发,拖慢结账流程
Disk full / No space left 磁盘写满 清 binlog、慢日志与临时文件 误删数据目录文件会造成不可逆损坏

FAQ

数据库故障常见五问

后台提示数据库错误,但前台能打开,是什么情况?

多半是某个后台模块在写库时失败,或者对象缓存里还留着旧数据,前台走缓存所以正常。这类情况更要处理,因为下一次缓存失效就会全线崩。先看 debug.log 里最后一条错误,再确认磁盘是否已满、数据库用户是否还有写权限。

wp_options 表损坏会不会丢配置?

会。主题设置、插件开关、站点地址都存在这张表里。修复后要立刻核对站点地址与首页地址两项,配错会导致整站跳转到错误域名。稳妥做法是从备份单独恢复这张表,再补上修复前最后一段时间的变更。

能不能直接在 phpMyAdmin 里 REPAIR 所有表?

可以,但要选在低峰期并先导出。全库修复会占用大量 IO,表多的时候可能跑十几分钟,期间站点响应明显变慢。InnoDB 表在这类操作里收益有限,真正需要修的多是遗留的 MyISAM 表。

数据库越来越大,和报错有关系吗?

有间接关系。wp_postmeta 与 wp_options 膨胀会拖慢查询,长查询占住连接,进而引发连接数打满与锁等待。定期清理文章修订版本、过期 transient、废弃插件的残留选项,是成本最低的预防手段,具体做法见数据库优化与冗余清理。

分不清是数据库问题还是 PHP 问题怎么办?

看报错出现在哪一层。页面完全无输出且状态码 500,先查 PHP 错误日志;页面出现 WordPress 样式的数据库提示,说明 PHP 正常、数据库异常;页面白屏但服务器返回 200,多半是主题或插件里的致命错误。白屏与打不开的分支判断,见WordPress 白屏排查和WordPress 网站打不开排查。

DATABASE RESCUE

数据库报错反复出现
先做一次完整体检,别只重启服务

提供数据库入口或主机面板,我们先查表完整性、慢查询、连接数与磁盘水位,再判断是修复、重建还是迁移。动手前统一做全量导出,恢复路径提前写清楚。相关阅读:WordPress 内存超限与 500 错误。

电话/微信 13280692153 邮箱 web@wordpressx.com 地址 山东省淄博市张店区电子产业创新园 B 座

INDUSTRIAL BELT

扎根中国制造产业带
懂工厂,才懂出海

从胶东半岛到珠三角,从长三角到中原腹地,每一片产业集群都有自己的出口节奏与买家画像。信科网络长期扎根产业一线,把工厂的产品语言翻译成海外采购商听得懂的搜索语言,让每一分投入都对着真实的询盘去。

zhongqing

重庆外贸网站建设

重庆,简称渝或巴,是中华人民共和国中西部唯一的直辖市、国家中心城市、超大城市、国际大都市,长江上游地区的经济、金融、科创、航运和商贸物流中心,西部大开发重要的战略支点、“一带一路”…

beibei

北碚外贸网站建设

北碚区位于重庆市区西北郊的缙云山下,嘉陵江畔,幅员面积753平方公里,人口63万,是重庆的风景旅游区和智力型清洁工业基地。本世纪20年代末,由爱国实业家卢作孚先生开拓,抗战时期为陪都重庆…

hengshui

衡水外贸建站

衡水市位于河北省东南部,东与沧州市和山东省德州市毗邻,西与石家庄市接壤,南与邢台市相连,北与保定市交界;南北长125.5公里,东西宽98.13公里,全市辖8县2市1区,总面积5815.4平方公里。衡…

yuzhong

渝中外贸建站

渝中区,位于长江上游地区、重庆大都市区,属重庆主城九区之一。地处在长江、嘉陵江交汇地带,由于两江环抱,形似半岛,又名渝中半岛。渝中区作为重庆市政治、经济、文化以及商贸流通中心,别…

fucheng

阜城WordPress建站

阜城县是河北省衡水市下辖的一个县。面积698平方千米,人口32万。邮政编码053700。阜城县人文荟萃.历史上出现过不少的学者名流,北齐的刘昼,北周的熊安生,民国初期的京剧著名表演艺术家荀慧生,…

tongnan

潼南WordPress建站

潼南县位于重庆市西北部最前沿。是川渝握手区腹地东西南北交通自然便捷走向的交汇点及区域几何中心,是成渝经济区的腹地中心,是重庆西部凸入川中腹地最远、毗邻四川县市最多的对外开放最前沿…

qingtongxia

青铜峡Shopify建站

青铜峡市位于黄河上游宁夏平原中部,地势平坦,牛首、峡口两山对峙,黄河穿峡而过,山光水色相映,宛如开然铜镜,“青铜峡”由此而得名。地处西北内陆,东部季风区与西部干旱区域的交汇地带,属…

zaoqiang

枣强Shopify建站

枣强县位于河北省东南部,衡水市南端,界于东经115°35′~58′,北纬37°08′~35′之间,总面积892.3平方公里。东隔清凉江与景县、故城相望,西临冀州市,南靠邢台地区南宫市,北接桃城区、武邑县。…

nanan

南岸外贸推广

南岸区,是重庆都市区(重庆主城区),重庆大都市区,地处重庆市西南部。南岸区是以城市为主的都市工业区、中央商务区、国际会展区、风景旅游区。南岸区东部、南部接巴南区,西濒九龙坡区、渝…

cangxian

沧县外贸推广

沧县位于河北省东南部,冀中平原东部,北冀京津,东邻渤海,地理坐标在北纬38°5′至38°3′,东经116°27′至117°9′之间。县政府驻沧州市新华区,全县总面积1527平方公里,其中耕地面积129万亩,总…

xinhua

新华Google SEO

新华区隶属于河北省沧州市,地处沧州市区东半部,与运河区以清池大道为界,行政区域总面积88.5平方千米。新华区属暖温带半湿润大陆性季风气候,四季分明,日照充足。截至2014年,新华区下辖5个…

xingqing

兴庆Google SEO

金凤区于2002年11月1日成立,是宁夏回族自治区首府银川市的市辖区之一,位于市区中部,东到唐徕渠,西到包兰铁路,南接永宁县,北临贺兰县,辖良田、丰登2个镇,上海西路、北京中路、长城中路…

zhongwei

中卫GEO优化

中卫地处黄河前套之首,位于宁夏回族自治区中西部、宁、甘、内蒙古三省区交界点上,辖中宁、海原两县和中卫城区,总面积16986.1平方公里,其中川区面积3681.1平方公里,占21.67%,山区面积1330…

shizhu

石柱GEO优化

石柱土家族自治县简称石柱县,位于重庆市东部、长江南岸、山峡库区腹心,是集少数民族自治县、三峡库区淹没县、国家扶贫工作重点县于一体的特殊县份。幅员面积3012平方公里,辖32个乡镇,总人…

ningxia

宁夏谷歌SEM

xiongxian

雄县谷歌SEM

河北省保定市雄县位于东经116°06',北纬38°59'。平均海拔10米。处于冀中平原的京、津、保三角腹地,南倚“华北明珠”白洋淀,北靠“京南小香港”___白…

pengyang

彭阳Facebook广告

彭阳县位于宁夏回族自治区,位于宁夏回族自治区南部边缘,六盘山东麓,介于东经106°32′-106°58’之间,北纬35°4l’-36°17’。西连宁夏固原市原州区,东、南、北环临甘肃…

kaizhou

开州Facebook广告

开州区隶属于重庆市,位于重庆市东北部,三峡库区小江支流回水末端,介于北纬30°49′30″-31°41′30″、东经107°55′48″-108°54′之间,西邻四川省开江县,北依大巴山接城口县和四川省宣汉县,东毗云…

wushan

巫山Yandex推广

巫山位于重庆市东北部,三峡库区腹心,素有“渝东门户”之称,地跨长江巫峡两岸。东邻湖北省巴东县,西接奉节县,南与湖北省建始县毗连,北与巫溪县及神农架林区接壤。县城位于大宁河与长江交汇…

beidaihe

北戴河Yandex推广

北戴河海滨地处河北省秦皇岛市中心的西部。是秦皇岛的城市区之一!受海洋气候的影响,夏无酷暑,冬无严寒,常年保持一级大气质量,没有污染,没有噪音,城市森林覆盖率54%,人均绿地630平方米…

fuling

涪陵TikTok推广

重庆市涪陵区,邑枕长、乌两江,素为乌江流域物资集散地,有渝东南门户之称,是闻名遐迩的中国“榨菜之乡”。全区幅员面积2946平方公里,辖1个经济技术开发区、1个私营经济示范区和44个乡镇、街…

为什么一定要选懂产业带的出海服务商?建材丝网的欧洲建筑商看资质与交期,工业橡塑的中东工程商问耐温与工况,毛皮服饰的俄罗斯分销商算的是季节与毛利。买家不同,决策逻辑就不同;信科网络把这些差异拆进网站结构、关键词地图和投放策略里,用他们习惯的方式出现在他们搜索的地方。