怎么在测试环境做数据文件备份和恢复

【产品名称】ob 

【产品版本】3.1.2ce

【问题描述】怎么做数据备份。


场景是我做了2000仓的tpcc数据,要找最好的压力并发数,就要多次重试。


但是每次测试并发数,不能每次造数2000仓数据。


能不能通过造数,合并转储。然后停机,做数据文件或者clog备份。然后启动做测试,一个并发数测试结束,停集群,删除数据文件或clog,然后恢复之前备份的,重启集群。


这样就还是2000仓起始,并且是合并后的。

备份恢复相关问题可以参考:https://open.oceanbase.com/docs/community/oceanbase-database/V3.1.1/backup-by-using-the-command-line


现在2000仓,sstable中有1.4T文件,redo里的clog/ilog/slog一共340G.

没有NFS,只是简单测试环境的恢复,需要这么复杂吗?

我是否可以先做合并,然后停止集群,然后对clog/ilog/slog文件夹做cp。然后启动集群。做一个并发的测试,然后停止集群。将原clog/ilog/slog文件夹删除,cp 的clog/ilog/slog文件夹还原。重启集群。

以这样的方式做快速备份和恢复?

现在的备份恢复不是为了容灾,只是简单测试。毕竟2000仓数据量很大的

这个问题,该如何解决呢?1.4T的数据,obdumper/obloader这种逻辑导出导入太慢了。

使用OCP进行备份还原,同事测试的30G数据备份需要1分钟,还原需要6分钟。我这1.4T数据,备份还原也需要几个小时呢啊。

先做合并,然后停止集群,然后对clog/ilog/slog文件夹做cp。然后启动集群。做一个并发的测试,然后停止集群。将原clog/ilog/slog文件夹删除,cp 的clog/ilog/slog文件夹还原。重启集群。

这个方案为什么不行啊。理论上合并后,内存中数据都写到磁盘上了,我停机以后,做了备份。在启动以后写入的数据在内存中,未作合并,停机以后,恢复原来的备份,磁盘sstable并未写入数据,只是clog还原了。启动初始化的时候,将clog中不一致的日志搞定,就可以了吧。

按道理是可以实现的啊

我用autodeploy部署,参考了tpcc测试性能调优,里边将自动合并的内存调整80,应该是自动合并了,所以导致我这备份恢复不一致引起的吗?

没有找到如何关闭自动转储和合并。

有具体命令吗?设置阈值是0就不自动转储和合并了吗?

我理解一下你的诉求:

你想是通过备份clog等的方式,把每一次并发测试刷入的数据,屏蔽掉,以保持磁盘数据固定?


OB没有停止转储的命令,转储的目的就是为了释放内存,否则内存会一直增长导致系统崩溃

另外你这种方式去备份集群状态,我理解是不可行的,即便clog/slog/ilog是某一时刻的状态,但是内存中的数据随着并发操作也会不断刷新,数据上是对不上的

是你说的这个诉求

我测试前作了合并转储,内存数据都刷到了磁盘里。然后备份了clog/ilog/slog。再次测试结束。不做转储合并,直接停止集群,内存数据不合并转储到磁盘,恢复备份的clog/ilog/slog。启动读取clog/ilog/slog。读取到内存,按道理是没有数据的。磁盘还是备份前的,这样上次测试的内存数据就不再了啊。备份的量很少,并且可以快速备份几个T数据。

ob不支持通过直接拷贝数据文件复制出一个集群出来;可以使用备份恢复或者oms做数据迁移的方式;

测试临时需要,还有1.4T每台observer,备份恢复都需要好几个小时