Zabbix を操作しているときにホストが削除できなくなって困ったので,解決方法をメモしておきます.
問題のエラー
発生したのは次のようなエラーです.この状態になると,Web インターフェースからはホストが削除できなくなります.
1 2 3 |
ホストを削除できません Error in query [DELETE FROM hosts WHERE hostid='10376'] [Cannot delete or update a parent row: a foreign key constraint fails (`zabbix`.`items`, CONSTRAINT `c_items_4` FOREIGN KEY (`interfaceid`) REFERENCES `interface` (`interfaceid`))] SQLの実行に失敗しました"DELETE FROM hosts WHERE hostid='10376'" |
解決方法
コマンドラインから MariaDB を操作し,不整合を解消することで,解決できます.
具体的な手順は次の通りです.
- MaridDB に接続します.
1mysql -p -u root - Zabbix データベースを選択.
1> use zabbix; - 問題となっているレコードを調査.
hostid
にはエラーメッセージに記載された数字を指定します.
1> SELECT itemid,hostid,key_ FROM items WHERE interfaceid IN (SELECT interfaceid FROM interface WHERE hostid=10376); - 問題となっているレコードを削除.
IN
には,先ほどの出力に含まれるitemid
の数字を列挙します.1> DELETE FROM `zabbix`.`items` WHERE `itemid` IN (35475, 35476, 35477, 35478, 35479, 35480, ) - 削除されたことを確認.
`再び,3. と同じコマンドを実行して,今回は何も表示されないことを確認します.1> SELECT itemid,hostid,key_ FROM items WHERE interfaceid IN (SELECT interfaceid FROM interface WHERE hostid=10376); - Web から削除を実行.
今回はエラーメッセージ無く,削除できると思います.
次のような出力が得られます.
1 2 3 4 5 6 7 8 9 10 11 |
+--------+--------+---------------------------------+ | itemid | hostid | key_ | +--------+--------+---------------------------------+ | 35475 | 10376 | net.if.in["{#IFNAME}",dropped] | | 35476 | 10376 | net.if.in["{#IFNAME}",errors] | | 35477 | 10376 | net.if.in["{#IFNAME}"] | | 35478 | 10376 | net.if.out["{#IFNAME}",dropped] | | 35479 | 10376 | net.if.out["{#IFNAME}",errors] | | 35480 | 10376 | net.if.out["{#IFNAME}"] | +--------+--------+---------------------------------+ 6 rows in set (0.001 sec) |
コメント