为了防止客户系统的数据丢失,比较常见的就是在客户服务器中使用脚本进行一个定时的数据备份,而现在大部分的项目为了保证系统不会出现问题都是想方设法的保证整个系统的独立和多机备份,例如独立就像SpringCloud,任何模块的损坏都不影响其他模块的运行,多机备份则是将数据库文件备份在多个服务器而保证数据文件的安全性。
以上方式总体上都是为了让系统稳步的运行,也可以说容灾,数据中心运行突发故障(如:天灾不可避免的灾难)是无法预测的,计算机里的数据就像扫雷游戏一样,十面埋伏充满雷区,随时都有可能Game Over,容灾备份就是数据安全的最后防线,但是你可以避免由数据中心发生故障而丢失数据引发的数据丢失的局面。今天为大家介绍数据库容灾的方式以及一些尽可能减少发生运行故障失败机会,并加强企业的数据备份环境的简单要点。
容灾系统是指在相隔较远的异地,建立两套或多套功能相同的IT系统,互相之间可以进行健康状态监视和功能切换,当一处系统因意外(如火灾、地震等)停止工作时,整个应用系统可以切换到另一处,使得该系统功能可以继续正常工作。
容灾技术是系统的高可用性技术的一个组成部分,容灾系统更加强调处理外界环境对系统的影响,特别是灾难性事件对整个IT节点的影响,提供节点级别的系统恢复功能。
从其对系统的保护程度来分,可以将容灾系统分为:数据容灾和应用容灾,数据容灾就是指建立一个异地的数据系统,该系统是本地关键应用数据的一个实时复制。
应用容灾是在数据容灾的基础上,在异地建立一套完整的与本地生产系统相当的备份应用系统(可以是互为备份),在灾难情况下,远程系统迅速接管业务运行,数据容灾是抗御灾难的保障,而应用容灾则是容灾系统建设的目标。
容灾备份实际上是两个概念,容灾是为了在遭遇灾害时能保证信息系统能正常运行,帮助企业实现业务连续性的目标,备份是为了应对灾难来临时造成的数据丢失问题。在容灾备份一体化产品出现之前,容灾系统与备份系统是独立的。容灾备份产品的最终目标是帮助企业应对人为误操作、软件错误、病毒入侵等"软"性灾害以及硬件故障、自然灾害等“硬”性灾害。
这是我们今天主要讲的位于软件层面的方式,也是最简单的一种方式。数据级容灾是最基础的手段,指通过建立异地容灾中心,做数据的远程备份,在灾难发生之后要确保原有的数据不会丢失或者遭到破坏,但在数据级容灾这个级别,发生灾难时应用是会中断的。可以简单的把这种容灾方式理解成一个远程的数据备份中心,就是建立一个数据的备份系统或者一个容灾系统,比如数据库、文件等等。
优点:费用比较低,构建实施相对简单
缺点:数据级容灾的恢复时间比较长
#在主服务器A上添加ssh公匙
ssh-keygen -t rsa
#回车直至完成,会在用户目录/root/.ssh/产生两个文件:id_rsa,id_rsa.pub
#将id_rsa.pub文件拷贝到备份服务器B的/root/.ssh目录下
scp /root/.ssh/id_rsa.pub root@123.123.123.123:/root/.ssh/authorized_keys
#完成这一步后,从服务器A复制到服务器B就不需要密码了
#如果之前有服务器已经关联了,需要将服务器C的id_rsa.pub复制到服务器B的authorized_keys里
#在备份服务器B上创建被传输的目录
mkdir -p /backup/sanlong/mysql
#进入一个目录,用于编写备份mysql的脚本(尽可能放在备份文件附近,比较好找)
cd /docker/mysql/backupsql
#创建备份sh
vim backup.sh
#以下为脚本内容,自行根据服务器修改
#!/bin/bash
#备份路径
BACKUP=/docker/mysql/backupsql/sql
#当前时间
DATETIME=$(date +%Y-%m-%d)
echo "===备份开始==="
echo "备份文件存放于${BACKUP}/$DATABASE-$DATETIME.sql"
#数据库地址
HOST=localhost
#数据库用户名
DB_USER=root
#数据库密码
DB_PW=123456
#创建备份目录
#[ ! -d "${BACKUP}/$DATETIME" ] && mkdir -p "${BACKUP}/$DATETIME"
#后台系统数据库
DATABASE=dtsum-boot
echo $DATABASE-$DATETIME
#mysqldump -u${DB_USER} -p${DB_PW} --single-transaction --host=$HOST -q -R --databases $DATABASE | gzip > ${BACKUP}/$DATETIME/$DATABASE.sql
docker exec mysql57 mysqldump -h localhost -u${DB_USER} -p${DB_PW} ${DATABASE} > /${BACKUP}/$DATABASE-$DATETIME.sql
echo "===导出成功,开始传输==="
#压缩成tar.gz包
cd $BACKUP
#tar -zcvf $DATETIME.tar.gz $DATETIME
#备份到服务器B
scp $DATABASE-$DATETIME.sql root@123.123.123.123:/backup/sanlong/mysql
#删除备份目录
#rm -rf ${BACKUP}/$DATETIME
#删除10天前备份的数据,这边可以自行更改
#find $BACKUP -mtime +10 -name "*.sql" -exec rm -rf {} \;
echo "===数据库备份到服务器成功==="
#编写cron脚本
crontab -e
#输入内容(这边代表每天0点备份)
0 0 * * * sh /docker/mysql/backupsql/backup.sh
#保存
:wq
#重启cron服务
service crond restart
#或
/bin/systemctl restart crond.service
应用级容灾是在数据级容灾的基础之上,在备份站点同样构建一套相同的应用系统,通过同步或异步复制技术,这样可以保证关键应用在允许的时间范围内恢复运行,尽可能减少灾难带来的损失,让用户基本感受不到灾难的发生。应用级容灾就是建立一个应用的备份系统,比如一套OA系统正在运行,在另一个地方建立一套同样的OA系统。
优点:提供的服务是完整、可靠、安全的,确保业务的连续性
缺点:费用较高,需要更多软件的实现
业务级容灾是全业务的灾备,除了必要的IT相关技术,还要求具备全部的基础设施。
优点:保障业务的连续性
缺点:费用很高,还需要场所费用的投入,实施难度大。