Aquesta secci¨® proporciona instruccions per actualitzar manualment les taules de les instal¡¤lacions existents a les claus prim¨¤ries.
L'actualitzaci¨® a claus prim¨¤ries optimitza la manera com s'indexen i s'accedeix a les dades, cosa que pot accelerar les consultes i estalviar espai. Tamb¨¦ millora la gesti¨® de dades i la sincronitzaci¨® en configuracions en cl¨²ster, ajudant a escalar i garantir que el sistema segueixi sent fiable encara que alguns servidors fallin.
Les instruccions proporcionades en aquesta p¨¤gina estan dissenyades per a usuaris avan?ats i ¨¦s possible que s'hagin d'ajustar a la vostra configuraci¨® espec¨ªfica. L'actualitzaci¨® a les claus prim¨¤ries pot suposar un consum de temps i de recursos. Assegureu-vos que hi ha prou espai lliure disponible al disc; depenent de la mida de la base de dades i de les dades emmagatzemades, el proc¨¦s pot menester fins a 2,5 vegades l'espai que empren actualment les taules d'historial.
Les claus prim¨¤ries s'empren per a totes les taules en instal¡¤lacions noves des de Áú»¢¶Ä²© 6.0.
No hi ha cap actualitzaci¨® autom¨¤tica de la base de dades a les claus prim¨¤ries; tanmateix, les instal¡¤lacions existents es poden actualitzar manualment »å±ð²õ±è°ù¨¦²õ d'actualitzar el servidor Áú»¢¶Ä²© a 6.0 o posterior.
Des de Áú»¢¶Ä²© 7.0, l'actualitzaci¨® manual de les taules a claus prim¨¤ries tamb¨¦ actualitza les taules per emprar tipus de dades de doble precisi¨®.
Si teniu Áú»¢¶Ä²© 7.0, les taules ja empren doble precisi¨®. Tanmateix, encara es poden seguir les instruccions d'aquesta p¨¤gina per actualitzar les taules a claus prim¨¤ries sense afectar les taules que ja empren doble precisi¨®.
Si teniu Áú»¢¶Ä²© 6.4 (o anterior), primer considereu actualitzar les taules per duplicar la precisi¨®. Per obtindre m¨¦s informaci¨®, veieu Actualitzaci¨® a valors num¨¨rics d'interval est¨¨s.
Les instruccions s¨®n disponibles per a:
Per fer l'actualitzaci¨® de la base de dades:
Es recomana aturar el servidor Áú»¢¶Ä²© durant el moment de l'actualitzaci¨®. Tanmateix, si ¨¦s absolutament necessari, podeu fer l'actualitzaci¨® mentre el servidor ¨¦s engegat (nom¨¦s per a MySQL, MariaDB i PostgreSQL sense TimescaleDB).
dnf install zabbix-sql-scripts
).Executeu els scripts nom¨¦s per a la base de dades del servidor. El proxy no es beneficiar¨¤ d'aquesta actualitzaci¨®.
Si la base de dades t¨¦ particions, poseu-vos en contacte amb l'administrador de la base de dades o amb el suport de Áú»¢¶Ä²© per obtindre ajuda.
Els fitxers CSV es poden esborrar »å±ð²õ±è°ù¨¦²õ d'una actualitzaci¨® correcta a les claus prim¨¤ries.
Opcionalment, la interf¨ªcie Áú»¢¶Ä²© es pot canviar a mode de manteniment.
La exportaci¨® i importaci¨® s'hauran de fer a tmux/screen per assegurar que la sessi¨® no es perd pas.
Veieu tamb¨¦: Notes importants
Aques m¨¨tode es pot emprar amb un servidor Áú»¢¶Ä²© en marxa, per¨° es recomana aturar el servidor mentre s'actualitza. La MySQL Shell (mysqlsh) ha d'¨¦sser i poder-se connectar amb la DB.
Entreu a la consola de MySQL com a root (recomanat) o qualsevol altre usuari amb privilegis FILE.
Inicieu MySQL amb la variable activa.
Reanomeneu les taules antigues i creeu taules noves executant history_pk_prepare.sql
.
Connecteu via mysqlsh. Si empreu una connexi¨® socket, ¨¦s necessari especificar la ruta.
Executeu (CSVPATH es pot canviar, si cal):
CSVPATH="/var/lib/mysql-files";
util.exportTable("history_old", CSVPATH + "/history.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history.csv", {"dialect": "csv", "table": "history" });
util.exportTable("history_uint_old", CSVPATH + "/history_uint.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_uint.csv", {"dialect": "csv", "table": "history_uint" });
util.exportTable("history_str_old", CSVPATH + "/history_str.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_str.csv", {"dialect": "csv", "table": "history_str" });
util.exportTable("history_log_old", CSVPATH + "/history_log.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_log.csv", {"dialect": "csv", "table": "history_log" });
util.exportTable("history_text_old", CSVPATH + "/history_text.csv", { dialect: "csv" });
util.importTable(CSVPATH + "/history_text.csv", {"dialect": "csv", "table": "history_text" });
Aquest m¨¨tode d'actualitzaci¨® pren m¨¦s temps i s'ha d'emprar nom¨¦s si l'actualitzaci¨® amb mysqlsh no fos possible.
Entreu a la consola de MySQL com a root (recomanat) o qualsevol altre usuari amb privilegis FILE.
Engegueu MySQL amb la variable activa.
Reanomeneu les taules antigues i creeu les noves executant history_pk_prepare.sql
:
S'ha de deshabilitar el max_execution_time abans de migrar la informaci¨®, per evitar que s'esgoti el temps d'espera durant la migraci¨®.
SET @@max_execution_time=0;
INSERT IGNORE INTO history SELECT * FROM history_old;
INSERT IGNORE INTO history_uint SELECT * FROM history_uint_old;
INSERT IGNORE INTO history_str SELECT * FROM history_str_old;
INSERT IGNORE INTO history_log SELECT * FROM history_log_old;
INSERT IGNORE INTO history_text SELECT * FROM history_text_old;
Seguiu les instruccions de post-migraci¨® per buidar les taules antigues.
Reviseu per quines rutes import/export ¨¦s activat:
mysql> SELECT @@secure_file_priv;
+-----------------------+
| @@secure_file_priv |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
Si el valor secure_file_priv ¨¦s una ruta cap a un directori, export/import es far¨¤ per als arxius d'aquell directori. En aquest cas, editeu les rutes als arxius en consultes segons el valor secure_file_priv cap a una cadena buida per al temps d'actualitzaci¨®.
Si el valor secure_file_priv ¨¦s buit, export/import pot fer-se des de qualsevol ubicaci¨®.
Si el valor secure_file_priv ¨¦s NULL, establiu la ruta que cont¨¦ la informaci¨® de la taula exportada ('/var/lib/mysql-files/' a l'exemple de m¨¦s amunt).
Per tindre m¨¦s informaci¨®, veieu la .
S'ha de deshabilitar el max_execution_time abans d'exportar informaci¨®, per evitar que s'esgoti el temps d'espera durant la exportaci¨®.
SET @@max_execution_time=0;
SELECT * INTO OUTFILE '/var/lib/mysql-files/history.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_old;
LOAD DATA INFILE '/var/lib/mysql-files/history.csv' IGNORE INTO TABLE history FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_uint_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_uint.csv' IGNORE INTO TABLE history_uint FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_str_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_str.csv' IGNORE INTO TABLE history_str FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_log_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_log.csv' IGNORE INTO TABLE history_log FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
SELECT * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n' FROM history_text_old;
LOAD DATA INFILE '/var/lib/mysql-files/history_text.csv' IGNORE INTO TABLE history_text FIELDS TERMINATED BY ',' ESCAPED BY '"' LINES TERMINATED BY '\n';
Seguiu les instruccions de post-migraci¨® per buidar les taules antigues.
Exportar i importar s'ha de fre des de la tmux/screen, per assegurar-nos que la sessi¨® no es perd. Per instal¡¤lacions amb TimescaleDB, salteu aquesta secci¨® i procediu amb PostgreSQL + TimescaleDB.
Veieu tamb¨¦: Notes importants
history_pk_prepare.sql
:INSERT INTO history SELECT * FROM history_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_uint SELECT * FROM history_uint_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_str SELECT * FROM history_str_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_log SELECT * FROM history_log_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
INSERT INTO history_text SELECT * FROM history_text_old ON CONFLICT (itemid,clock,ns) DO NOTHING;
Veieu els consells per millorar el rendiment d'INSERT: , .
Seguiu les instruccions de post-migraci¨® per buidar les taules antigues.
\copy history_old TO '/tmp/history.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history (
itemid bigint NOT NULL,
clock integer DEFAULT '0' NOT NULL,
value DOUBLE PRECISION DEFAULT '0.0000' NOT NULL,
ns integer DEFAULT '0' NOT NULL
);
\copy temp_history FROM '/tmp/history.csv' DELIMITER ',' CSV
INSERT INTO history SELECT * FROM temp_history ON CONFLICT (itemid,clock,ns) DO NOTHING;
\copy history_uint_old TO '/tmp/history_uint.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_uint (
itemid bigint NOT NULL,
clock integer DEFAULT '0' NOT NULL,
value numeric(20) DEFAULT '0' NOT NULL,
ns integer DEFAULT '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) DO NOTHING;
\copy history_str_old TO '/tmp/history_str.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_str (
itemid bigint NOT NULL,
clock integer DEFAULT '0' NOT NULL,
value varchar(255) DEFAULT '' NOT NULL,
ns integer DEFAULT '0' NOT NULL
);
\copy temp_history_str FROM '/tmp/history_str.csv' DELIMITER ',' CSV
INSERT INTO history_str (itemid,clock,value,ns) SELECT * FROM temp_history_str ON CONFLICT (itemid,clock,ns) DO NOTHING;
\copy history_log_old TO '/tmp/history_log.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_log (
itemid bigint NOT NULL,
clock integer DEFAULT '0' NOT NULL,
timestamp integer DEFAULT '0' NOT NULL,
source varchar(64) DEFAULT '' NOT NULL,
severity integer DEFAULT '0' NOT NULL,
value text DEFAULT '' NOT NULL,
logeventid integer DEFAULT '0' NOT NULL,
ns integer DEFAULT '0' NOT NULL
);
\copy temp_history_log FROM '/tmp/history_log.csv' DELIMITER ',' CSV
INSERT INTO history_log SELECT * FROM temp_history_log ON CONFLICT (itemid,clock,ns) DO NOTHING;
\copy history_text_old TO '/tmp/history_text.csv' DELIMITER ',' CSV
CREATE TEMP TABLE temp_history_text (
itemid bigint NOT NULL,
clock integer DEFAULT '0' NOT NULL,
value text DEFAULT '' NOT NULL,
ns integer DEFAULT '0' NOT NULL
);
\copy temp_history_text FROM '/tmp/history_text.csv' DELIMITER ',' CSV
INSERT INTO history_text SELECT * FROM temp_history_text ON CONFLICT (itemid,clock,ns) DO NOTHING;
La exportaci¨® i importaci¨® s'ha de fer amb tmux/screen per assegurar que la sessi¨® no es tanca. El servidor de Áú»¢¶Ä²© ha d'¨¦sser aturat durant l'actualitzaci¨®.
Veieu tamb¨¦: Notes importants
history_pk_prepare.sql
.
Si la compressi¨® ¨¦s activa (instal¡¤laci¨® per defecte), correu l'script des de /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression
:
Si la compressi¨® ¨¦s desactivada, correu l'script des de /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression
:
Si la compressi¨® ¨¦s activa (a les instal¡¤lacions per defecte), executeu els scripts des de database/postgresql/tsdb_history_pk_upgrade_with_compression
:
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_uint.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_log.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_str.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_text.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression/trends_upgrade.sql | sudo -u zabbix psql zabbix
Si la compressi¨® ¨¦s desactivada, executeu els scripts des de database/postgresql/tsdb_history_pk_upgrade_no_compression
:
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_uint.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_log.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_str.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/history_upgrade_text.sql | sudo -u zabbix psql zabbix
cat /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression/trends_upgrade.sql | sudo -u zabbix psql zabbix
Veieu tamb¨¦: per millorar el rendiment de l'INSERT.
Per a totes les bases de dades, una vegada hagueu enllestit la migraci¨®, procediu aix¨ª:
Verifiqueu que tot funciona com hagueu previst.
Esborreu les taules antigues:
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;