分散式資料庫的資料備份/恢復,這些你一定要了解
阿新 • • 發佈:2020-07-24
一、概述
二、儲存引擎層的備份恢復
- 物理備份恢復方法
1. 前期準備
IP |
Hostname |
SequoiaDB使用者 |
備註 |
192.168.1.3 |
sdb03 |
sdbadmin |
|
192.168.1.4 |
sdb04 |
sdbadmin |
|
192.168.1.5 |
sdb05 |
sdbadmin |
備份磁碟(掛載目錄/sdbdata/backup) |
2. 全量備份[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 -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
[sdbadmin@sdb05 ~]#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. 增量備份
[sdbadmin@sdb05 ~]#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
(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} 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 sdbadmin@$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. 增量恢復
[sdbadmin@sdb05 ~]#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
邏輯備份恢復方法
1. 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'
2. 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 例項層的備份操作
1. mysqldump 工具使用
2. mydumper&myloader工具使用(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
$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
- 小結