编辑:我应该在ServerFault上创建这篇文章,错误的标签,抱歉。
我正在尝试升级我的Zabbix服务器(MySQL DB)。 当前版本是2.4.8,我想将其更新为3.4.4
安装进展顺利。当我启动zabbix-server进程时,数据库开始升级,然后停止并显示以下错误消息:
[Z3005] query failed: [1034] Incorrect key file for table 'alerts'; try to repair it [alter table alerts add p_eventid bigint unsigned]
所以,我停止了zabbix-server,做了“alter table alerts add p_eventid bigint unsigned”,重启了zabbix-server,现在收到了这条错误信息:
[Z3005] query failed: [1060] Duplicate column name 'p_eventid' [alter table alerts add p_eventid bigint unsigned]
这对我来说有点麻烦,因为错误信息不同,但建议的解决方案仍然是相同的,并且已经完成。
我做了一些研究,发现this ZBX bug report可能有用,但我不知道如何应用变通方法,因为我不是SQL的专家。据我所知,警报表中有一个缺失的索引(alerts_7)。在谷歌搜索之后,我尝试使用以下命令创建它:
create INDEX on alerts (p_eventid) USING BTREE;
仍有错误(第二个)。
任何人都有这种情况,并找到了如何解决它?
答案 0 :(得分:1)
[Z3005] query failed: [1060] Duplicate column name 'p_eventid' [alter table alerts add p_eventid bigint unsigned]
表示升级脚本正在尝试向alerts
表添加列,但当前存在具有该名称的列! (可能来自先前失败的升级尝试)
您需要首先缓解导致其失败的所有其他问题,然后使用
删除该列 alter table alerts drop p_eventid;
并再次尝试运行zabbix_server
以重试数据库升级。
答案 1 :(得分:0)
方括号中的部分不是建议,而是尝试的命令。现在它失败了,因为列已经存在。
在这种情况下,删除该列并再次启动Zabbix服务器可能就足够了。确保在开始升级之前进行数据库备份。
答案 2 :(得分:0)
最后还有一些时间来解决这个问题,问题是tmp目录太小而无法进行升级操作。更改my.cnf中的tmp路径并重新启动升级后,一切都按预期工作!