This is a translation of the original English documentation page. Help us make it better.

3 Adatbázis frissítése elsődleges kulcsokra

Áttekintés

A Zabbix 6.0 óta az elsődleges kulcsok minden táblához használatosak új telepítések.

Ez a rész utasításokat tartalmaz a kézi frissítéshez előzménytáblázatokat a meglévő telepítésekben az elsődleges kulcsokhoz.

Az utasítások a következőkhöz érhetők el:

The instructions provided on this page are designed for advanced users. Note that these instructions might need to be adjusted for your specific configuration.

Fontos jegyzetek

  • A frissítés előtt mindenképpen készítsen biztonsági másolatot az adatbázisról.
  • Ha az adatbázis partíciókat használ, kérjen segítséget a DB adminisztrátorától vagy a Zabbix támogatási csapatától.
  • Erősen ajánlott a Zabbix szerver leállítása a frissítés idejére. Ha azonban feltétlenül szükséges, van mód a frissítés végrehajtására, miközben a kiszolgáló fut (csak MySQL, MariaDB és PostgreSQL esetén TimescaleDB nélkül).
  • A CSV-fájlok az elsődleges kulcsokra való sikeres frissítés után eltávolíthatók.
  • Opcionálisan a Zabbix kezelőfelülete [karbantartási módba] (/manual/web_interface/maintenance_mode) kapcsolható.
  • Az elsődleges kulcsokra való frissítést a Zabbix szerver 6.0-ra való frissítése után kell elvégezni.
  • Proxy esetén a nem használt előzménytáblák frissíthetők a history_pk_prepare.sql futtatásával.

MySQL

Az exportálást és importálást a tmux/screen-ben kell végrehajtani, hogy a munkamenet ne vesszen el.

Lásd még: Fontos megjegyzések

MySQL 8.0+ mysqlsh-val

Ez a módszer használható egy futó Zabbix szerverrel, de javasolt a szerver leállítása a frissítés idejére. A MySQL Shellnek (mysqlsh) [telepítve] (https://dev.mysql.com/doc/mysql-shell/8.0/en/mysql-shell-install-linux-quick.html) és csatlakozni kell a DB-hez.

  • Jelentkezzen be a MySQL konzolba rootként (ajánlott) vagy bármely FILE jogosultsággal rendelkező felhasználóként.

  • Indítsa el a MySQL-t a local_infile változóval.

  • A régi táblák átnevezése és új táblák létrehozása a history_pk_prepare.sql futtatásával.

mysql -uzabbix -p<jelszó> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql
  • Adatok exportálása és importálása.

Csatlakozás mysqlsh-n keresztül. Ha socket kapcsolatot használ, szükség lehet az elérési út megadására.

sudo mysqlsh -uroot -S /run/mysqld/mysqld.sock --no-password -Dzabbix

Futtatás (a CSVPATH szükség szerint módosítható):

CSVPATH="/var/lib/mysql-files";
       
       util.exportTable("history_old", CSVPATH + "/history.csv", { dialect: "csv" });
       util.importTable(CSVPATH + "/history.csv", {"dialektus": "csv", "tábla": "előzmények" });
       
       util.exportTable("history_uint_old", CSVPATH + "/history_uint.csv", { dialect: "csv" });
       util.importTable(CSVPATH + "/history_uint.csv", {"dialektus": "csv", "tábla": "history_uint" });
       
       util.exportTable("history_str_old", CSVPATH + "/history_str.csv", { dialect: "csv" });
       util.importTable(CSVPATH + "/history_str.csv", {"dialektus": "csv", "tábla": "history_str" });
       
       util.exportTable("history_log_old", CSVPATH + "/history_log.csv", { dialect: "csv" });
       util.importTable(CSVPATH + "/history_log.csv", {"dialektus": "csv", "tábla": "history_log" });
       
       util.exportTable("history_text_old", CSVPATH + "/history_text.csv", { dialect: "csv" });
       util.importTable(CSVPATH + "/történeti_szöveg.csv", {"dialektus": "csv", "tábla": "történet_szöveg" });
  • Kövesse az [áttelepítés utáni utasításokat] (#af-migration) a régi táblázatok elvetéséhez.

MariaDB/MySQL 8.0+ mysqlsh nélkül

Ez a frissítési módszer több időt vesz igénybe, és csak akkor szabad használni, ha a mysqlsh-val történő frissítés nem lehetséges.

Táblázat frissítése
  • Jelentkezzen be a MySQL konzolba rootként (ajánlott) vagy bármely FILE jogosultsággal rendelkező felhasználóként.

  • Indítsa el a MySQL-t a local_infile változóval.

  • A régi táblák átnevezése és új táblák létrehozása a history_pk_prepare.sql futtatásával:

mysql -uzabbix -p<jelszó> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql
Migráció leállított szerverrel

A max_execution_time beállítást le kell tiltani az adatok migrálása előtt, hogy elkerülje az időkorlátot az áttelepítés során.

SET @@max_execution_time=0;
       
       INSERT IGNORE INTO történelem SELECT * FROM történelem_régi;
       INSERT IGNORE INTO történelem_uint SELECT * FROM history_uint_old;
       INSERT IGNORE INTO history_str SELECT * FROM history_str_old;
       INSERT IGNORE INTO történelem_napló SELECT * FROM történelem_napló_régi;
       INSERT IGNORE INTO történelem_szöveg SELECT * FROM történelem_szöveg_régi;

Kövesse az [áttelepítés utáni utasításokat] (#af-migration) a régi táblázatok elvetéséhez.

Migráció futó szerverrel

Ellenőrizze, hogy mely útvonalak importálása/exportálása engedélyezett:

mysql> SELECT @@secure_file_priv;
       +-----------------------+
       | @@secure_file_priv |
       +-----------------------+
       | /var/lib/mysql-files/ |
       +-----------------------+

Ha a secure_file_priv érték egy könyvtár elérési útja, akkor az exportálás/importálás történik fájlokat abban a könyvtárban. Ebben az esetben ennek megfelelően szerkessze a fájlok elérési útját a lekérdezésekben, vagy állítsa a secure_file_priv értéket üres karakterláncra a frissítés idejére.

Ha a secure_file_priv értéke üres, exportálja/importálja bárhonnan elvégezhető.

Ha a secure_file_priv értéke NULL, állítsa be az exportált táblaadatokat tartalmazó elérési útra (a fenti példában „/var/lib/mysql-files/”).

További információkért lásd MySQL dokumentáció.

Az adatok exportálása előtt a max_execution_time-ot le kell tiltani, hogy elkerüljük az exportálási időtúllépést.

SET @@max_execution_time=0;
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history.csv' MEZŐK VÉGEZÉSE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n' FROM történelem_old;
       ADATOK BETÖLTÉSE '/var/lib/mysql-files/history.csv' ELLENŐRZÉS A TÁBLÁZAT előzményei MEZŐK BEFEJEZÉSE: ',' ESCAPED BY '"' SOROK VÉGEZÉSE '\n';
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' MEZŐK VÉGEZÉSE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n' FROM history_uint_old;
       ADATOK BETÖLTÉSE INFILE '/var/lib/mysql-files/history_uint.csv' FIGYELMEZTETÉS A TÁBLÁZATBA history_uint MEZŐK VÉGE ',' ESCAPED BY '"" SOROK VÉGE '\n';
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' MEZŐK VÉGEZÉSE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n' FROM history_str_old;
       ADATOK BETÖLTÉSE '/var/lib/mysql-files/history_str.csv' IRÁNYULJ A TÁBLÁZATBA history_str MEZŐK VÉGE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n';
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' MEZŐK VÉGEZÉSE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n' FROM history_log_old;
       ADATOK BETÖLTÉSE '/var/lib/mysql-files/history_log.csv' IRÁNYULJ A TÁBLÁZATBA history_log MEZŐK VÉGE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n';
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' MEZŐK VÉGEZÉSE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n' FROM history_text_old;
       ADATOK BETÖLTÉSE '/var/lib/mysql-files/history_text.csv' IRÁNYULJ A TÁBLÁZATBA history_text MEZŐK VÉGE ',' ESCAPED BY '"" SOROK VÉGEZÉSE '\n';

Kövesse az [áttelepítés utáni utasításokat] (#af-migration) a régi táblázatok elvetéséhez.

PostgreSQL

Az exportálást és importálást a tmux/screen-ben kell végrehajtani, hogy a munkamenet ne vesszen el. A TimescaleDB telepítése esetén hagyja ki ezt a részt, és folytassa a PostgreSQL + TimescaleDB (#postgresql-timescaledb-v2xv1x) ponttal.

Lásd még: Fontos megjegyzések

Táblázat frissítése

  • A táblák átnevezése a history_pk_prepare.sql használatával:
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql

Migráció leállított szerverrel

  • Exportálja az aktuális előzményeket, importálja a temp táblázatba, majd szúrja be az adatokat új táblákba, figyelmen kívül hagyva a duplikációkat:
INSERT INTO előzmények SELECT * FROM történelem_régi ON CONFLICT (elemid,óra,ns) NE TEGYEN NEMIT;
       
       INSERT INTO history_uint SELECT * FROM history_uint_old ON CONFLICT (elemid,óra,ns) NE TEGYEN MIT;
       
       INSERT INTO history_str SELECT * FROM history_str_old ON CONFLICT (elemid,óra,ns) NE TEGYEN SEMMIT;
       
       INSERT INTO history_log SELECT * FROM history_log_old ON CONFLICT (itemid,clock,ns) NE TEGYEN MIT;
       
       INSERT INTO történelem_szöveg SELECT * FROM történelem_szöveg_régi ON CONFLICT (elemid,óra,ns) NE TEGYEN MIT;

Tekintse meg az INSERT teljesítményének javítására vonatkozó tippeket: PostgreSQL: tömeges betöltése hatalmas mennyiségű adat, Checkpoint Distance és a WAL összege.

  • Kövesse az [áttelepítés utáni utasításokat] (#af-migration) a régi táblázatok elvetéséhez.

Migráció futó szerverrel

  • Exportálja az aktuális előzményeket, importálja a temp táblázatba, majd szúrja be az adatokat új táblákba, figyelmen kívül hagyva a duplikációkat:
\copy history_old ide: '/tmp/history.csv' DELIMITER ',' CSV
       TEMP TABLE LÉTREHOZÁSA temp_history (
           itemid bigint NOT NULL,
           óra egész szám DEFAULT '0' NOT NULL,
           érték DOUBLE PRECISION DEFAULT '0,0000' NOT NULL,
           ns integer ALAPÉRTELMEZETT '0' NOT NULL
       );
       \copy temp_history FROM '/tmp/history.csv' DELIMITER ',' CSV
       INSERT INTO előzmények SELECT * FROM temp_history ON CONFLICT (elemid,óra,ns) NE TEGYEN MIT;
       
       \copy history_uint_old ide: '/tmp/history_uint.csv' DELIMITER ',' CSV
       TEMP TABLE LÉTREHOZÁSA temp_history_uint (
           itemid bigint NOT NULL,
           óra egész szám DEFAULT '0' NOT NULL,
           érték numeric(20) DEFAULT '0' NOT NULL,
           ns integer ALAPÉRTELMEZETT '0' NOT NULL
       );
       \copy temp_history_uint FROM '/tmp/history_uint.csv' DELIMITER ',' CSV
       INSERT INTO history_uint SELECT * FROM temp_history_uint ON CONFLICT (itemid,clock,ns) NE TEGYEN MIT;
       
       \copy history_str_old ide: '/tmp/history_str.csv' DELIMITER ',' CSV
       TEMP TABLE LÉTREHOZÁSA temp_history_str (
           itemid bigint NOT NULL,
           óra egész szám DEFAULT '0' NOT NULL,
           érték varchar(255) DEFAULT '' NOT NULL,
           ns integer ALAPÉRTELMEZETT '0' NOT NULL
       );
       \copy temp_history_str FROM '/tmp/history_str.csv' DELIMITER ',' CSV
       INSERT INTO history_str (elemid,óra,érték,ns) SELECT * FROM temp_history_str ON CONFLICT (elemid,óra,ns) NE TEGYEN SEMMIT;
       
       \copy history_log_old ide: '/tmp/history_log.csv' DELIMITER ',' CSV
       TEMP TABLE LÉTREHOZÁSA temp_history_log (
           itemid bigint NOT NULL,
           óra egész szám DEFAULT '0' NOT NULL,
           időbélyegző egész szám DEFAULT '0' NOT NULL,
           forrás varchar(64) DEFAULT '' NOT NULL,
           súlyossági egész szám DEFAULT '0' NOT NULL,
           érték szövege DEFAULT '' NOT NULL,
           logeventid integer DEFAULT '0' NOT NULL,
           ns integer ALAPÉRTELMEZETT '0' NOT NULL
       );
       \copy temp_history_log FROM FROM '/tmp/history_log.csv' DELIMITER ',' CSV
       INSERT INTO history_log SELECT * FROM temp_history_log ON CONFLICT (itemid,clock,ns) NE TEGYEN MIT;
       
       \copy history_text_old ide: '/tmp/history_text.csv' DELIMITER ',' CSV
       TEMP TABLE LÉTREHOZÁSA temp_history_text (
           itemid bigint NOT NULL,
           óra egész szám DEFAULT '0' NOT NULL,
           érték szövege DEFAULT '' NOT NULL,
           ns integer ALAPÉRTELMEZETT '0' NOT NULL
       );
       \copy temp_history_text FROM '/tmp/history_text.csv' DELIMITER ',' CSV
       INSERT INTO történelem_szöveg SELECT * FROM temp_history_text ON CONFLICT (elemid,óra,ns) NE TEGYEN MIT;
  • Kövesse az [áttelepítés utáni utasításokat] (#af-migration) a régi táblázatok elvetéséhez.

PostgreSQL + TimescaleDB

Export and import must be performed in tmux/screen to ensure that the session isn't dropped. Zabbix server should be down during the upgrade.

See also: Important notes

  • Rename tables using history_pk_prepare.sql.
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql
  • Run TimescaleDB hypertable migration scripts (compatible with both TSDB v2.x and v1.x version) based on compression settings:
    • If compression is enabled (on default installation), run scripts from database/postgresql/tsdb_history_pk_upgrade_with_compression:

      cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_uint.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_log.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_str.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_with_compression/history_pk_text.sql | sudo -u zabbix psql zabbix
    • If compression is disabled, run scripts from database/postgresql/tsdb_history_pk_upgrade_no_compression:

      cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_uint.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_log.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_str.sql | sudo -u zabbix psql zabbix
             cat /usr/share/zabbix-sql-scripts/postgresql/tsdb_history_pk_upgrade_no_compression/history_pk_text.sql | sudo -u zabbix psql zabbix

See also: Tips for improving INSERT performance.

Oracle

Az exportálást és importálást a tmux/screen-ben kell végrehajtani, hogy a munkamenet ne vesszen el. A Zabbix szervernek le kell állnia a frissítés alatt.

Lásd még: Fontos megjegyzések

Táblázat frissítése

  • Telepítse az Oracle Data Pump-ot (az [Instant Client Tools csomagban] (https://www.oracle.com/database/technologies/instant-client/linux-x86-64-downloads.html) érhető el).

A teljesítményre vonatkozó tippekért tekintse meg az Oracle Data Pump [dokumentációját] (https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-performance-tips.html).

  • Nevezze át a táblákat a history_pk_prepare.sql használatával.
cd /usr/share/zabbix/zabbix-sql-scripts/database/oracle
       sqlplus zabbix/password@oracle_host/service
       sqlplus> @history_pk_prepare.sql

Batch migration of history tables

  • Prepare directories for Data Pump.

Data Pump must have read and write permissions to these directories.

Example:

mkdir -pv /export/history
       chown -R oracle:oracle /export
  • Create a directory object and grant read and write permissions to this object to the user used for Zabbix authentication ('zabbix' in the example below). Under sysdba role, run:
create directory history as '/export/history';
       grant read,write on directory history to zabbix;
  • Export tables. Replace N with the desired thread count.
expdp zabbix/password@oracle_host/service \
           DIRECTORY=history \
           TABLES=history_old,history_uint_old,history_str_old,history_log_old,history_text_old \
           PARALLEL=N
  • Import tables. Replace N with the desired thread count.
impdp zabbix/password@oracle_host/service \
           DIRECTORY=history \
           TABLES=history_uint_old \
        REMAP_TABLE=history_old:history,history_uint_old:history_uint,history_str_old:history_str,history_log_old:history_log,history_text_old:history_text \
           data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND  PARALLEL=N CONTENT=data_only

Individual migration of history tables

  • Prepare directories for Data Pump for each history table. Data Pump must have read and write permissions to these directories.

Example:

mkdir -pv /export/history /export/history_uint /export/history_str /export/history_log /export/history_text
       chown -R oracle:oracle /export
  • Create a directory object and grant read and write permissions to this object to the user used for Zabbix authentication ('zabbix' in the example below). Under sysdba role, run:
create directory history as '/export/history';
       grant read,write on directory history to zabbix;
       
       create directory history_uint as '/export/history_uint';
       grant read,write on directory history_uint to zabbix;
       
       create directory history_str as '/export/history_str';
       grant read,write on directory history_str to zabbix;
       
       create directory history_log as '/export/history_log';
       grant read,write on directory history_log to zabbix;
       
       create directory history_text as '/export/history_text';
       grant read,write on directory history_text to zabbix;
  • Export and import each table. Replace N with the desired thread count.
expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history TABLES=history_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history TABLES=history_old REMAP_TABLE=history_old:history data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only
       
       expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_uint TABLES=history_uint_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_uint TABLES=history_uint_old REMAP_TABLE=history_uint_old:history_uint data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only
       
       expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_str TABLES=history_str_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_str TABLES=history_str_old REMAP_TABLE=history_str_old:history_str data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only
       
       expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_log TABLES=history_log_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_log TABLES=history_log_old REMAP_TABLE=history_log_old:history_log data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only
       
       expdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_text TABLES=history_text_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=history_text TABLES=history_text_old REMAP_TABLE=history_text_old:history_text data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=APPEND PARALLEL=N CONTENT=data_only

Migráció után

Az összes adatbázis esetében, miután az áttelepítés befejeződött, tegye a következőket:

  • Ellenőrizze, hogy minden a várt módon működik-e.

  • Dobd le a régi asztalokat:

DROP TABLE történelem_régi;
       DROP TABLE history_uint_old;
       DROP TABLE history_str_old;
       DROP TABLE történelem_napló_régi;
       DROP TABLE történelem_szöveg_régi;