文章详情

短信预约信息系统项目管理师 报名、考试、查分时间动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

分布式数据库的数据备份/恢复,这些你一定要了解

2014-07-01 07:46

关注


	分布式数据库的数据备份/恢复,这些你一定要了解
[数据库教程]

一、概述

 

在数据作为生产资料的今天,数据早已成为各行各业的生命源泉,数据安全的重要性不言而喻。数据备份是数据安全的基础,完整的备份和有效的恢复手段是应对一切突发状况的重要保障。同时数据备份也对数据的重新利用,发挥数据更大价值,有着重大的作用。

 

而数据备份的重点是对数据库的备份。定期对数据库进行数据备份,以便能在未来发生系统故障、人为误操作等情况时,进行数据恢复,防范于未然。

 

巨杉数据库作为新一代分布式交易型数据库,采用“计算与存储分离”的架构;和同时期发展分布式数据库的灯塔厂商AWS在架构上不谋而合。能够在微服务时代更好支撑应用便捷开发的需求。

 

计算与存储分离的架构,也使得巨杉数据库拥有多种多样的备份恢复方法。在巨杉数据库的存储引擎层和SQL实例层都可以达到对数据库备份恢复的目的。

技术图片

计算与存储分离架构图

 

 

二、存储引擎层的备份恢复

 

巨杉数据库采用自研的 SequoiaDB 分布式存储引擎,支持物理备份(db.backup)与逻辑备份(sdbexprt)。

 

物理备份是指转储数据库物理文件(如数据文件、日志文件等),一旦数据库发生故障,可以利用这些文件进行还原;通常可以分为全量备份与增量备份。巨杉数据库物理备份可以针对全库进行或者指定数据组进行;

 

巨杉数据库做物理备份和恢复工作时,要注意分布式数据库与关系型数据库的不同,即分布式数据库数据恢复会涉及到多台服务器的数据库物理文件,而不只是某一台服务器上的数据库物理文件。

 

逻辑备份是指对数据库对象(如用户、表、存储过程等)利用工具进行导出,同时也可以利用工具把逻辑备份文件导入到数据库。巨杉数据库逻辑备份可以将集合(表)导出为json或者csv 格式,实现快速平滑的迁移。

 

下面采用3台机器的巨杉数据库级群(3副本),来说明存储引擎层的物理备份恢复方法。

 

1. 前期准备

 

IP

Hostname

SequoiaDB用户

备注

192.168.1.3

sdb03

sdbadmin

 

192.168.1.4

sdb04

sdbadmin

 

192.168.1.5

sdb05

sdbadmin

备份磁盘(挂载目录/sdbdata/backup)

[[email protected] ~]# cat /etc/exports
/sdbdata/backup   *(insecure,rw,sync,no_wdelay,insecure_locks,no_root_squash)


[[email protected] ~]# mount -t nfs -o rw,bg,hard,nointr,tcp 192.168.1.5:/sdbdata/backup /sdbdata/backup
[[email protected] ~]# chown -R sdbadmin:sdbadmin_group /sdbdata/backup


[[email protected] ~]# mount -t nfs -o rw,bg,hard,nointr,tcp 192.168.1.5:/sdbdata/backup /sdbdata/backup
[[email protected] ~]# chown -R sdbadmin:sdbadmin_group /sdbdata/backup
[[email protected] ~]# df -h
Filesystem                    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% /opt
192.168.1.5:/sdbdata/backup  985G  129G  807G  14% /sdbdata/backu

 

2. 全量备份
[[email protected] ~]#cat backup_full.sh
#!/bin/bash
date
/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" } ) ;‘
date


db.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"]。

技术图片技术图片

技术图片技术图片

技术图片

 技术图片

3. 增量备份
[[email protected] ~]#cat backup_incre.sh
#!/bin/bash
date
/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

技术图片

技术图片

  4. 全量恢复
(1)配置单向ssh 免密服务
[[email protected] ~]#ssh-keygen -t rsa
[[email protected] ~]#ssh-copy-id [email protected]
[[email protected] ~]#ssh-copy-id [email protected]
[[email protected] ~]#ssh-copy-id [email protected]


(2)恢复脚本
[[email protected] ~]#cat restore_full.sh
#!/bin/bash
#停止集群
for hostname in {sdb03,sdb04,sdb05}
do
ssh $hostname /opt/sequoiadb/bin/sdbstop -t all
done
#全量恢复一份完整的副本数据
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 0
done
#删除另外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 [email protected]$hostname "rm -rf "$dbpath*
     scp -pr $dbpath* $hostname:$dbpath &
   done
done
#启动集群
/bin/read -p " Do you want to start SequoiaDB(yes or no)?  " Do
while [[ "$Do" != "no" ]] && [[ "$Do" != "yes" ]]
do
/bin/read -p "Do you want to start SequoiaDB(yes/no)?" Do
done
if [ "$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"
fi


sdbrestore数据恢复常用参数:
--bkpath -p:备份源数据所在路径。
--increaseid -i:需要恢复到第几次增量备份,缺省恢复到最后一次 ( -1 )。
--beginincreaseid -b:需要从第几次备份开始恢复,缺省由系统自动计算 ( -1 )。
--bkname -n:需要恢复的备份名。
--action -a:恢复行为,“restore”表示恢复,“list”表示查看备份信息,缺省为“restore”。
--diaglevel -v:恢复工具自身的日志级别,缺省为 WARNING ( 3 

技术图片

技术图片

技术图片技术图片

技术图片 技术图片

  5. 增量恢复
[[email protected] ~]#cat restore_incre.sh
#!/bin/bash
#停止集群
for hostname in {sdb03,sdb04,sdb05}
do
ssh $hostname /opt/sequoiadb/bin/sdbstop -t all
done
#增量恢复副本数据
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 -1
done
#启动集群
/bin/read -p " Do you want to start SequoiaDB(yes or no)?  " Do
while [[ "$Do" != "no" ]] && [[ "$Do" != "yes" ]]
do
/bin/read -p "Do you want to start SequoiaDB(yes/no)?" Do
done


if [ "$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"
fi

技术图片

技术图片

技术图片

技术图片 技术图片

 

逻辑备份恢复方法

 

巨杉数据库自带的逻辑备份恢复工具为 sdbexprt 和 sdbimprt。

  1. sdbexprt 工具使用

sdbexprt 可以将集合从 SequoiaDB 数据库导出为 json 格式或者 csv 格式的数据存储文件。sdbexprt 支持将一个集合导出到一个文件中,同时也支持将多个集合批量导出到指定目录下。

技术图片

(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 --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 的缺点是备份的过程是串行化的,不能并行的进行备份,速度较慢。

技术图片

(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公司开发和维护。

技术图片

技术图片

$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和系统运维人的必修课,在分布式环境下,虽然分布式数据库会有不同的机制保证数据的安全,但是数据的备份和恢复仍然是在生产环境中特别需要注意的一个重点,也希望大家一定要熟练掌握。

 

分布式数据库的数据备份/恢复,这些你一定要了解

原文地址:https://www.cnblogs.com/sequoiadbsql/p/13371123.html

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯