注册
异步备份方案-不必删库跑路
技术分享/ 文章详情 /

异步备份方案-不必删库跑路

Brainy 2022/03/17 2395 0 0

前言:

  避免删库跑路事件,对数据库一定要有敬畏之心,尤其在线系统。类似的问题,我们可以通过进行严格的在线系统管控来避免。但是,构建完善的数据库架构方案才是当务之急。


  本文我们将通过使用达梦数据守护集群的异步同步功能,演示如何在遇到误误操作数据后的快速恢复功能。您可能认为仅仅针对发生概率极低的误操作而构建一套系统,毕竟是要购买额外的硬件和软件来搭建系统,这个代价有些高啊!其实,这个异步数据库是可以承担一部分实时性要求不高的只读访问的,可以分担主库的一部分压力,这样算下来还是很经济实用的。

一、设计思路

  对于数据体量大的系统,比如达到了10TB以上,在需要进行数据库中部分表的还原时,如果利用数据库备份和归档还原到指定时间点,整体耗时是比较长的。达梦数据库数据守护集群支持异步备库,同步间隔时间可以通过定时器进行配置,最小的同步间隔时间为1分钟。利用异步备库的同步延时功能,比如,每天的0点进行一次数据同步,如果需要将某张数据表的数据恢复到当天的某个时刻,我们通过手动同步命令,将异步备机同步到指定的时刻。最后,通过逻辑备份还原的方式,将异步备库数据同步到主库,完成数据的恢复。
  同时,对于一些报表类业务,可以部署在异步备库,分担一部分主库的访问压力。而对于同步的延时,可以根据系统的实际需求进行调整。当然,如果我们发现需要恢复数据时,异步备机正好完成了上次的同步,异步备库的数据已经同步到恢复时间点之后了,那就无法实现数据的恢复了。所以,同步的间隔一定要根据实际使用需求合理设定。

二、集群搭建

  集群的搭建在此不做过多的介绍,大家可以参考。此处给大家列出相关的配置文件。

主库配置

  1.主库的dm.ini
  需要修改如下相关参数:

   INSTANCE_NAME   =  DM1
   MAL_INI        = 1
   ARCH_INI       = 1
   TIMER_INI       = 1  

  2. 主库的dmmal.ini

   MAL_CHECK_INTERVAL = 5  
   MAL_CONN_FAIL_INTERVAL = 5  
   [MAL_INST1]
    MAL_INST_NAME = DM1  
    MAL_HOST = 192.168.244.128  
    MAL_PORT = 61141 
    MAL_INST_HOST = 192.168.137.101  
    MAL_INST_PORT = 5236
    MAL_DW_PORT = 52141  
    MAL_INST_DW_PORT = 33141 
   [MAL_INST2]
    MAL_INST_NAME = DM2 
    MAL_HOST = 192.168.244.129
    MAL_PORT = 61142 
    MAL_INST_HOST = 192.168.137.102  
    MAL_INST_PORT = 5236 
    MAL_DW_PORT = 52142  
    MAL_INST_DW_PORT = 33142

  3.主库的dmarch.ini

   [ARCHIVE_LOCAL1]
   ARCH_TYPE = LOCAL 
   ARCH_DEST = /home/dmdba/dm/dmdbms/data/arch
   ARCH_FILE_SIZE = 128 
   ARCH_SPACE_LIMIT = 4096
   [ARCHIVE_ASYNC] 
   ARCH_TYPE = ASYNC  
   ARCH_DEST = DM2  
   ARCH_TIMER_NAME = RT_TIMER 
   ARCH_SEND_DELAY = 1

  其中,ARCHIVE_ASYNC为配置的异步归档,需要增加ARCH_SEND_DELAY延时发送归档参数,否则无法进行手动的归档追加同步。
  4.主库的dmtimer.ini

   [RT_TIMER]  
   TYPE = 2
   FREQ_MONTH_WEEK_INTERVAL = 1
   FREQ_SUB_INTERVAL = 0
   FREQ_MINUTE_INTERVAL = 0
   START_TIME = 00:00:00
   END_TIME = 00:00:00
   DURING_START_DATE = 2016-02-11 17:36:09
   DURING_END_DATE = 9999-12-31 23:59:59
   NO_END_DATE_FLAG = 1
   IS_VALID=1

  RT_TIMER为定时器名称,和dmarch.ini中的ARCH_TIMER_NAME保持一致。上述的配置是每天的0点钟触发主库发送归档日志到异步备库。
  5.主库的dmwatcher.ini

   [GRP1]
   DW_TYPE = LOCAL
   DW_MODE = MANUAL
   DW_ERROR_TIME = 10  
   INST_RECOVER_TIME = 60 
   INST_ERROR_TIME = 10  
   INST_OGUID = 453331  
   INST_INI = /home/dmdba/dm/dmdbms/data/DAMENG/dm.ini  
   INST_AUTO_RESTART = 1 
   INST_STARTUP_CMD = /home/dmdba/dm/dmdbms/bin/dmserver

  需要注意DW_TYPE为LOCAL。

异步备库配置

  1. 异步备库的dm.ini

   INSTANCE_NAME   =  DM2
   MAL_INI        = 1
   ARCH_INI       = 1

  2.异步备库dmmal.ini和主库相同
  3.异步备库的dmarch.ini

   [ARCHIVE_LOCAL1]
   ARCH_TYPE = LOCAL 
   ARCH_DEST = /home/dmdba/dm/dmdbms/data/arch
   ARCH_FILE_SIZE = 128 
   ARCH_SPACE_LIMIT = 4096

  4.异步备库dmwatcher.ini

   [GRP1]
   DW_TYPE = LOCAL
   DW_MODE = MANUAL
   DW_ERROR_TIME = 10  
   INST_RECOVER_TIME = 60 
   INST_ERROR_TIME = 10  
   INST_OGUID = 453331  
   INST_INI = /home/dmdba/dm/dmdbms/data/DAMENG/dm.ini  
   INST_AUTO_RESTART = 1 
   INST_STARTUP_CMD = /home/dmdba/dm/dmdbms/bin/dmserver

三、场景测试

  测试场景比较简单,仅用于验证手动同步功能。
  主库进行操作:
1.png
  备库查询:
2.png
  手动触发同步,同步到2021-12-1 09:00:00,通过dmmonitor连接集群后进行操作:
  SET DATABASE DM2 UNTIL TIME ‘2021-12-1 09:00:00’
3.png

参考:
达梦数据守护与读写分离手册.pdf

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服