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 条评论
登录 后参与评论

相关文章

将集合从同一MongoDB实例中的一个数据库移动到另一个数据库

将Azure数据库从一个帐户移动到Azure中的另一个帐户

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

PHP,用于将 db2 数据从一个数据库移动到另一个数据库的脚本

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

如何将表从一个数据库移动到另一个数据库

将大型SQL Server表从一个数据库移动到另一个数据库的最佳方法?

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

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

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

将数据从一个数据库(和服务器)复制到另一个数据库(和服务器)时出现问题(违反主键约束)

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

将表从数据库移动到另一个-仅插入缺少的行

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

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

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

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

将数据从数据库移动到另一个数据库时出错

将存储库从一个隔离的网络移动到另一个

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

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

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

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

将数据从一个分区移动到另一个分区

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

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

将表 postgresql 的一部分移动到另一个数据库

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

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