Zabbix Datenbank manuell bereinigen MySQL MariaDB
Aus znilwiki
Changelog:
- 27.01.2025 erste Version
Vorwort
Bedenkt was Ihr tut! Macht vorher ein Backup und/oder Snapshot! Kontrolliert was passiert über das Webinterface!
Und Geduld! Unter umständen kann das löschen der Einträge einige zeit dauern. Minuten. Stunden.
Größe der Datenbank prüfen
Als Datei
Die Datenbankdatei prüfen / Dateigröße im Dateisystem / Platz der auf der Festplatte belegt wird
du -h /var/lib/mysql
Beispielausgabe:
101M /var/lib/mysql/#innodb_redo 804K /var/lib/mysql/#innodb_temp 124K /var/lib/mysql/sys 36K /var/lib/mysql/mysql 1,6M /var/lib/mysql/performance_schema 7,6G /var/lib/mysql/zabbix 14G /var/lib/mysql
Die Zabbix-Datenbank ist hier also ca. 7,6GB groß.
Innerhalb der Datenbank
MySQL/MariaDB Prompt starten
mysql
und dann folgende Befehle nutzen:
Datenbankgröße in MiB:
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024, 2) AS "Size (MiB)" FROM information_schema.TABLES GROUP BY table_schema;
Beispielausgabe:
+--------------------+------------+ | Database | Size (MiB) | +--------------------+-----------+ | information_schema | 0.00 | | mysql | 3.00 | | performance_schema | 0.00 | | sys | 0.02 | | zabbix | 5027.05 | +--------------------+------------+ 5 rows in set (0,08 sec)
Alternativ in GiB:
SELECT table_schema AS "Database", ROUND(SUM(data_length + index_length) / 1024 / 1024 / 1024, 2) AS "Size (GiB)" FROM information_schema.TABLES GROUP BY table_schema;
Beispielausgabe:
+--------------------+------------+ | Database | Size (GiB) | +--------------------+------------+ | information_schema | 0.00 | | mysql | 0.00 | | performance_schema | 0.00 | | sys | 0.00 | | zabbix | 4.91 | +--------------------+------------+ 5 rows in set (0,00 sec)
Die Datenbank ist also als Datei 7,6GiB groß, innerhalb der Datei sind aber nur 4,9GiB belegt.
Größe der Zabbix-Tabellen anzeigen lassen
MySQL/MariaDB Prompt starten und zur Zabbix-Datenbank wechseln:
mysql use zabbix;
und dann folgende Befehle nutzen:
SELECT table_name AS "Table", ROUND(((data_length + index_length) / 1024 / 1024), 2) AS "Size (MB)" FROM information_schema.TABLES WHERE table_schema = "zabbix" ORDER BY (data_length + index_length) DESC;
Beispielausgabe:
+----------------------------+-----------+
| Table | Size (MB) |
+----------------------------+-----------+
| history_uint | 2368.05 |
| trends_uint | 1115.06 |
| history | 569.03 |
| trends | 535.05 |
| auditlog | 172.23 |
| history_text | 100.02 |
| history_log | 69.02 |
| events | 22.06 |
| alerts | 11.95 |
| items | 10.33 |
| history_str | 10.02 |
| event_tag | 7.03 |
| images | 6.56 |
| event_recovery | 5.05 |
| functions | 3.48 |
| triggers | 3.11 |
| item_tag | 3.03 |
| item_discovery | 1.86 |
| item_rtname | 1.42 |
| item_rtdata | 1.38 |
| item_preproc | 0.73 |
| graphs_items | 0.63 |
| trigger_depends | 0.58 |
| graphs | 0.45 |
| hosts | 0.38 |
| valuemap_mapping | 0.36 |
| trigger_tag | 0.33 |
| trigger_discovery | 0.31 |
| widget_field | 0.23 |
| hosts_groups | 0.17 |
| item_condition | 0.17 |
| profiles | 0.17 |
| hostmacro | 0.16 |
| sysmaps_elements | 0.16 |
| problem | 0.14 |
| config | 0.09 |
| event_suppress | 0.08 |
| host_discovery | 0.08 |
| hosts_templates | 0.08 |
| sysmaps | 0.08 |
| token | 0.08 |
| acknowledges | 0.06 |
| escalations | 0.06 |
| graph_discovery | 0.06 |
| group_prototype | 0.06 |
| host_hgset | 0.06 |
| host_proxy | 0.06 |
| httptest | 0.06 |
| interface | 0.06 |
| lld_override_optemplate | 0.06 |
| media | 0.06 |
| media_type | 0.06 |
| report | 0.06 |
| report_user | 0.06 |
| report_usrgrp | 0.06 |
| role_rule | 0.06 |
| scripts | 0.06 |
| sysmaps_links | 0.06 |
| task | 0.06 |
| userdirectory_usrgrp | 0.06 |
| users | 0.06 |
| usrgrp | 0.06 |
| actions | 0.05 |
| autoreg_host | 0.05 |
| correlation | 0.05 |
| dashboard | 0.05 |
| dashboard_user | 0.05 |
| dashboard_usrgrp | 0.05 |
| drules | 0.05 |
| dservices | 0.05 |
| group_discovery | 0.05 |
| ha_node | 0.05 |
| host_inventory | 0.05 |
| httpstepitem | 0.05 |
| httptestitem | 0.05 |
| icon_map | 0.05 |
| icon_mapping | 0.05 |
| lld_override | 0.05 |
| lld_override_condition | 0.05 |
| lld_override_operation | 0.05 |
| lld_override_optag | 0.05 |
| maintenances | 0.05 |
| maintenances_groups | 0.05 |
| maintenances_hosts | 0.05 |
| maintenances_windows | 0.05 |
| mfa_totp_secret | 0.05 |
| opcommand_grp | 0.05 |
| opcommand_hst | 0.05 |
| opgroup | 0.05 |
| opmessage_grp | 0.05 |
| opmessage_usr | 0.05 |
| optemplate | 0.05 |
| proxy | 0.05 |
| proxy_dhistory | 0.05 |
| rights | 0.05 |
| service_alarms | 0.05 |
| service_problem | 0.05 |
| services_links | 0.05 |
| sysmap_element_trigger | 0.05 |
| sysmap_user | 0.05 |
| sysmap_usrgrp | 0.05 |
| sysmaps_link_triggers | 0.05 |
| tag_filter | 0.05 |
| user_scim_group | 0.05 |
| userdirectory_idpgroup | 0.05 |
| userdirectory_media | 0.05 |
| users_groups | 0.05 |
| changelog | 0.03 |
| conditions | 0.03 |
| config_autoreg_tls | 0.03 |
| connector | 0.03 |
| connector_tag | 0.03 |
| corr_condition | 0.03 |
| corr_condition_group | 0.03 |
| corr_operation | 0.03 |
| dashboard_page | 0.03 |
| dchecks | 0.03 |
| dhosts | 0.03 |
| event_symptom | 0.03 |
| expressions | 0.03 |
| globalmacro | 0.03 |
| graph_theme | 0.03 |
| hgset | 0.03 |
| hgset_group | 0.03 |
| host_tag | 0.03 |
| hstgrp | 0.03 |
| httpstep | 0.03 |
| httpstep_field | 0.03 |
| httptest_field | 0.03 |
| httptest_tag | 0.03 |
| interface_discovery | 0.03 |
| item_parameter | 0.03 |
| lld_macro_path | 0.03 |
| maintenance_tag | 0.03 |
| media_type_message | 0.03 |
| media_type_param | 0.03 |
| opcommand | 0.03 |
| opconditions | 0.03 |
| operations | 0.03 |
| opmessage | 0.03 |
| optag | 0.03 |
| permission | 0.03 |
| problem_tag | 0.03 |
| proxy_autoreg_host | 0.03 |
| proxy_history | 0.03 |
| regexps | 0.03 |
| report_param | 0.03 |
| role | 0.03 |
| script_param | 0.03 |
| service_problem_tag | 0.03 |
| service_status_rule | 0.03 |
| service_tag | 0.03 |
| sessions | 0.03 |
| sla | 0.03 |
| sla_excluded_downtime | 0.03 |
| sla_schedule | 0.03 |
| sla_service_tag | 0.03 |
| sysmap_element_url | 0.03 |
| sysmap_shape | 0.03 |
| sysmap_url | 0.03 |
| sysmaps_element_tag | 0.03 |
| task_result | 0.03 |
| ugset_group | 0.03 |
| user_ugset | 0.03 |
| userdirectory | 0.03 |
| valuemap | 0.03 |
| widget | 0.03 |
| corr_condition_tag | 0.02 |
| corr_condition_tagpair | 0.02 |
| corr_condition_tagvalue | 0.02 |
| dbversion | 0.02 |
| globalvars | 0.02 |
| history_bin | 0.02 |
| host_rtdata | 0.02 |
| housekeeper | 0.02 |
| ids | 0.02 |
| interface_snmp | 0.02 |
| lld_override_opdiscover | 0.02 |
| lld_override_ophistory | 0.02 |
| lld_override_opinventory | 0.02 |
| lld_override_opperiod | 0.02 |
| lld_override_opseverity | 0.02 |
| lld_override_opstatus | 0.02 |
| lld_override_optrends | 0.02 |
| mfa | 0.02 |
| module | 0.02 |
| opinventory | 0.02 |
| proxy_group | 0.02 |
| proxy_group_rtdata | 0.02 |
| proxy_rtdata | 0.02 |
| scim_group | 0.02 |
| services | 0.02 |
| task_acknowledge | 0.02 |
| task_check_now | 0.02 |
| task_close_problem | 0.02 |
| task_data | 0.02 |
| task_remote_command | 0.02 |
| task_remote_command_result | 0.02 |
| timeperiods | 0.02 |
| trigger_queue | 0.02 |
| ugset | 0.02 |
| userdirectory_ldap | 0.02 |
| userdirectory_saml | 0.02 |
+----------------------------+-----------+
203 rows in set (0,00 sec)
Die Tabelle ist von Groß nach Klein sortiert, der oberste Eintrag ist also die größte Tabelle.
history_uint und trends_uint sind traditionell die größten, in den beiden befinden sich die historischen Zahlenwerte
Zabbix Tabellen für History und Trend bereinigen
Quelle: https://www.zabbix.com/forum/zabbix-help/444108-how-to-delete-old-information-in-tables-history_uint-and-history Für alle nachfolgenden Bereinigungen gilt: MySQL/MariaDB Prompt starten und zur Zabbix-Datenbank wechseln:
mysql use zabbix;
Ich schlage hier immer 365 Tage vor. History ist zumeist auf 7 bis 30 Tage, Trends auf 90 bis 365 Tage.
Testet es einmal mit den hohen Werten bevor Ihr an das Eingemachte geht.
Alerts, Acknowledges und Events
Zeitraum zum Löschen auf "älter als" 365 Tage setzen:
SET @history_interval = 365;
Alarme löschen:
DELETE FROM alerts WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
Bestätigungen:
DELETE FROM acknowledges WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
Ereignisse:
DELETE FROM events WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
History
Zeitraum zum Löschen auf "älter als" 365 Tage setzen:
SET @history_interval = 365;
Index-Tabelle bereinigen (wenn ihr diese Bereinigt, dann unbedingt alle anderen auch):
DELETE FROM history WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
Alle Zahlenwerte:
DELETE FROM history_uint WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
Alle Strings, Texte und Logdaten
DELETE FROM history_str WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60); DELETE FROM history_text WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60); DELETE FROM history_log WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@history_interval * 24 * 60 * 60);
Trends
Zeitraum auf 400 Tage
SET @trends_interval = 400;
Und löschen:
DELETE FROM trends WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@trends_interval * 24 * 60 * 60); DELETE FROM trends_uint WHERE (UNIX_TIMESTAMP(NOW()) - clock) > (@trends_interval * 24 * 60 * 60);
Tabellen ganz leeren (alles wegwerfen)
Man kann die Tabellen auch ganz leeren, also alle Altdaten abschneiden:
truncate table history; truncate table history_uint; truncate table history_str; truncate table history_text; truncate table history_log; truncate table trends; truncate table trends_uint;