公务员系统”数据库没有正常启动或异常”怎么办

打开全国公务员管理信息系统,页面弹出一句红字”数据库没有正常启动或异常”,或者干脆网页就打不开——这是不少人事干部都遇到过的拦路虎。本文把这个故障从最常见的”服务没起来”,一直讲到最隐蔽、最容易把人坑半天的真因(往数据目录里拷库导致 InnoDB 表空间 ID 冲突),给出一套照着做就能恢复的分步排障流程,并告诉你以后怎么避免再踩。

(配图:系统登录页弹出”数据库没有正常启动或异常”提示框)

一、先搞清楚:这个报错到底在说什么

全国公务员管理信息系统是组织部门内部使用、装在本机或局域网里的一套软件。它在你电脑上其实是两个东西捆在一起跑

  • 一个自带的 Tomcat(Java 网站服务),负责把页面渲染出来,应用上下文通常是 /qggwy
  • 一个自带的 MySQL(数据库服务),负责存放全部人员数据,库名通常类似 hy_qggwy

系统一般装在类似 D:\Soft\hzbXXXX\ 这样的目录下。在 Windows 服务里,这两个服务的名字常形如 GWY20_TomcatGWY20_Mysql(不同版本/年份后缀会有差异,以你机器实际为准)。

“数据库没有正常启动或异常”这句话,本质就是:网站(Tomcat)起来了,但它连不上那个自带的 MySQL。所以排障的核心,永远是先去看 MySQL 服务到底起没起、为什么没起。这也是”公务员系统数据库连接失败”这类问题最根本的指向。

二、第一步:看服务是不是没起来(最常见)

绝大多数”数据库没有正常启动或异常”,都是 MySQL 服务这一刻没在运行。先做这一步,能解决一大半情况。

操作(以你所用版本界面为准):

  1. Win + R,输入 services.msc,回车,打开”服务”管理器。
  2. 在列表里找名字带 GWY20_Mysql(或类似 *_Mysql*MySQL*)的那个服务,看”状态”列。
  3. 如果状态是空白/已停止,右键 → 启动
  4. 再把 GWY20_Tomcat(应用服务)也确认成”正在运行”。

很多系统目录下还自带维护脚本,比如 tools\重启数据库.battools\重启应用.bat,双击它们也能重启对应服务,效果一样。

关键提醒:一定要用管理员身份。 这两个 Windows 服务必须由管理员账户来启动。如果你用普通权限去启服务,会被系统拒绝,常见报错是 “Cannot open service”(无法打开服务)。所以:右键脚本/命令行选择”以管理员身份运行”,再去启动服务。

(配图:services.msc 中 GWY20_Mysql 服务状态与右键”启动”菜单)

启动后,等十几秒让数据库完成初始化,再刷新 /qggwy 页面。如果服务能正常启动并停在”正在运行”,问题通常就解决了。

三、第二步:服务启动几秒又自己停?去读 .err 日志

如果你点了”启动”,服务转一下又自己变回”已停止”,反复起不来——别再盲目重试了,这说明 MySQL 在启动过程中崩溃了,得去看它的错误日志找真因。

日志文件就在系统的 MySQL 数据目录下:

(系统安装目录)\mysql\data\<本机主机名>.err

用记事本打开这个 .err 文件,翻到最末尾(最新的报错在最下面)。日志会直白地告诉你它为什么起不来。如果你看到的是磁盘空间不足、端口被占用(MySQL 端口常见如 35017)、文件权限等,按提示处理即可。

但有一类报错,是本项目真机亲历、也是最容易把人困住的——下面单独讲。

四、最隐蔽的真因:往 data 目录拷库,导致 InnoDB 表空间 ID 冲突

这是一个高发又反直觉的坑,很多人是这么把数据库搞崩的:

系统每年升级换库(比如从去年的 hy_qggwyXXXX 升到今年的 hy_qggwy),有人为了”留个底”或”把去年数据并过来”,直接把另一个库的整个目录,拷进了当前 MySQL 的 mysql\data\ 文件夹里

看起来只是复制了个文件夹,结果整个公务员系统页面都打不开了,数据库服务怎么都起不来。

为什么拷一下就崩

MySQL(InnoDB 引擎)的每个表,对应数据目录里一个 .ibd 文件,这个文件内部带着一个”表空间 ID”(space ID)。这个 ID 在同一个 MySQL 实例里必须唯一

你拷进来的那个旧库,它的 .ibd 文件带着当年那套表空间 ID。一旦它和当前真库里某张表的 ID 撞了(真机实测中,比如两个库的 a01_config 表都用 space ID 1138),MySQL 启动做崩溃恢复时就会发现”同一个 ID 怎么有两个表空间”,于是直接中止恢复、拒绝启动。MySQL 一死,Tomcat 连不上库,前台就报”数据库没有正常启动或异常”、或者”公务员管理信息系统打不开 数据库”。

怎么确认是这个原因

打开上一步那个 .err 日志,如果你在末尾看到类似下面这几句(关键词),基本就能锁定:

  • Attempted to open a previously opened tablespace(试图打开一个已打开过的表空间)
  • Cannot open tablespace ...(无法打开表空间)
  • We do not continue the crash recovery(我们不再继续崩溃恢复)

只要出现”表空间 ID 冲突 + 不再继续崩溃恢复”这组特征,就是它。

(配图:mysql\data\主机名.err 日志中表空间 ID 冲突报错片段)

分步修复(亲测有效)

  1. 先停服务:在服务管理器里把 GWY20_Mysql 停掉(如果它还在反复尝试启动)。
  2. 找出多余的库目录:进入 (安装目录)\mysql\data\,对照日志报错,找到那个不该在这里的库目录(通常就是你手动拷进去的、名字带去年年份的那个,如 hy_qggwyXXXX)。真正的当前库目录(如 hy_qggwy不要动
  3. 把多余库目录移出 data 目录——是”移走”,不是”删除”。在同一个盘里把它剪切到别处(比如 D:\临时备份\),同盘移动是秒完成的,而且留着可以随时还原,万一搬错了不至于丢数据。
  4. 以管理员身份重启服务:用”以管理员身份运行”打开 tools\重启数据库.bat(或在服务管理器里启动 GWY20_Mysql),等它正常起来后再启动 GWY20_Tomcat / 重启应用。
  5. 刷新 /qggwy 页面验证,系统应当恢复正常。

记住核心动作:把多余的库目录从 data 目录里搬出去,再以管理员身份重启数据库和应用服务。 大多数这类故障到这一步就好了。

五、根本原则:克隆/迁移库只能用 mysqldump,绝不能拷 .ibd

经过上面的坑,结论非常明确,请把它当铁律记住:

  • 绝不能把一个库的目录、.ibd 文件直接拷进正在用的 MySQL 数据目录(datadir)。.ibd 带着原表空间 ID,迟早撞车让数据库起不来;而且即便侥幸没崩,光拷目录 InnoDB 引擎在新实例里也认不出这些表(会报”表不存在”),数据根本读不出来。
  • 想把数据从一个库搬到另一个库、或者做备份,只能用 mysqldump 导出成 .sql 文本,再导入目标库。这才是 InnoDB 安全的迁移方式。

六、如果服务都正常,页面还是打不开

如果你确认 GWY20_Mysql 和 GWY20_Tomcat 都”正在运行”,但网页仍然打不开,可对照公务员系统打不开 / 无法打开排查逐项核对,方向通常是这几类(以你所用版本界面为准):

  • 端口被占用:MySQL/Tomcat 的端口(如数据库 35017、应用 54022)被别的程序占了,导致服务起了但绑不上端口;若是旧版本卸载没清干净、残留进程仍占着端口,可参考卸载残留彻底清理
  • 浏览器内核/兼容性问题:这套系统对浏览器内核、兼容性视图、证书有要求,换用系统推荐的浏览器或调整兼容性设置再试。
  • 顺序问题:先确保数据库服务完全起来,再启动应用服务,不要反过来。

七、预防:以后别再让数据库崩

  • 升级换年份时,不要手动往 mysql\data\ 里拷任何库目录;旧数据该归档就用 mysqldump 导出 .sql 留存。
  • 任何重启数据库/应用的操作,统一以管理员身份运行那些 tools\ 下的维护脚本。
  • 动数据目录之前,先把要搬的东西移走而非删除,留好可还原的退路。

写在最后:把精力还给”填报”本身

把数据库伺候好,是为了能顺顺当当地往系统里录数据。而真正耗人的,往往是后面那一摊——成百上千人的信息,逐人逐字段手工敲进系统。如果你正被批量录入折磨,报数侠·公务员信息填报助手这类第三方工具能帮你把整理好的 Excel 批量导入系统、顺带做字段校验,省去机械的手工录入。需要的话可以了解一下 baoshuxia.com

逐人逐字段手工录入,太耗时?

报数侠·公务员信息填报助手能把整理好的 Excel 批量导入系统、顺带做字段与单位校验,把机械的录入活省下来。工具仅帮你省手工,系统本体与权威填报口径仍以官方为准。

了解报数侠 →