Овај одељак пружа упутства за ручно надоградњу табела у постојећим инсталацијама на примарне кључеве.
Надоградња на примарне кључеве оптимизује начин индексирања и приступа подацима, што може убрзати упите и уштедети простор. Такође побољшава управљање подацима и синхронизацију у кластерованим подешавањима, помажући у скалирању и осигуравајући да систем остане поуздан чак и ако неки сервери откажу.
Упутства дата на овој страници су намењена напредним корисницима и можда ће бити потребно прилагодити их вашој специфичној конфигурацији. Надоградња на примарне кључеве може бити дуготрајна и захтевати много ресурса.Уверите се да је доступно довољно слободног простора на диску; у зависности од величине ваше базе података и сачуваних података, процес може захтевати до 2,5 пута више простора него што тренутно користе табеле историје.
Примарни кључеви се користе за све табеле у новим инсталацијама од Zabbix-а 6.0.
Не постоји аутоматска надоградња базе података на примарне кључеве; Међутим, постојеће инсталације могу се ручно надоградити након надоградње Zabbix сервера на 6.0 или новију верзију.
Од Zabbix-а 7.0, надоградња табела на примарне кључеве такође надограђује табеле да користе типове података двоструке прецизности.
Ако имате Zabbix 7.0 (или новију верзију), табеле већ користе двоструку прецизност.Међутим, упутства на овој страници се и даље могу пратити да бисте надоградили табеле на примарне кључеве без утицаја на табеле које већ користе двоструку прецизност.
Ако имате Zabbix 6.4 (или старију верзију), прво размислите о надоградњи табела на двоструку прецизност.За више информација погледајте Надоградња на нумеричке вредности проширеног опсега у Zabbix 7.0 документацији.
Упутства су доступна за:
Да бисте извршили надоградњу базе података:
Заустављање Zabbix сервера за време надоградње се топло препоручује. Међутим, ако је апсолутно неопходно, можете извршити надоградњу док сервер ради (само за MySQL, MariaDB и PostgreSQL без TimescaleDB).
dnf install zabbix-sql-scripts
).Покрените скрипте само за базу података сервера. Прокси неће имати користи од ове надоградње.
Ако база података користи партиције, контактирајте администратора базе података или Zabbix подршку за помоћ.
CSV датотеке се могу уклонити након успешне надоградње на примарне кључеве.
Опционо, Zabbix кориснички интерфејс се може пребацити на режим одржавања.
Извоз и увоз морају да се изврше у tmux/screen како би се осигурало да сесија не буде прекинута.
Такође погледајте: Важне напомене
Ова метода се може користити са покренутим Zabbix сервером, али се препоручује да се сервер заустави током надоградње. MySQL Shell (mysqlsh) мора бити инсталиран и мора бити у могућности да се повеже са базом података.
Пријавите се на MySQL конзолу као root (препоручено) или као било који корисник са FILE привилегијама.
Покрените MySQL са омогућеном променљивом local_infile.
Преименујте старе табеле и креирајте нове табеле покретањем history_upgrade_prepare.sql
.
mysql -uzabbix -p<password> zabbix < /usr/share/zabbix/sql-scripts/mysql/option-patches/history_upgrade_prepare.sql
Повежите се преко mysqlsh. Ако користите сокет конекцију, може бити потребно навести путању.
Пребаците се у JavaScript режим користећи:
\js
Затим покрените код испод (CSVPATH се може променити по потреби):
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", „табела“: „историја_уинт“ });
util.exportTable(„историја_стр_стара“, CSVPATH + „/историја_стр.цсв“, { дијалект: „цсв“ });
util.importTable(CSVPATH + „/историја_стр.цсв“, {„дијалект“: „цсв“, „табела“: „историја_стр“ });
util.exportTable(„историја_лог_стара“, CSVPATH + „/историја_лог.цсв“, { дијалект: „цсв“ });
util.importTable(CSVPATH + „/историја_лог.цсв“, {„дијалект“: „цсв“, „табела“: „историја_лог“ });
util.exportTable(„историја_текст_стара“, CSVPATH + „/историја_текст.цсв“, { дијалект: „цсв“ });
util.importTable(CSVPATH + „/историја_текст.цсв“, { „дијалект“: „цсв“, „табела“: „историја_текст“ });
Ако ви Ако добијете поруку "JavaScript није подржан", вашој MySQL Shell инсталацији недостаје JS подршка. У том случају, инсталирајте званични MySQL Shell пакет од Oracle-а (или га направите из изворног кода) тако да је JavaScript режим омогућен.
Овај метод надоградње захтева више времена и требало би га користити само ако надоградња са mysqlsh није могућа.
Пријавите се на MySQL конзолу као root (препоручено) или било који корисник са FILE привилегијама.
Покрените MySQL са омогућеном променљивом local_infile.
Преименујте старе табеле и креирајте нове табеле покретањем history_upgrade_prepare.sql
:
mysql -uzabbix -p<password> zabbix < /usr/share/zabbix/sql-scripts/mysql/option-patches/history_upgrade_prepare.sql
max_execution_time мора бити онемогућена пре миграције података како би се избегло време чекања током миграције.
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;
Пратите упутства након миграције да бисте избацили старе табеле.
Проверите за које путање је омогућен увоз/извоз:
mysql> SELECT @@secure_file_priv;
+------------------------+
| @@secure_file_priv|
+-----------------------+
| /var/lib/mysql-files/ |
+-----------------------+
Ако је вредност secure_file_priv путања до директоријума, извоз/увоз ће се извршити за датотеке у том директоријуму. У овом случају, измените путање до датотека у упитима у складу са тим или поставите вредност secure_file_priv на празан стринг за време надоградње.
Ако је вредност secure_file_priv празна, извоз/увоз се може извршити са било које локације.
Ако је вредност secure_file_priv NULL, подесите је на путању која садржи извезене податке табеле („/var/lib/mysql-files/“ у горњем примеру).
За више информација, погледајте MySQL документацију.
Опција max_execution_time мора бити онемогућена пре извоза података како би се избегло истека времена током извоза.
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' ИГНОРИШИ У ТАБЕЛУ 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';
Пратите упутства након миграције да бисте уклонили старе табеле.
Извоз и увоз морају се извршити у tmux/screen како би се осигурало да се сесија не прекине. За инсталације са TimescaleDB, прескочите овај одељак и пређите на PostgreSQL + TimescaleDB.
Погледајте такође: Важне напомене
history_upgrade_prepare.sql
:sudo -u zabbix psql zabbix < /usr/share/zabbix/sql-scripts/postgresql/option-patches/history_upgrade_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;
Погледајте савете за побољшање перформанси INSERT-а: PostgreSQL: Масовно учитавање огромних количина података, Удаљеност контролних тачака и количина 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,
valu 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;
Извоз и увоз морају се извршити у tmux/screen како би се осигурало да се сесија не прекине. Zabbix сервер треба да буде у квару током надоградње.
Погледајте такође: Важне напомене
Преименујте табеле користећи history_upgrade_prepare.sql
.* Ако је компресија омогућена (при подразумеваној инсталацији), покрените скрипту из /usr/share/zabbix/sql-scripts/postgresql/timescaledb/option-patches/with-compression
: bash cat /usr/share/zabbix/sql-scripts/postgresql/timescaledb/option-patches/with-compression/history_upgrade_prepare.sql | sudo -u zabbix psql zabbix
/usr/share/zabbix/sql-scripts/postgresql/timescaledb/option-patches/without-compression
:Покрените скрипте за миграцију хипертабеле TimescaleDB на основу подешавања компресије:
/usr/share/zabbix/sql-scripts/postgresql/timescaledb/option-patches/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
/usr/share/zabbix/sql-scripts/postgresql/timescaledb/option-patches/without-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
Погледајте такође: Савети за побољшање перформанси INSERT-а.
За све базе података, када се миграција заврши, урадите следеће:
Проверите да ли све ради како се очекује.
Обришите старе табеле:
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;