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

3 שדרוג מסד נתונים למפתחות עיקריים

סקירה כללית

מאז Zabbix 6.0, המפתחות הראשיים משמשים עבור כל הטבלאות ב התקנות חדשות.

סעיף זה מספק הוראות לשדרוג ידני של טבלאות היסטוריה בהתקנות קיימות למפתחות ראשיים.

הוראות זמינות עבור:

::: שימו לב חשוב ההוראות המופיעות בדף זה מיועדות למשתמשים מתקדמים. שים לב שייתכן שיהיה צורך להתאים הוראות אלה לתצורה הספציפית שלך. :::

הערות חשובות

  • הקפד לגבות את מסד הנתונים לפני השדרוג.
  • אם מסד הנתונים משתמש במחיצות, פנה למנהל DB או לצוות התמיכה של Zabbix לקבלת עזרה.
  • מומלץ מאוד לעצור את שרת Zabbix בזמן השדרוג. עם זאת, אם יש צורך בהחלט, יש דרך לבצע שדרוג בזמן שהשרת פועל (רק עבור MySQL, MariaDB ו-PostgreSQL ללא TimescaleDB).
  • ניתן להסיר קבצי CSV לאחר שדרוג מוצלח למפתחות ראשיים.
  • באופן אופציונלי, ניתן להעביר את החזית של Zabbix למצב תחזוקה.
  • יש לבצע שדרוג למפתחות ראשיים לאחר שדרוג שרת Zabbix ל-6.0.
  • ב-proxy, ניתן לשדרג טבלאות היסטוריה שאינן בשימוש על ידי הפעלת history_pk_prepare.sql.

MySQL

ייצוא וייבוא חייבים להתבצע ב-tmux/מסך כדי להבטיח שההפעלה לא תישמט.

ראה גם: הערות חשובות

MySQL 8.0+ עם mysqlsh

ניתן להשתמש בשיטה זו עם שרת Zabbix פועל, אך מומלץ לעצור את השרת לזמן השדרוג. מעטפת MySQL (mysqlsh) חייבת להיות מותקנת ויכולה להתחבר ל-DB.

  • היכנס למסוף MySQL בתור root (מומלץ) או בתור כל משתמש עם הרשאות FILE.

  • התחל את MySQL כאשר המשתנה local_infile מופעל.

  • שנה את שמות הטבלאות הישנות וצור טבלאות חדשות על ידי הפעלת history_pk_prepare.sql.

mysql -uzabbix -p<password> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_prepare.sql
  • ייצוא ויבוא נתונים.

התחבר דרך mysqlsh. אם אתה משתמש בחיבור שקע, ייתכן שיהיה צורך לציין את הנתיב.

 sudo mysqlsh -uroot -S /run/mysqld/mysqld.sock --ללא סיסמה -Dzabbix

הפעל (ניתן לשנות את 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", "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" });

MariaDB/MySQL 8.0+ ללא mysqlsh

שיטת השדרוג הזו לוקחת יותר זמן ויש להשתמש בה רק אם שדרוג עם mysqlsh אינו אפשרי.

שדרוג טבלה
  • היכנס למסוף MySQL בתור root (מומלץ) או כל משתמש עם הרשאות FILE.

  • התחל את MySQL כאשר המשתנה local_infile מופעל.

  • שנה את שמות הטבלאות הישנות וצור טבלאות חדשות על ידי הפעלת history_pk_prepare.sql:

mysql -uzabbix -p<password> zabbix < /usr/share/zabbix-sql-scripts/mysql/history_pk_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' שדות שהסתיימו על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n' FROM history_old;
       טען קובץ נתונים '/var/lib/mysql-files/history.csv' התעלם מהיסטוריית טבלה שדות המסתיימים על ידי ',' נמלט על ידי '"' שורות המסתיימות על ידי '\n';
       
       בחר * INTO OUTFILE '/var/lib/mysql-files/history_uint.csv' שדות שהסתיימו על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n' FROM history_uint_old;
       טען קובץ נתונים '/var/lib/mysql-files/history_uint.csv' התעלם לתוך TABLE history_uint שדות המסתיימים על ידי ',' נמלטים על ידי '"' שורות המסתיימות על ידי '\n';
       
       SELECT * INTO OUTFILE '/var/lib/mysql-files/history_str.csv' שדות שהסתיימו על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n' FROM history_str_old;
       טען קובץ נתונים '/var/lib/mysql-files/history_str.csv' התעלם לתוך TABLE history_str שדות המסתיימים על ידי ',' escaped BY '"' שורות המסתיימות על ידי '\n';
       
       בחר * INTO OUTFILE '/var/lib/mysql-files/history_log.csv' שדות שהסתיימו על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n' FROM history_log_old;
       טען קובץ נתונים '/var/lib/mysql-files/history_log.csv' התעלם לתוך TABLE history_log שדות המסתיימים על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n';
       
       בחר * INTO OUTFILE '/var/lib/mysql-files/history_text.csv' שדות שהסתיימו על ידי ',' ESCAPED BY '"' שורות שהסתיימו על ידי '\n' FROM history_text_old;
       טען קובץ נתונים '/var/lib/mysql-files/history_text.csv' התעלם אל TABLE history_text שדות המסתיימים על ידי ',' ESCAPED BY '"' שורות המסתיימות על ידי '\n';

עקוב אחר הנחיות לאחר ההגירה כדי לבטל את הטבלאות הישנות.

PostgreSQL

ייצוא וייבוא חייבים להתבצע ב-tmux/מסך כדי להבטיח שההפעלה לא תישמט. עבור התקנות עם TimescaleDB, דלג על סעיף זה והמשך אל PostgreSQL + TimescaleDB.

ראה גם: הערות חשובות

שדרוג טבלה

  • שנה שם טבלאות באמצעות history_pk_prepare.sql:
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql

הגירה עם שרת נעצר

  • ייצא היסטוריה נוכחית, ייבא אותה לטבלת הזמנים, לאחר מכן הכנס את הנתונים לטבלאות חדשות תוך התעלמות מכפילויות:
INSERT INTO history SELECT * FROM history_old ON CONFLICT (itemid,clock,ns) אל תעשה כלום;
       
       INSERT INTO history_uint SELECT * FROM history_uint_old ON CONFLICT (itemid,clock,ns) אל תעשה כלום;
       
       INSERT INTO history_str SELECT * FROM history_str_old ON CONFLICT (itemid,clock,ns) אל תעשה כלום;
       
       INSERT INTO history_log SELECT * FROM history_log_old ON CONFLICT (itemid,clock,ns) אל תעשה כלום;
       
       INSERT INTO history_text SELECT * FROM history_text_old ON CONFLICT (itemid,clock,ns) אל תעשה כלום;

ראה טיפים לשיפור ביצועי INSERT: PostgreSQL: טעינת כמויות נתונים בכמות גדולה, מרחק המחסום וכמות WAL.

הגירה עם שרת פועל

  • ייצא היסטוריה נוכחית, ייבא אותה לטבלת הזמנים, לאחר מכן הכנס את הנתונים לטבלאות חדשות תוך התעלמות מכפילויות:
\copy history_old TO '/tmp/history.csv' DELIMITER ',' CSV
       CREATE TEMP TABLE temp_history (
            itemid bigint NOT NULL,
            שעון שלם ברירת מחדל '0' לא NULL,
            ערך DOUBLE PRECISION Default '0.0000' לא NULL,
            ns מספר שלם ברירת מחדל '0' לא NULL
       );
       \copy temp_history FROM '/tmp/history.csv' DELIMITER ',' CSV
       INSERT INTO history SELECT * FROM temp_history ON CONFLICT (itemid,clock,ns) אל תעשה כלום;
       
       \copy history_uint_old TO '/tmp/history_uint.csv' DELIMITER ',' CSV
       צור טבלת טמפ' temp_history_uint (
            itemid bigint NOT NULL,
            שעון שלם ברירת מחדל '0' לא NULL,
            value numeric(20) DEFAULT '0' NOT NULL,
            ns מספר שלם ברירת מחדל '0' לא 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) אל תעשה כלום;
       
       \copy history_str_old TO '/tmp/history_str.csv' DELIMITER ',' CSV
       צור טבלת טמפ' temp_history_str (
            itemid bigint NOT NULL,
            שעון שלם ברירת מחדל '0' לא NULL,
            value varchar(255) DEFAULT '' NOT NULL,
            ns מספר שלם ברירת מחדל '0' לא 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) אל תעשה כלום;
       
       \copy history_log_old TO '/tmp/history_log.csv' DELIMITER ',' CSV
       צור טבלת טמפ' temp_history_log (
            itemid bigint NOT NULL,
            שעון שלם ברירת מחדל '0' לא NULL,
            חותמת זמן מספר שלם ברירת מחדל '0' לא NULL,
            source varchar(64) DEFAULT '' NOT NULL,
            מספר שלם של חומרה ברירת מחדל '0' לא NULL,
            טקסט ערך DEFAULT '' NOT NULL,
            logeventid מספר שלם ברירת מחדל '0' לא NULL,
            ns מספר שלם ברירת מחדל '0' לא 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) אל תעשה כלום;
       
       \copy history_text_old TO '/tmp/history_text.csv' DELIMITER ',' CSV
       צור טבלת טמפ' טקסט_היסטוריה_temp (
            itemid bigint NOT NULL,
            שעון שלם ברירת מחדל '0' לא NULL,
            טקסט ערך DEFAULT '' NOT NULL,
            ns מספר שלם ברירת מחדל '0' לא 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) אל תעשה כלום;

PostgreSQL + TimescaleDB

ייצוא וייבוא חייבים להתבצע ב-tmux/מסך כדי להבטיח שההפעלה לא תישמט. שרת Zabbix אמור להיות מושבת במהלך השדרוג.

ראה גם: הערות חשובות

  • שנה את שמות הטבלאות באמצעות history_pk_prepare.sql.
sudo -u zabbix psql zabbix < /usr/share/zabbix-sql-scripts/postgresql/history_pk_prepare.sql

::: שימו לב חשוב הנתיב אל history_pk_prepare.sql השתנה](/manual/introduction/whatsnew609#packages) מאז Zabbix 6.0.9. עבור גרסאות ישנות יותר מ-6.0.9, יש להשתמש בפקודה הבאה:

sudo -u zabbix psql zabbix < /usr/share/doc/zabbix-sql-scripts/postgresql/history_pk_prepare.sql

:::

  • הפעל סקריפטים להעברה של Hypertable TimescaleDB (תואם הן לגרסת TSDB v2.x והן לגרסת v1.x) בהתבסס על הגדרות דחיסה:
    • אם הדחיסה מופעלת (בהתקנת ברירת מחדל), הפעל סקריפטים מתוך 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
    • אם הדחיסה מושבתת, הפעל סקריפטים מתוך 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

ראה גם: טיפים לשיפור ביצועי INSERT.

נבואה

ייצוא וייבוא חייבים להתבצע ב-tmux/מסך כדי להבטיח שההפעלה לא תישמט. שרת Zabbix אמור להיות מושבת במהלך השדרוג.

ראה גם: הערות חשובות

שדרוג טבלה

עיין ב[תיעוד] של Oracle Data Pump (https://docs.oracle.com/en/database/oracle/oracle-database/19/sutil/oracle-data-pump-performance-tips.html) לקבלת טיפים לביצועים.

  • שנה את שמות הטבלאות באמצעות 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.

ל-Data Pump חייבות להיות הרשאות קריאה וכתיבה לספריות אלו.

דוגמא:

mkdir -pv /export/history
       chown -R oracle:oracle /export
  • צור אובייקט ספרייה והענקת הרשאות קריאה וכתיבה לאובייקט זה למשתמש המשמש לאימות Zabbix ('zabbix' בדוגמה למטה). תחת תפקיד sysdba, הפעל:
צור היסטוריית ספריות בתור '/export/history';
       הענק קריאה, כתיבה על היסטוריית ספריות ל-zabbix;
  • ייצוא טבלאות. החלף את N בספירת החוטים הרצויה.
expdp zabbix/password@oracle_host/service \
            DIRECTORY=היסטוריה \
            TABLES=history_old,history_uint_old,history_str_old,history_log_old,history_text_old \
            PARALLEL=N
  • ייבוא טבלאות. החלף את N בספירת החוטים הרצויה.
impdp zabbix/password@oracle_host/service \
            DIRECTORY=היסטוריה \
            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=הוסף PARALLEL=N CONTENT=נתונים_בלבד

העברה פרטנית של טבלאות היסטוריה

  • הכן ספריות עבור משאבת נתונים עבור כל טבלת היסטוריה. ל-Data Pump חייבות להיות הרשאות קריאה וכתיבה לספריות אלו.

דוגמא:

mkdir -pv /export/history /export/history_uint /export/history_str /export/history_log /export/history_text
       chown -R oracle:oracle /export
  • צור אובייקט ספרייה והענקת הרשאות קריאה וכתיבה לאובייקט זה למשתמש המשמש לאימות Zabbix ('zabbix' בדוגמה למטה). תחת תפקיד sysdba, הפעל:
צור היסטוריית ספריות בתור '/export/history';
       הענק קריאה, כתיבה על היסטוריית ספריות ל-zabbix;
       
       צור directory history_uint בתור '/export/history_uint';
       הענק קריאה, כתוב בספרייה history_uint ל-zabbix;
       
       צור directory history_str בתור '/export/history_str';
       הענק קריאה, כתוב בספרייה history_str ל-zabbix;
       
       צור History_log של ספרייה בתור '/export/history_log';
       הענק קריאה, כתוב ב-directory history_log ל-zabbix;
       
       צור history_text של ספרייה בתור '/export/history_text';
       הענק קריאה, כתיבה בספרייה history_text ל-zabbix;
  • ייצוא ויבוא כל טבלה. החלף את N בספירת החוטים הרצויה.
expdp zabbix/password@oracle_host:1521/xe DIRECTORY=היסטוריה TABLES=history_old PARALLEL=N
       
       impdp zabbix/password@oracle_host:1521/xe DIRECTORY=היסטוריה TABLES=history_old REMAP_TABLE=history_old:history data_options=SKIP_CONSTRAINT_ERRORS table_exists_action=הוסף PARALLEL=N CONTENT=נתונים_בלבד
       
       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 CONTENTEL=N
       
       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
       
       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
       
       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

לאחר ההגירה

עבור כל מסדי הנתונים, לאחר השלמת ההעברה, בצע את הפעולות הבאות:

  • ודא שהכל עובד כמצופה.

  • זרוק שולחנות ישנים:

DROP TABLE history_old;
       DROP TABLE history_uint_old;
       DROP TABLE history_str_old;
       DROP TABLE history_log_old;
       DROP TABLE history_text_old;