Овај одељак пружа упутства за ручну надоградњу табела у постојећим инсталацијама на примарне кључеве.
Надоградња на примарне кључеве оптимизује начин на који се подаци индексирају и приступају, што може да убрза упите и уштеди простор. Такође побољшава управљање подацима и синхронизацију у груписаним поставкама, помажући у скалирању и осигуравајући да систем остане поуздан чак и ако се неки сервери покваре.
Упутства на овој страници су дизајнирана за напредне кориснике и можда ћете требати да их прилагодите вашој конфигурацији. Надоградња на примарне кључеве може да одузме много времена и ресурса. Уверите се да је доступно довољно слободног простора на диску; у зависности од величине ваше базе података и ускладиштених података, процес може захтевати до 2.5 пута већи простор који тренутно користе табеле историје.
Примарни кључеви се користе за све табеле у новим инсталацијама од Zabbix-а 6.0.
Не постоји аутоматска надоградња базе података на примарне кључеве; међутим, постојеће инсталације се могу надоградити ручно након надоградње Zabbix сервера на 6.0 или новију верзију.
Од Zabbix-а 7.0, надоградња табела на примарне кључеве такође надограђује табеле да користе типове података двоструке прецизности.
Ако имате Zabbix 7.0, табеле већ користе двоструку прецизност. Међутим, и даље се могу пратити упутства на овој страници за надоградњу табела на примарне кључеве без утицаја на табеле које већ користе двоструку прецизност.
Ако имате Zabbix 6.4 (или старију верзију), прво размислите о надоградњи табела на двоструку прецизност. За више информација погледајте Надоградња на нумеричке вредности проширеног опсега.
Упутства су доступна за:
Да бисте извршили надоградњу базе података:
Заустављање Zabbix сервера за време надоградње се препоручује. Међутим, ако је апсолутно неопходно, можете извршити надоградњу док сервер ради (само за MySQL, MariaDB, и PostgreSQL без TimescaleDB).
Ако користите PostgreSQL/TimescaleDB, погледајте познате проблеме за враћање резервне копије PostgreSQL/TimescaleDB креиране у Zabbix-у 7.0.0-7.0.4.
Покрените скрипте само за базу података сервера. Прокси неће имати користи од ове надоградње.
Ако база података користи партиције, обратите се DB администратору или Zabbix подршци за помоћ.
CSV датотеке се могу уклонити након успешне надоградње на примарне кључеве.
Опционо, Zabbix кориснички интерфејс се може пребацити на режим одржавања.
Извоз и увоз морају да се изврше у tmux/screen како би се осигурало да сесија не буде прекинута.
Такође погледајте: Важне напомене
Овај метод се може користити са покренутим Zabbix сервером, али се препоручује да зауставите сервер за време надоградње. MySQL Shell (mysqlsh) мора да буде инсталиран и да може да се конектује на DB.
Пријавите се на 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-а. Ако користите socket конекцију, можда ће бити потребно навести путању.
Run (CSVPATH can be changed as needed):
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" });
Овај метод надоградње захтева више времена и треба га користити само ако надоградња са * 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' 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';
Пратите инструкције за пост-миграције да бисте избацили старе табеле.
Извоз и увоз морају да се изврше у 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: Bulk Loading Huge Amounts of Data, Checkpoint Distance and Amount of 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_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;
Извоз и увоз морају да се изврше у tmux/screen-у како би се осигурало да сесија не буде прекинута. Zabbix сервер би требало да не ради током надоградње.
Погледајте такође: Важне напомене
history_upgrade_prepare.sql
.
Ако је компресија омогућена, покрените скрипту из /usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/with-compression
:
Ако је компресија онемогућена, покрените скрипту из/usr/share/zabbix-sql-scripts/postgresql/timescaledb/option-patches/without-compression
:
Ако је компресија омогућена (при подразумеваној инсталацији), покрените скрипте са /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.
Подршка за Oracle DB је застарела од Zabbix-а 7.0.
Извоз и увоз морају да се изврше у tmux/screen-у како би се осигурало да сесија не буде прекинута. Zabbix сервер би требало да не ради током надоградње.
Такође погледајте: Важне напомене
Погледајте Oracle Data Pump документацију за савете о перформансама.
history_pk_prepare.sql
.cd /usr/share/zabbix/zabbix-sql-scripts/database/oracle
sqlplus zabbix/password@oracle_host/service
sqlplus> @history_pk_prepare.sql
Data Pump мора имати дозволе за читање и писање у ове директоријуме.
Пример:
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
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=APPENDPARALLEL=N CONTENT=data_only
Пример:
mkdir -pv /export/history /export/history_uint /export/history_str /export/history_log /export/history_text
chown -R oracle:oracle /export
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;
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
За све базе података, када се миграција заврши, урадите следеће:
Проверите да ли све ради како се очекује.
Обришите старе табеле:
DROP TABLE history_old;
DROP TABLE history_uint_old;
DROP TABLE history_str_old;
DROP TABLE history_log_old;
DROP TABLE history_text_old;