我目前的数据库:
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 和添加文字 itemid 的 SELECT 子句。实际的 <new_itemid> 被插入到每个新行中。
结果:
我敢打赌有一个更好的方法,但这是我现在能想到的。