众所周知,数据库的“两地三中心”方案是现在比较主流的容灾方案,即生产中心、同城容灾中心、异地容灾中心,从意义上来看就是,兼具同城容灾和异地容灾。但在实际项目应用中,往往数据库只建设了生产数据库,甚至很多都不是集群,而是采用单机方式。数据库运行数据和备份数据都存放在同一个服务器上,存在较大的风险。从而产生了异地备份的想法,本文将讨论如何在有异地服务器的情况下,进行数据库的异地逻辑备份和物理备份。但在数据库架构设计中,作为核心系统建议还是选择数据库集群,保证本地多活,并进行同城备机,或再增加异地备机的方式。
异地备份思路:
异地逻辑备份即在备份机器远程逻辑备份源端数据库,脚本及说明如下:
touch dmbak_luoji.sh
#!/bin/sh
export bakdir=/dmbak_luoji #逻辑备份路径
#环境变量
export DM_HOME="/dm8" #数据库安装路径
export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/dm8/bin"
export PATH="$DM_HOME/bin:$PATH"
export LANG=en_US.UTF-8
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
#备份设置
date=$(date +%Y%m%d) #当前时间
days=10 #设置删除10天前的数据
dmid=192.168.237.117:5236 #要备份的DM数据库IP、端口
bakuser=SYSDBA #使用此用户来导出dmp
bakpass="SYSDBA" #用户密码
bakdir=/dmbak_luoji #备份文件路径
bakdata=$bakuser"_"$date.dmp #备份的dmp名称
baklog=$bakuser"_"$date.log #备份时产生的log名称
dmdatabak=$bakuser"_"$date.tar.gz #将备份的dmp和log压缩后的文件名称
cd $bakdir
#导出dmp和log文件
dexp $bakuser/$bakpass@$dmid file=$bakdata log=$baklog directory=$bakdir full=y #可以编辑其他的备份条件
tar -zcvf $dmdatabak $bakdata $baklog #压缩dmp和log文件
find $bakdir -type f -name "*.log" -exec rm {} \; #删除log文件
find $bakdir -type f -name "*.dmp" -exec rm {} \; #删除dmp文件
find $bakdir -type f -name "*.tar.gz" -mtime +$days -exec rm -rf {} \; #删除10天前备份文件
chmod 755 dmbak_luoji.sh
添加定时任务,设定为每天23:30执行脚本
crontab -e
30 23 * * * cd /home/dmdba/ && sh dmbak_luoji.sh
如下图所示,达梦数据库的定时作业备份目录只能填写当前服务器的路径,若要想实现异地备份,即将备机数据库的路径共享给源端数据库。
将备机数据库/dmbak1路径挂载到源端数据库/dmbak1路径。
rpm -qa | grep nfs-utils
rpm -qa | grep rpcbind
vi /etc/exports
#增加以下一行内容 如需多个往下面加即可我这边是指定ip
/dmbak1 192.168.237.116(rw,sync,no_root_squash)
修改完后重启
service nfs restart
service rpcbind restart
showmount -e
显示如下即表示成功
mount -t nfs 192.168.237.116:/dmbak1 /opt/dmbak1
在方案2.2,备份的IP地址填写本机,并增加定时传输的脚本内容,同样适用了本地的物理备份传输。
scp /dmbak_luoji/$bakuser"_"$date.tar.gz 192.168.237.116:/dmbak_luoji #将备份文件传到备份服务器上
文章
阅读量
获赞