当前位置: 首页 > news >正文

Zabbix 数据库 history_uint 表损坏修复

问题现象

使用CentOS 9部署Zabbix 7.0使用一段时间后,查询历史数据时出现报错,Zabbix图形历史数据显示异常。并且Zabbix对接了Grafana,在Grafana历史图形中出现图像数据不连续的现象。

Zabbix前端Top hosts by CPU untilization显示红色告警框,告警内容如下:

Error in query [SELECT * FROM history_uint h WHERE h.itemid='42253' AND h.clock>1739060872 ORDER BY h.clock DESC,h.ns DESC LIMIT 1]
[Index for table 'history_uint' is corrupt; try to repair it]
[zabbix.php:17 → require_once() → ZBase->run() → ZBase->processRequest() → CController->run() → 
Widgets\TopHosts\Actions\WidgetView->doAction() → Widgets\TopHosts\Actions\WidgetView->getData() → 
Widgets\TopHosts\Actions\WidgetView->getitemValues() → CHistoryManager->getLastValues() → 
CHistoryManager->getLastValuesFromSqlWithPk() → DBselect() → trigger_error() in include/db.inc.php:243]

进入数据库检查表状态,表空间损坏丢失。

MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> check table history_uint;
+---------------------+-------+----------+------------------------------------------------------------------------------+
| Table               | Op    | Msg_type | Msg_text                                                                     |
+---------------------+-------+----------+------------------------------------------------------------------------------+
| zabbix.history_uint | check | Error    | Got error 194 "Tablespace is missing for a table" from storage engine InnoDB |
| zabbix.history_uint | check | error    | Corrupt                                                                      |
+---------------------+-------+----------+------------------------------------------------------------------------------+
2 rows in set (0.000 sec)

修复方法

可以通过启用innodb_force_recovery临时模式启动数据库,删除损坏表并重建表结构即可修复history_uint表损坏问题。

1、停止Zabbix服务

[root@localhost ~]# systemctl stop zabbix-server

2、启用InnoDB强制恢复模式

编辑MySQL主配置文件/etc/my.cnf

[root@localhost ~]# vim /etc/my.cnf

在主配置文件中添加以下内容:

[mysqld]
innodb_force_recovery=1

3、重启数据库服务

[root@localhost ~]# systemctl stop mariadb.service
[root@localhost ~]# systemctl start mariadb.service

4、删除并重建history_uint

进入数据库:

[root@localhost ~]# mysql -uroot -p

执行以下SQL语句:

USE zabbix;
DROP TABLE history_uint;CREATE TABLE `history_uint` (`itemid` bigint(20) unsigned NOT NULL,`clock` int(11) NOT NULL DEFAULT 0,`value` bigint(20) unsigned NOT NULL DEFAULT 0,`ns` int(11) NOT NULL DEFAULT 0,PRIMARY KEY (`itemid`,`clock`,`ns`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;

5、关闭恢复模式并重启数据库

删除/etc/my.cnf配置文件中新增的以下内容:

[mysqld]
innodb_force_recovery=1

重启数据库服务:

[root@localhost ~]# systemctl stop mariadb.service
[root@localhost ~]# systemctl start mariadb.service

6、启动Zabbix服务

[root@localhost ~]# systemctl start zabbix-server

至此,即可完成history_uint表损坏导致历史数据查询异常的问题。

脚本修复

1、创建一个名为zabbix_db_tools.sh的文件

vim zabbix_db_tools.sh

2、将以下内容复制到文件中,按下Esc键,然后按下Shift+:键,输入wq!保存

#!/bin/bash
# ===============================================
# Zabbix 数据库修复脚本 (history_uint 表损坏修复)
# 使用前请确认运行用户有root权限
# ===============================================MYSQL_CONF="/etc/my.cnf"
MYSQL_CMD="/usr/bin/mariadb -uroot"
ZABBIX_DB="zabbix"echo "==============================="
echo "开始执行 Zabbix 数据库修复流程..."
echo "==============================="# Step 1: 停止 Zabbix 服务
echo "[1/10] 停止 Zabbix 服务..."
systemctl stop zabbix-server 2>/dev/null
systemctl stop zabbix-agent 2>/dev/null# Step 2: 启用 innodb_force_recovery
echo "[2/10] 启用 innodb_force_recovery=1 ..."
if grep -q "innodb_force_recovery" "$MYSQL_CONF"; thensed -i 's/^#\?\s*innodb_force_recovery=.*/innodb_force_recovery=1/' "$MYSQL_CONF"
elsesed -i '/^\[mysqld\]/a innodb_force_recovery=1' "$MYSQL_CONF"
fi# Step 3: 停止数据库服务
echo "[3/10] 停止 MariaDB 数据库..."
systemctl stop mariadb.service# Step 4: 启动数据库(恢复模式)
echo "[4/10] 启动 MariaDB (恢复模式)..."
systemctl start mariadb.service
sleep 3# Step 5-6: 删除并重建表
echo "[5/10] 连接数据库并修复表..."
$MYSQL_CMD <<EOF
USE $ZABBIX_DB;
DROP TABLE IF EXISTS history_uint;
CREATE TABLE \`history_uint\` (\`itemid\` bigint(20) unsigned NOT NULL,\`clock\` int(11) NOT NULL DEFAULT 0,\`value\` bigint(20) unsigned NOT NULL DEFAULT 0,\`ns\` int(11) NOT NULL DEFAULT 0,PRIMARY KEY (\`itemid\`,\`clock\`,\`ns\`)
) ENGINE=InnoDB
DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
EOF# Step 7: 禁用 innodb_force_recovery
echo "[6/10] 禁用 innodb_force_recovery..."
sed -i 's/^innodb_force_recovery/#innodb_force_recovery/' "$MYSQL_CONF"# Step 8-9: 重启数据库
echo "[7/10] 重启 MariaDB..."
systemctl stop mariadb.service
sleep 2
systemctl start mariadb.service
sleep 3# Step 10: 启动 Zabbix 服务
echo "[8/10] 启动 Zabbix 服务..."
systemctl start zabbix-server
systemctl start zabbix-agentecho "==============================="
echo "数据库修复完成!"
echo "请登录 Zabbix 检查数据是否正常。"
echo "==============================="

4、执行脚本进行修复

在脚本所在目录,执行脚本即可修复history_uint表损坏的问题。

sudo ./zabbix_db_tools.sh
http://www.jsqmd.com/news/28687/

相关文章:

  • Azure MCP Server 1.0 正式发布
  • dify+LLM+echarts打造智能可视化数据分析AI助手
  • 操作系统软考复习总结
  • 2025 年 11 月防静电地板厂家推荐排行榜,全钢/全钢陶瓷/硫酸钙/铝合金/pvc架空/防静电地板,OA网络地板,机房防静电地板,办公室网络架空地板公司精选
  • 11.1阅读笔记
  • 2025 年 11 月 Pogopin 弹簧针厂家推荐排行榜,精密测试针,医疗传感器,手机连接器,声学弹簧,仪表锁具,座椅检测优质公司推荐!
  • 2025 年 11 月真空炉厂家推荐排行榜,真空热处理炉,真空回火炉,真空退火炉,真空时效炉,气淬炉,烧结炉,铜钨合金真空焊接炉公司推荐
  • 2025CSP游记
  • Redis单机和集群搭建
  • 2025 年 11 月铣刀厂家推荐排行榜,雕刻机铣刀,金刚石铣刀,木工铣刀,绝缘材料铣刀,碳纤维铣刀,亚克力铣刀,金属加工铣刀公司推荐
  • 电子丨LDO与DC-DC电源管理器件
  • 2025 年 11 月不锈钢厂家推荐排行榜,301不锈钢,316L不锈钢,304不锈钢,420不锈钢,201不锈钢,不锈钢材料公司精选
  • CSP NOIP 2025 游记
  • 2025年10月文章一览
  • 2025 CSP 游记
  • 市面上常见显示屏接口与对应的引脚 - 详解
  • SPF Pro 初学者教程 – 移动取证(分步指南)
  • 002 vue3-admin项目的目录及文件说明
  • Unreal:中文设置小技巧
  • 2025 年 11 月阿里巴巴代运营厂家推荐排行榜,1688代运营,国际站代运营,淘宝代运营,天猫代运营,店铺代运营公司精选
  • PPT 中如何使得水平线水平,垂直线垂直,不要倾斜
  • 2025 年 11 月法兰闸阀厂家推荐排行榜,美标/国标/锻钢/高压/碳钢/高温/焊接闸阀,专业制造与可靠性能口碑之选
  • 2025 年 11 月超滤膜厂家最新推荐,产能、专利、环保三维数据透视
  • 2025 年 11 月超滤膜厂家最新推荐,技术实力与市场口碑深度解析
  • 2025 年 11 月办公家具厂家推荐排行榜,办公桌,办公椅,文件柜,会议桌,办公家具定制公司推荐
  • 审慎享受95%,深入思考5%:智能时代的人机共生哲学
  • Ai复习
  • 2025 年 11 月集装袋厂家最新推荐,技术实力与市场口碑深度解析
  • 2025铣刀厂家推荐众业达精工,专业生产雕刻机/金刚石/木工/绝缘材料铣刀
  • 2025 年 11 月立式砂磨机厂家推荐排行榜,立式纳米砂磨机,小型立式砂磨机,高效研磨设备专业选购指南