《AIX环境下DB2冷备机恢复方案(生产实践)》
- [1 DB2数据库常见备份方式简要说明](#1 DB2数据库常见备份方式简要说明)
- [2 方案说明](#2 方案说明)
- [3 实际方案(信息已脱敏)](#3 实际方案(信息已脱敏))
-
- [3.1 基本信息](#3.1 基本信息)
- [3.2 创建互信](#3.2 创建互信)
- [3.3 部署scp脚本](#3.3 部署scp脚本)
- [3.4 在冷备机192.168.16.165上部署恢复脚本](#3.4 在冷备机192.168.16.165上部署恢复脚本)
- [3.5 在冷备机192.168.16.165上部署清理脚本](#3.5 在冷备机192.168.16.165上部署清理脚本)
1 DB2数据库常见备份方式简要说明
生产环境中,对于生产环境DB2数据库的安全备份主要有以下方法,我将以从小到大的方式进行叙述:
序号 | 标题 | 表现方式 |
---|---|---|
1 | 备份数据库表 | 一般有以下方式: 方式1:在生产环境数据库创建备份表,并将数据完整插入备份表。但无法实现实时备份。 方式2:利用SQL复制技术,建立复制表,进行实时复制。 方式3:利用Q复制技术,可实现跨服务器的实时复制。 方式4:利用表的导出导入,备份和恢复表。 |
2 | 备份表空间 | 一般将表空间进行备份然后恢复。 |
3 | 备份数据库 | 一般有以下方式: 方法1:离线备份数据库。这样的备份比较完整。可用于离线恢复。 方法2:在线全备数据库。这样的备份也比较完整。但有时恢复时需要读取日志文件。 方法3:在线增备数据库,又分为拆分备份和差异备份。都需要在在线全备基础上进行恢复。 |
4 | 备份数据库所在的小型机 | 数据库在小型机上,使用AIX系统时,可以通过操作系统HACMP技术,将数据库所在的小机进行备份,达到一台故障另一台接管的数据库卷组的目的。这种方式一般数据较为完整,但是过程中会出现数据库重启,极端情况会导致数据库实例损坏。 |
5 | 备份数据库卷组 | 一般通过存储技术将数据库所在的卷组进行复制,这样出现断电等极端情况下,在另一台数据库实例上恢复数据库。一般在日常,就已经准备了另一套完整的数据库环境,一侧卷组损坏数据库无法恢复,则可以直接启动另一侧。缺点是,一般无法实时同步,两端数据差在4小时左右。 |
6 | 备份数据库环境 | 数据库在linux虚拟机上时,可以克隆虚拟机。这样对操作系统、数据库软件、数据库实例、数据库都做了完整备份。 |
7 | 备份机房环境 | 在同城或异地建设容灾机房,配置网络,复刻生产环境的数据库和应用,日常可利用存储和操作系统技术进行数据库数据备份,紧急情况可通过切换网络,实现紧急恢复。缺点是,数据一般有延迟,部分新数据存在丢失风险。 |
2 方案说明
本方案实际解决的是数据库HA无法保障数据库正常应对灾难情况下,使用冷备的数据库进行恢复。
冷备的数据库一般具备以下特征:
1、一般会配置生产相同的数据库版本、数据库用户、权限、服务器用户密码。
2、设置数据库参数、操作系统参数与生产环境基本一致。
3、数据库家目录、数据库日志、表空间等操作系统目录和文件的路径与生产一致。
4、网络安全策略与生产环境一致。
5、通过更改网卡为生产环境网卡进行启动。
3 实际方案(信息已脱敏)
3.1 基本信息
类别 | 源数据库服务器 | 冷备机服务器 |
---|---|---|
IP地址 | 192.168.16.161 | 192.168.16.165 |
实例用户 | db2test1 | db2test1 |
数据库1 | usme | usme |
数据库1活动日志 | /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/ |
3.2 创建互信
由于使用scp方式传输数据,建立源服务器到冷备机服务器的互信。
步骤 | 内容 |
---|---|
1 | db2test1用户,登录165,在/etc/hosts文件中,添加192.168.16.161 prvip_WZFWZ01 |
2 | db2test1用户,登录161,在/etc/hosts文件总,添加192.168.16.165 zwfw |
3 | db2test1用户,在161生成秘钥,执行ssh-keygen -t rsa,在~/.ssh目录下生成id_rsa id_rsa.pub两个文件。 将id_rsa.pub重命名id_rsa.pub@161,传输到165上,scp id_rsa.pub@161 db2test1@192.168.16.165:/datanet/backupsafe。 |
4 | db2test1用户,登录165,复制id_rsa.pub为id_rsa.pub@165,传输到161上,scp id_rsa.pub@165 db2test1@192.168.16.161:/home/db2test1。 |
5 | 将公钥追加到authorized_keys文件。 db2test1用户,登录161,cd /home/db2test1/.ssh,cat id_rsa.pub@161 >> authorized_keys db2test1用户,登录165,cd /home/db2test1/.ssh,cat id_rsa.pub@165 >> authorized_keys |
3.3 部署scp脚本
在源服务器部署scp脚本,将备份文件和日志文件传输到冷备机服务器。
sql
//crontab 如下
#0 3 * * * sh /home/db2test1/scpdbbkup.sh >> /home/db2test1/scpdbbkup.log
// 脚本内容如下:
#!/bin/bash
echo "Startbackup:`date +"%Y%m%d_%H%M"`"
scp -r /databak/datanet/backup/backup01/usme*001 db2test1@192.168.16.165:/datanet/backupsafe/usme
scp -r /databak/datanet/backup/backup01/seame*001 db2test1@192.168.16.165:/datanet/backupsafe/seame
uslog=`ls -rtl /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/ | tail -8 | awk '{print $9}'`
for i in $uslog
do
scp /datanet/usme/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/$i db2test1@192.168.16.165:/datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000
done
sealog=`ls -rtl /datanet/seame/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/ | tail -8 | awk '{print $9}'`
for k in $sealog
do
scp /datanet/seame/db2test1/db2test1/NODE0000/SQL00001/LOGSTREAM0000/$k db2test1@192.168.16.165:/datanet/backupsafe/seame/log/NODE0000/LOGSTREAM0000
done
echo "Endbackup:`date +"%Y%m%d_%H%M"`"
3.4 在冷备机192.168.16.165上部署恢复脚本
sql
//crontab 如下
#0 4 * * * sh /datanet/backupsafe/safeusbak.sh >> /datanet/backupsafe/safebackup.log 2>1&
// 脚本内容如下:
#!/bin/bash
. /etc/profile
if [ -f /home/db2test1/sqllib/db2profile ]; then
. /home/db2test1/sqllib/db2profile
fi
echo '\n\n\n\n'
echo "Start of usme restore:`date +"%Y%m%d_%H%M"`"
db2 restore database usme from /datanet/backupsafe/usme logtarget /datanet/backupsafe/usme/logs without prompting
echo "End of usme restore:`date +"%Y%m%d_%H%M"`"
## move file from the directory log to logs
uslogfile="/datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000"
for i in `ls -l /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000 | awk '{print $9}'| grep -v "^$"`
do
cd $uslogfile
if [ ! -e /datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000/$i ];then
mv /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000/$i /datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000
fi
done
db2 "rollforward database usme to end of logs and stop overflow log path(/datanet/backupsafe/usme/logs/NODE0000/LOGSTREAM0000)"
echo "End of usme rollforward:`date +"%Y%m%d_%H%M"`"
3.5 在冷备机192.168.16.165上部署清理脚本
清理备份文件,否则不断传输备份文件,将使得磁盘空间浪费。
sql
//crontab 如下
#0 7 * * * sh /datanet/backupsafe/safeclear.sh >> /datanet/backupsafe/safebackup.log 2>1&
// 脚本内容如下:
#!/bin/bash
. /etc/profile
echo "ClearStart time :`date`"
cd /datanet/backupsafe/usme
rm -rf usme.0*001
cd /datanet/backupsafe/usme/log/NODE0000/LOGSTREAM0000
rm -rf S0*.LOG
cd /datanet/backupsafe/usme/logs
rm -rf NODE0000
cd /datanet/backupsafe/seame
rm -rf seame.0*001
cd /datanet/backupsafe/seame/log/NODE0000/LOGSTREAM0000
rm -rf S0*.LOG
cd /datanet/backupsafe/seame/logs
rm -rf NODE0000
echo "ClearEnd time :`date`"