InfluxDB:仅将多个数据库中的一个从一个服务器实例移动到另一个

丹尼尔·F

我有一个包含多个数据库,就像一个InfluxDB服务器实例sensorsnetworktelegraf等等。

这些数据库一起消耗了几十 GB,我只想将sensors数据库卸载到另一台更强大的机器上。

最简单的情况是我在另一台机器上创建一个新的 InfluxDB 服务器实例,然后将influxdb/data/sensors文件夹移动(rsync)到另一台机器上,然后从原来的机器上删除它。

虽然我还没有测试过,但我认为这不会那么容易;有一个data/_internal目录,然后是meta/meta.db文件和wal/*目录,这可能需要所有内容都保持“原样”,以便服务器实例启动时不会出错。

因为我说的是每个数据库有几十 GB,所以理想情况下,我只想挂载一个新的 ssd,复制文件/目录,然后将该新 ssd 挂载到另一台机器上,并将其直接用作新的数据源无需进一步复制。

我基本上希望我可以像将 rrd-tool 的rrd文件从一台机器移动到另一台机器一样简单地做到这一点

这可能吗?如果没有,我有什么选择?

丹尼尔·F

正如 Yuri Lachin 指出的那样,我使用influxd backup/ influxd restore

虽然它的缺点是首先需要将数据保存在磁盘上,然后从那里读入,但它似乎是最灵活的方法。

Rsyncing 50GB 确实需要一定的数量,并且在此期间数据库需要离线,这不是backup / restore; 所以没有数据丢失。它还允许将曾经位于单个 InfluxDB 实例上的数据迁移到不同的 InfluxDB 服务器,而无需考虑元数据数据库的问题。

backup / restore可以步骤,其中第一步IST最初备份所有数据库的数据,将其还原到新的服务器实例,然后再出口的最新数据,其并没有使它成为第一个备份完成,恢复它再次进入新的数据库。

步骤1:

在包含新的空 InfluxDB 服务器实例的机器上,备份来自远程旧 InfluxDB 实例的数据:

influxd backup \
   -portable \
   -host 192.168.11.10:8088 \
   -database sensors \
   /var/lib/influxdb/export-sensors-01

然后将此数据导入新的服务器实例:

influxd restore \
   -portable \
   /var/lib/influxdb/export-sensors-01

第2步:

现在花时间调整 InfluxDB 客户端当前连接的 IP 地址或域名,并使它们指向新的 InfluxDB 服务器;如有必要,重新启动客户端。

第 3 步:

backup完成并使用新 IP 地址重新启动客户端期间,新数据仍写入旧数据库,因此我们需要同步该数据。

同样,在新服务器上,从旧服务器中提取备份,但指定丢失数据的时间范围和不同的目标目录:

influxd backup \
   -portable \
   -host 192.168.11.10:8088 \
   -database sensors \
   -start 2019-06-22T19:30:00Z \
   -end 2019-06-24T00:00:00Z \
   /var/lib/influxdb/export-sensors-02

显然,指定也很重要-end,我所做的一项没有-end参数的测试开始再次备份整个数据库。我只是按 ctrl-d 退出它并删除/var/lib/influxdb/export-sensors-02并使用-end参数集再次启动它

-start参数可以包含已经恢复的几分钟数据,因为在恢复第二个备份期间,这些重复的条目将被忽略或覆盖已经存在的相同值。

例如,如果您在下午 4 点开始主备份并在下午 6 点完成,则第二个备份可以包含一个-start下午 5:55 的-end参数和一个未来几天参数,这没问题,因为一旦您切换客户端的 IP 地址,以后不会再将数据写入旧数据库。可能这个-since论点会更好,但我在时间范围上做了一些实验,所以我把它留给了使用-start+ -end

为了插入您刚刚备份的丢失数据,您/var/lib/influxdb/export-sensors-02需要做更多的工作,因为您无法restore插入已经存在的数据库如果您尝试这样做,则不会有任何损坏,只会显示警告消息并restore中止。

所以我们需要将数据恢复到一个新的临时数据库中:

influxd restore \
   -portable \
   -database sensors \
   -newdb sensors_tmp_backup \
   /var/lib/influxdb/export-sensors-02

然后将数据复制到sensors数据库中:

influx \
   -database=sensors_tmp_backup \
   -execute 'SELECT * INTO sensors..:MEASUREMENT FROM /.*/ GROUP BY *'

并删除临时数据库:

influx \
   -database=sensors_tmp_backup \
   -execute 'DROP DATABASE sensors_tmp_backup'

如果一切正常,删除备份目录

rm -rf /var/lib/influxdb/export-sensors-01
rm -rf /var/lib/influxdb/export-sensors-02

在使用第 2 步更改地址之前,您可以多次测试第 3 步,方法是通过几次备份使新数据库赶上旧的、当前的数据库。这是熟悉步骤 3 中的过程的好方法。


如果你像我一样在 Docker 中运行 InfluxDB,你可以从主机执行所有命令。第 3 步将如下所示:

docker exec -w /var/lib/influxdb/ influxdb-1.7.6 influxd backup -portable -host 192.168.11.10:8088 -database sensors -start 2019-06-22T19:40:00Z -end 2019-06-24T00:00:00Z /var/lib/influxdb/export-sensors-02
docker exec -w /var/lib/influxdb/ influxdb-1.7.6 influxd restore -portable -database sensors -newdb sensors_tmp_back /var/lib/influxdb/export-sensors-02
docker exec -w /var/lib/influxdb/ influxdb-1.7.6 influx -database=sensors_tmp_back -execute 'SELECT * INTO sensors..:MEASUREMENT FROM /.*/ GROUP BY *'
docker exec -w /var/lib/influxdb/ influxdb-1.7.6 influx -database=sensors_tmp_back -execute 'DROP DATABASE sensors_tmp_back'
docker exec -w /var/lib/influxdb/ influxdb-1.7.6 rm -rf /var/lib/influxdb/export-sensors-01
docker exec -w /var/lib/influxdb/ influxdb-1.7.6 rm -rf /var/lib/influxdb/export-sensors-02

如果您在访问远程 InfluxDB 服务器时遇到问题,请记住,出于安全原因,RPC 端口8088通常绑定到localhost,因此您可能需要0.0.0.0先将其绑定到,可能通过将INFLUXDB_BIND_ADDRESS远程实例上的环境变量设置0.0.0.0:8088如指定在文档中,然后重新启动服务器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

使用链接服务器将许多表从一个数据库移动到另一个数据库

来自分类Dev

Mysql过程定期将数据从一个数据库移动到另一个数据库

来自分类Dev

实体框架C#-将数据从一个数据库移动到结构相似的另一个数据库

来自分类Dev

通过ODBC将数据从一个数据库移动到另一个数据库

来自分类Dev

SQL 查询:将数据从一个数据库移动到另一个数据库

来自分类Dev

SQL,将数百万条记录从一个数据库移动到另一个数据库

来自分类Dev

如何将数据从一个数据库(主serevr(sql))移动到android数据库(本地(sqlite))中的另一个数据库

来自分类Dev

在mysql和php中将数据从一个数据库移动到另一个数据库时出错

来自分类Dev

Django将对象从一个数据库移动到另一个数据库

来自分类Dev

Django将对象从一个数据库移动到另一个数据库

来自分类Dev

将redmine数据库移动到另一个实例

来自分类Dev

将数据从一个表移动到同一数据库中的另一个表

来自分类Dev

将一个数据库中的数据插入另一台服务器上的另一个数据库中-未链接的服务器

来自分类Dev

从同一服务器访问另一个数据库?

来自分类Dev

是否可以将数据库文件从一个MySQL服务器复制到另一个MySQL服务器?

来自分类Dev

将1个字段复杂地移动到另一个数据库中的一个字段所需的mysql查询

来自分类Dev

将数据从一个表复制到另一个数据库中的另一个表

来自分类Dev

如何将FTP服务器中的CSV文件从一个文件夹移动到另一个文件夹?

来自分类Dev

如何将SQL Server数据库移动到另一个数据库?

来自分类Dev

如何将数据库移动到mongodb中的另一个分片

来自分类Dev

如何将表从一个数据库复制到其他服务器的另一个数据库

来自分类Dev

将数据从一个MySQL表移动到另一个

来自分类Dev

将数据从一个mysql表移动到另一个

来自分类Dev

将数据从一个MySQL表移动到另一个

来自分类Dev

我可以将数据从一个数据库表复制到另一个已经存在的数据库表sql服务器吗?

来自分类Dev

使用 sqlalchemy 将一个对象从一个数据库保存到另一个数据库

来自分类Dev

从一个数据库表插入到另一个

来自分类Dev

从一个数据库表插入到另一个

来自分类Dev

如何仅将行从一个数据帧移动到第二个数据帧中不存在 ID 的另一个数据帧?

Related 相关文章

  1. 1

    使用链接服务器将许多表从一个数据库移动到另一个数据库

  2. 2

    Mysql过程定期将数据从一个数据库移动到另一个数据库

  3. 3

    实体框架C#-将数据从一个数据库移动到结构相似的另一个数据库

  4. 4

    通过ODBC将数据从一个数据库移动到另一个数据库

  5. 5

    SQL 查询:将数据从一个数据库移动到另一个数据库

  6. 6

    SQL,将数百万条记录从一个数据库移动到另一个数据库

  7. 7

    如何将数据从一个数据库(主serevr(sql))移动到android数据库(本地(sqlite))中的另一个数据库

  8. 8

    在mysql和php中将数据从一个数据库移动到另一个数据库时出错

  9. 9

    Django将对象从一个数据库移动到另一个数据库

  10. 10

    Django将对象从一个数据库移动到另一个数据库

  11. 11

    将redmine数据库移动到另一个实例

  12. 12

    将数据从一个表移动到同一数据库中的另一个表

  13. 13

    将一个数据库中的数据插入另一台服务器上的另一个数据库中-未链接的服务器

  14. 14

    从同一服务器访问另一个数据库?

  15. 15

    是否可以将数据库文件从一个MySQL服务器复制到另一个MySQL服务器?

  16. 16

    将1个字段复杂地移动到另一个数据库中的一个字段所需的mysql查询

  17. 17

    将数据从一个表复制到另一个数据库中的另一个表

  18. 18

    如何将FTP服务器中的CSV文件从一个文件夹移动到另一个文件夹?

  19. 19

    如何将SQL Server数据库移动到另一个数据库?

  20. 20

    如何将数据库移动到mongodb中的另一个分片

  21. 21

    如何将表从一个数据库复制到其他服务器的另一个数据库

  22. 22

    将数据从一个MySQL表移动到另一个

  23. 23

    将数据从一个mysql表移动到另一个

  24. 24

    将数据从一个MySQL表移动到另一个

  25. 25

    我可以将数据从一个数据库表复制到另一个已经存在的数据库表sql服务器吗?

  26. 26

    使用 sqlalchemy 将一个对象从一个数据库保存到另一个数据库

  27. 27

    从一个数据库表插入到另一个

  28. 28

    从一个数据库表插入到另一个

  29. 29

    如何仅将行从一个数据帧移动到第二个数据帧中不存在 ID 的另一个数据帧?

热门标签

归档