您好,欢迎访问数据库运维|优化|安装|迁移|服务官网!
13261661949
分布式数据库的数据备份恢复-数据库恢复-数据库运维|优化|安装|迁移|服务_uDBok.com
联系我们

分布式数据库的数据备份恢复-数据库恢复-数据库运维|优化|安装|迁移|服务_uDBok.com

地址:北京市昌平区高新经济开发区
手机:13261661949

咨询热线13261661949

分布式数据库的数据备份恢复

发布时间:2021-02-11 10:15:10人气:2732
  • [list:title]

在数据作为生产资料的今日,数据早已成为各行各业的生命源泉,分布式数据库的数据备份恢复安全的重要性不言而喻。数据备份是数据安全的基础,完好的备份和有效的康复手法是应对全部突发状况的重要保障。一同数据备份也对数据的重新运用,发挥数据更大价值,有着严重的作用。
而数据备份的要点是对数据库的备份。守时对数据库进行数据备份,以便能在未来产生体系毛病、人为误操作等状况时,进行数据康复,防范于未然。
巨杉数据库作为新一代分布式买卖型数据库,选用“核算与存储别离”的架构;和一同期发展分布式数据库的灯塔厂商AWS在架构上不约而同。能够在微服务时代更好支撑运用快捷开发的需求。
核算与存储别离的架构,也使得巨杉数据库拥有多种多样的备份康复办法。在巨杉数据库的存储引擎层和SQL实例层都能够到达对数据库备份康复的目的。
核算与存储别离架构图
二、存储引擎层的备份康复
巨杉数据库选用自研的 SequoiaDB 分布式存储引擎,支持物理备份(db.backup)与逻辑备份(sdbexprt)。
物理备份是指转储数据库物理文件(如数据文件、日志文件等),一旦数据库产生毛病,能够运用这些文件进行还原;一般能够分为全量备份与增量备份。巨杉数据库物理备份能够针对全库进行或许指定数据组进行;
巨杉数据库做物理备份和康复工作时,要留意分布式数据库与关系型数据库的不同,即分布式数据库数据康复会涉及到多台服务器的数据库物理文件,而不只是某一台服务器上的数据库物理文件。
逻辑备份是指对数据库目标(如用户、表、存储进程等)运用东西进行导出,一同也能够运用东西把逻辑备份文件导入到数据库。巨杉数据库逻辑备份能够将调集(表)导出为json或许csv 格局,完成快速滑润的搬迁。
物理备份康复办法
下面选用3台机器的巨杉数据库级群(3副本),来阐明存储引擎层的物理备份康复办法。
1. 前期准备
主机信息补白:
通过NFS将备份目录同享
[root@sdb05 ~]# cat /etc/exports/sdbdata/backup *(insecure,rw,sync,no_wdelay,insecure_locks,no_root_squash)[root@sdb03 ~]# mount -t nfs -o rw,bg,hard,nointr,tcp 192.168.1.5:/sdbdata/backup /sdbdata/backup[root@sdb03 ~]# chown -R sdbadmin:sdbadmin_group /sdbdata/backup[root@sdb04 ~]# mount -t nfs -o rw,bg,hard,nointr,tcp 192.168.1.5:/sdbdata/backup /sdbdata/backup[root@sdb04 ~]# chown -R sdbadmin:sdbadmin_group /sdbdata/backup[root@sdb04 ~]# df -hFilesystem Size Used Avail Use% Mounted on/dev/mapper/centos-root 15G 4.4G 11G 29% //dev/vdb 985G 129G 806G 14% /sdbdata/dev/vda1 497M 172M 326M 35% /boot/dev/vda3 50G 13G 38G 26% /opt192.168.1.5:/sdbdata/backup 985G 129G 807G 14% /sdbdata/backup
2. 全量备份
全量备份脚本
[sdbadmin@sdb05 ~]#cat backup_full.sh#!/bin/bashdate/opt/sequoiasql/mysql/bin/mysqldump --login-path=mysql -A -d > /sdbdata/backup/full/create`date +%y%m%d%H`.sql/opt/sequoidb/bin/sdblist -l -m list > /sdbdata/backup/full/sdblist`date +%y%m%d%H`.sql/opt/sequoiadb/bin/sdb 'db=new Sdb()'/opt/sequoiadb/bin/sdb 'db.backup ( { Name : "cluster_backup", Path : "/sdbdata/backup/full/%g", Overwrite : true, Description : "full_backup" } ) ;'datedb.backup()备份常用参数阐明Name:备份称号,缺省则以当时时间格局命名,如“2016-01-01-15:00:00”,格局为“YYYY-MM-DD-HH:mm:ss”。Description:备份用户描绘信息。Path:本次备份的指定途径,缺省为装备参数“bkuppath”中指定的途径。EnsureInc:备份方法,true 表明增量备份,false 表明全量备份,缺省为 false。OverWrite:关于同名备份是否掩盖,true 表明掩盖,false 表明不掩盖,如果同名则报错;缺省为 false。GroupName:对指定组进行备份,缺省为对全体系备份,当需求对多个组进行备份能够指定为数组类型,如:["datagroup1", "datagroup2"]。
履行全量备份,检查表test100.b 的记载
履行全量备份
3. 增量备份
增量备份脚本
[sdbadmin@sdb05 ~]#cat backup_incre.sh#!/bin/bashdate/opt/sequoiasql/mysql/bin/mysqldump --login-path=mysql -A -d > /sdbdata/backup/full/create`date +%y%m%d%H`.sql/opt/sequoidb/bin/sdblist -l -m list > /sdbdata/backup/full/sdblist`date +%y%m%d%H`.sql/opt/sequoiadb/bin/sdb 'db=new Sdb();'/opt/sequoiadb/bin/sdb 'db.backup ( { Name : "cluster_backup", Path : "/sdbdata/backup/full/%g", EnsureInc : true } );'date
履行增量备份,向表test100.b 中刺进100万条数据
进行增量备份
4. 全量康复
全量康复脚本
(1)装备单向ssh 免密服务[sdbadmin@sdb05 ~]#ssh-keygen -t rsa[sdbadmin@sdb05 ~]#ssh-copy-id sdbadmin@sdb03[sdbadmin@sdb05 ~]#ssh-copy-id sdbadmin@sdb04[sdbadmin@sdb05 ~]#ssh-copy-id sdbadmin@sdb05(2)康复脚本[sdbadmin@sdb05 ~]#cat restore_full.sh#!/bin/bash#中止集群for hostname in {sdb03,sdb04,sdb05}dossh $hostname /opt/sequoiadb/bin/sdbstop -t alldone#全量康复一份完好的副本数据for groupname in `cat /sdbdata/backup/full/sdblist20200717.sql | awk '{print $8}' | grep -Evi "GroupName|SYSCoord" `do/opt/sequoiadb/bin/sdbrestore -p /sdbdata/backup/full/$groupname/ -n cluster_backup -b 0 -i 0done#删除另外2台服务器之前的副本数据,scp拷贝全量康复的副本数据for hostname in {sdb03,sdb04}do for dbpath in `cat /sdbdata/backup/full/sdblist20200717.sql | awk '{print $10}'| grep -Evi "dbpath|*11810"` do ssh -t sdbadmin@$hostname "rm -rf "$dbpath* scp -pr $dbpath* $hostname:$dbpath & donedone#发动集群/bin/read -p " Do you want to start SequoiaDB(yes or no)? " Dowhile [[ "$Do" != "no" ]] && [[ "$Do" != "yes" ]]do/bin/read -p "Do you want to start SequoiaDB(yes/no)?" Dodoneif [ "$Do" == "yes" ]then for hostname in {sdb03,sdb04,sdb05} do ssh $hostname /opt/sequoiadb/bin/sdbstart -t all done elif [ "$Do" == "no" ] then echo "please start SequoiaDB by hand"fisdbrestore数据康复常用参数:--bkpath -p:备份源数据所在途径。--increaseid -i:需求康复到第几次增量备份,缺省康复到最后一次 ( -1 )。--beginincreaseid -b:需求从第几次备份开始康复,缺省由体系自动核算 ( -1 )。--bkname -n:需求康复的备份名。--action -a:康复行为,“restore”表明康复,“list”表明检查备份信息,缺省为“restore”。--diaglevel -v:康复东西自身的日志等级,缺省为 WARNING ( 3 )
履行全量康复,清空test100.b 表的记载
履行全量康复
检查全量康复后test100.b 表的记载条数
5. 增量康复
增量康复脚本
[sdbadmin@sdb05 ~]#cat restore_incre.sh#!/bin/bash#中止集群for hostname in {sdb03,sdb04,sdb05}dossh $hostname /opt/sequoiadb/bin/sdbstop -t alldone#增量康复副本数据for groupname in `cat /sdbdata/backup/full/sdblist20200717.sql | awk '{print $8}' | grep -Evi "GroupName|SYSCoord"`do/opt/sequoiadb/bin/sdbrestore -p /sdbdata/backup/full/$groupname/ -n cluster_backup -b -1done#发动集群/bin/read -p " Do you want to start SequoiaDB(yes or no)? " Dowhile [[ "$Do" != "no" ]] && [[ "$Do" != "yes" ]]do/bin/read -p "Do you want to start SequoiaDB(yes/no)?" Dodoneif [ "$Do" == "yes" ]thenfor hostname in {sdb03,sdb04,sdb05} do ssh $hostname /opt/sequoiadb/bin/sdbstart -t all done elif [ "$Do" == "no" ] then echo "please start SequoiaDB by hand"fi
履行增量康复
检查增量康复后test100.b 表的记载条数
增量康复后,表test100.b数据彻底康复
逻辑备份康复办法
巨杉数据库自带的逻辑备份康复东西为 sdbexprt 和 sdbimprt。
1. sdbexprt 东西运用
sdbexprt 能够将调集从 SequoiaDB 数据库导出为 json 格局或许 csv 格局的数据存储文件。sdbexprt 支持将一个调集导出到一个文件中,一同也支持将多个调集批量导出到指定目录下。
sdbexprt 常用参数阐明
SequoiaDB 选用 json文档类型定义数据存储模型(类目标存储)。逻辑备份康复选用json格局,愈加滑润高效。下面把数据导出 json 格局为例:
(1)导出调集sbtest.sbtest1 的数据sdbexprt --hostname "localhost" --svcname "11810" --user "sdbadmin" --password "sdbadmin"--type 'json' --csname 'sbtest' --clname 'sbtestl' --file '/tmp/sbtest.sbtest1.json'(2)导出调集空间sbtest下,一切调集的数据sdbexprt --hostname "localhost" --svcname "11810" --user "sdbadmin" --password "sdbadmin"--type 'json' --cscl 'sbtest' --dir '/tmp'
Note:SQL实例层与存储引擎层对应关系为库名等同于底层的调集空间;表名等同于底层的调集。
2. sdbimprt东西运用
sdbimprt 是巨杉数据库自带的数据导入东西,它能够将json格局或csv格局的数据高效滑润的导入到巨杉数据库中。
为了能够最大化提升 I/O 与网络吞吐量,关于百GB级文件主张将数据导入文件切分为多个子文件并且存放于不同服务器,选用多服务器并行加载策略;并且在文件加载进程中运用-j 参数开启多线程。
sdbimprt并行导入架构图
sdbimprt 常用参数阐明
下面以导入json 格局数据为例
sdbimprt --hosts 'localhost:11810' --user 'sdbadmin' --password 'sdbadmin' --csname 'sbtest' --clname 'sbtest1' --insertnum 10000 --jobs 20 --type 'json' --file '/tmp/sbtest.sbtest1.json'--coord false --ignorenull true --verbose true --force false --errorstop true --sharding true --transaction false --allowkeydup true
三、SQL 实例层的备份操作
巨杉数据库在联机买卖场景下,SQL 实例层主要以 MySQL 为主;原生 MySQL 数据库相同支持物理备份(Xtrabackup等)和逻辑备份(mysqldump、mysqlpump、mydumper)。
原生MySQL数据库物理文件只存在于单台服务器与分布式数据库存在较大差异;物理备份东西(Xtrabackup等)并不适用于巨杉数据库SQL实例层。逻辑备份东西(mysqldump、mysqlpump、mydumper)是彻底适用的,下面以mysqldump、mydumper 为例进行阐明。
1. mysqldump 东西运用
mysqldump 是 MySQL 自带的逻辑备份东西。它的备份原理是,通过协议连接到 MySQL 数据库,将需求备份的数据查询出来,将查询出的数据转换成对应的insert句子。
mysqldump 的优点是简略灵敏,数据格局明晰,便利修改,能够进行不同等级备份。mysqldump 的缺点是备份的进程是串行化的,不能并行的进行备份,速度较慢。
mysqldump 常用参数阐明
运用mysqldump完成数据库备份,常见场景
(1)备份一切库:mysqldump -h 192.168.3.6 -P 3306 -u root -p root123456 -A > /backup/all.sql(2)备份几个库:mysqldump --h 192.168.3.6 -P 3306 -u root -p root123456 -B 库名1 库名2 > /backup/database.sql(3)备份单个库某几个表(表名用空格隔开即可)Mysqldump -h 192.168.3.6 -P 3306 -u root -p root123456 库名 表名1 表名2> /backup/table.sql(4)mysqldump康复mysql -h 192.168.3.6 -P 3306 -u root -p root123456 < /backup/all.sql;或许MySQL>source /backup/all.sql
2. mydumper&myloader东西运用
mydumper&myloader是用于对MySQL数据库进行多线程备份和康复的开源 (GNU GPLv3)东西。开发人员主要来自MySQL、Facebook和SkySQL公司,目前由Percona公司开发和保护。
mydumper常用参数阐明:
myloader常用参数阐明:
示例:备份康复sbtest
$time mydumper -h 192.168.3.6 -P 3306 -u root -p root123456 -t 6 -c -e -B sbtest -o /home/data/$time myloader -h 192.168.3.6 -P 3306 -u root -p root123456 -t 6 -B sbtest -o -d /home/data
小结
除了上文介绍到的一些技术点,我们在实际运用中也能够挑选第三方备份软件或许数据备份一体机进行会集的数据备份管理;完成对数据库、文件、操作体系、虚拟机的实时、守时备份。这里我们能够也和我们互动一下,一同分享一下我们运用第三方东西、软件进行数据康复备份的一些经验。
数据备份和康复,是一切DBA和体系运维人的必修课,在分布式环境下,虽然分布式数据库会有不同的机制确保数据的安全,可是数据的备份和康复仍然是在生产环境中特别需求留意的一个要点,也期望我们一定要熟练掌握。

推荐资讯

13261661949