Mysql

Zabbix MariaDB 將項目數據複製到另一個項目

  • January 16, 2021

我目前的數據庫:

MariaDB [zabbix]> SELECT VERSION();
+----------------------+
| VERSION()            |
+----------------------+
| 10.0.28-MariaDB-2+b1 |
+----------------------+

我的 Zabbix 中有一些重複的項目。

我有具有“歷史”和“趨勢”數據的舊項目,但它已被禁用。新項目也有數據並已啟用。

我想過將舊項目的歷史和趨勢複製到新項目,但我不確定如何安全地做到這一點。

我創建了一些測試項目來檢查更新過程,但它似乎並沒有像我預期的那樣進行。

舊項目 - 30886 新項目 - 32041

所以,我希望將舊項目中的所有數據複製到新項目中。意義:

  • 舊項目保持其數據完整。
  • 新項目保留其目前數據並接收舊項目的數據。
  • 這兩個項目使用相同的表。

“歷史”表摘錄:

MariaDB [zabbix]> SELECT * FROM history WHERE itemid = 30886 LIMIT 5;
+--------+------------+--------+-----------+
| itemid | clock      | value  | ns        |
+--------+------------+--------+-----------+
|  30886 | 1609965887 | 0.3270 |  59358611 |
|  30886 | 1609966187 | 0.2747 |  14863699 |
|  30886 | 1609966486 | 0.3037 | 796425573 |
|  30886 | 1609966787 | 0.2855 |   9516260 |
|  30886 | 1609967086 | 0.2866 | 903642778 |
+--------+------------+--------+-----------+

我想過做這樣的事情:

INSERT INTO history (`clock`, `value`, `ns`) 
SELECT `clock`, `value`, `ns`
FROM history
WHERE itemid = 30886;

但這不起作用。這樣它就不會為每一行插入新的 itemid,並且表“歷史”被指定兩次,作為目標和源。

也許一個更有經驗的人會指出一些想法。有任何想法嗎?

經過一番探勘,我成功地將歷史和趨勢從一個項目複製到另一個項目。

我使用的語法是這樣的:

歷史表:

INSERT INTO history (`itemid`, `clock`, `value`, `ns`)
SELECT '<new_itemid>', `clock`, `value`, `ns`
FROM history
WHERE itemid = <old_itemid>;

趨勢表:

INSERT INTO trends (`itemid`, `clock`, `num`, `value_min`, `value_avg`, `value_max`)
SELECT '<new_itemid>', `clock`, `num`, `value_min`, `value_avg`, `value_max`
FROM trends
WHERE itemid = <old_itemid>;

秘密在於 INSERT INTO 和添加文字 itemid 的 SELECT 子句。實際的 <new_itemid> 被插入到每個新行中。

結果:

MariaDB [zabbix]&gt; INSERT INTO trends (`itemid`, `clock`, `num`, `value_min`, `value_avg`, `value_max`) SELECT '32041', `clock`, `num`, `value_min`, `value_avg`, `value_max` FROM trends WHERE itemid = 30886;
Query OK, 5227 rows affected (0.14 sec)
Records: 5227 Duplicates: 0 Warnings: 0

MariaDB [zabbix]&gt; INSERT INTO history (`itemid`, `clock`, `value`, `ns`) SELECT '32041', `clock`, `value`, `ns` FROM history WHERE itemid = 30886;
Query OK, 2008 rows affected (0.10 sec)
Records: 2008 Duplicates: 0 Warnings: 0

我敢打賭有一個更好的方法,但這是我現在能想到的。

引用自:https://dba.stackexchange.com/questions/283182