A partir de Zabbix 6.0, las claves primarias se utilizan para todas las tablas en nuevas instalaciones.
Esta sección proporciona instrucciones para actualizar manualmente las tablas de historial en instalaciones existentes a claves primarias.
Las instrucciones están disponibles para:
La exportación y la importación se deben realizar en tmux/screen para garantizar que la sesión no se interrumpa.
Ver también: Notas importantes
Este método se puede utilizar con un servidor Zabbix en ejecución, pero se recomienda detener el servidor durante la actualización. MySQL Shell (mysqlsh) debe estar instalado y poder conectarse a la base de datos.
Inicie sesión en la consola MySQL como root (recomendado) o como cualquier usuario con privilegios de FILE.
Inicie MySQL con la variable local_infile habilitada.
Cambie el nombre de las tablas antiguas y cree tablas nuevas ejecutando history_pk_prepare.sql
.
Conéctese a través de mysqlsh. Si utiliza una conexión de socket, es posible que sea necesario especificar la ruta.
Ejecute (CSVPATH se puede cambiar según sea necesario):
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" });
Este método de actualización lleva más tiempo y debe usarse sólo si no es posible realizar una actualización con mysqlsh.
Inicie sesión en la consola MySQL como root (recomendado) o cualquier usuario con privilegios de FILE.
Inicie MySQL con la variable local_infile habilitada.
Cambie el nombre de las tablas antiguas y cree tablas nuevas ejecutando history_pk_prepare.sql
:
max_execution_time debe estar deshabilitado antes de migrar datos para evitar el tiempo de espera durante la migración.
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;
Siga las instrucciones posteriores a la migración para eliminar las tablas antiguas.
Compruebe qué rutas están habilitadas para la importación/exportación:
mysql> SELECCIONAR @@secure_file_priv;
+-----------------------+
| @@secure_file_priv |
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
Si el valor secure_file_priv es una ruta a un directorio, se realizará la exportación/importación para archivos en ese directorio. En este caso, edite las rutas a los archivos en las consultas en consecuencia o establezca el valor secure_file_priv en una cadena vacía durante el tiempo de actualización.
Si el valor secure_file_priv está vacío, exporte/importe se puede realizar desde cualquier lugar.
Si el valor de secure_file_priv es NULL, configúrelo en la ruta que contiene los datos de la tabla exportados ('/var/lib/mysql-files/' en el ejemplo anterior).
Para más información, ver Documentación de MySQL.
max_execution_time debe estar deshabilitado antes de exportar datos para evitar el tiempo de espera durante la exportación.
ESTABLECER @@max_execution_time=0;
SELECCIONE * EN OUTFILE '/var/lib/mysql-files/history.csv' CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n' FROM historial_old;
CARGAR ARCHIVO DE DATOS '/var/lib/mysql-files/history.csv' IGNORAR EN LA TABLA CAMPOS del historial TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n';
SELECCIONE * EN OUTFILE '/var/lib/mysql-files/history_uint.csv' CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n' FROM history_uint_old;
CARGAR ARCHIVO DE DATOS '/var/lib/mysql-files/history_uint.csv' IGNORAR EN LA TABLA History_uint CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n';
SELECCIONE * EN OUTFILE '/var/lib/mysql-files/history_str.csv' CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n' FROM history_str_old;
CARGAR ARCHIVO DE DATOS '/var/lib/mysql-files/history_str.csv' IGNORAR EN LA TABLA History_str CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n';
SELECCIONE * EN OUTFILE '/var/lib/mysql-files/history_log.csv' CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n' FROM history_log_old;
CARGAR ARCHIVO DE DATOS '/var/lib/mysql-files/history_log.csv' IGNORAR EN LA TABLA History_log CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n';
SELECCIONE * EN OUTFILE '/var/lib/mysql-files/history_text.csv' CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n' FROM historial_text_old;
CARGAR ARCHIVO DE DATOS '/var/lib/mysql-files/history_text.csv' IGNORAR EN LA TABLA History_text CAMPOS TERMINADOS POR ',' ESCAPADOS POR '"' LÍNEAS TERMINADAS POR '\n';
Siga las instrucciones posteriores a la migración para eliminar las tablas antiguas.
La exportación y la importación se deben realizar en tmux/screen para garantizar que la sesión no se interrumpa. Para instalaciones con TimescaleDB, omita esta sección y continúe con PostgreSQL + TimescaleDB.
Ver también: Notas importantes
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;
Vea sugerencias para mejorar el rendimiento de INSERT: PostgreSQL: carga masiva de enormes cantidades de datos, Distancia del punto de control y cantidad de WAL.
\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ón y la importación se deben realizar en tmux/screen para garantizar que la sesión no se interrumpa. El servidor Zabbix debería estar inactivo durante la actualización.
Ver también: Notas importantes
history_pk_prepare.sql
.Si la compresión está habilitada (en la instalación predeterminada), ejecute scripts desde /usr/share/zabbix-sql-scripts/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
/usr/share/zabbix-sql-scripts/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
Consulte también: Consejos para mejorar el rendimiento de INSERT.
Para todas las bases de datos, una vez completada la migración, haga lo siguiente:
Verificar que todo funcione como se esperaba.
Elimine tablas viejas:
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;