數據備份

數據備份重要性:

數據尤其是一個公司的核心數據關係着公司的命脈,數據丟失可以導致公司倒閉。

數據主要分爲兩大類:

文件類:  
	程序代碼、圖片、附件、軟件包、配置文件

數據(數據庫)類:
	關係型數據庫(MySQL/MariaDB等)、非關係型數據庫(Redis、MongoDB等)

備份原則:

每日一備份,本地保存一份,遠程保存一份,根據數據重要性和磁盤空間決定保存週期。

文件類的備份:

tar、scp、cp、rsync

數據類:

自帶工具實現備份(如,mysqldump、Xtrabackup)

rsync教程

rsync -av /etc/passwd /tmp/1.txt
rsync -av /tmp/1.txt 192.168.188.128:/tmp/2.txt 

rsync格式

rsync [OPTION] … SRC   DEST
rsync [OPTION] … SRC   [user@]host:DEST
rsync [OPTION] … [user@]host:SRC   DEST
rsync [OPTION] … SRC   [user@]host::DEST
rsync [OPTION] … [user@]host::SRC   DEST

rsync常用選項

-a 包含-rtplgoD
-r 同步目錄時要加上,類似cp時的-r選項
-v 同步時顯示一些信息,讓我們知道同步的過程
-l 保留軟連接
-L 加上該選項後,同步軟鏈接時會把源文件給同步
-p 保持文件的權限屬性
-o 保持文件的屬主
-g 保持文件的屬組
-D 保持設備文件信息
-t 保持文件的時間屬性
--delete 刪除DEST中SRC沒有的文件
--exclude 過濾指定文件,如--exclude “logs”會把文件名包含logs的文件或者目錄過濾掉,不同步
-P 顯示同步過程,比如速率,比-v更加詳細
-u 加上該選項後,如果DEST中的文件比SRC新,則不同步
-z 傳輸時壓縮

rsync通過ssh方式同步

rsync -av test1/ 192.168.133.132:/tmp/test2/
rsync -av -e "ssh -p 22" test1/ 192.168.133.132:/tmp/test2/

rsync 通過服務的方式同步

要編輯配置文件/etc/rsyncd.conf
啓動服務rsync --daemon
格式:rsync -av test1/ 192.168.133.130::module/dir/

rsyncd.conf樣例

port=873
log file=/var/log/rsync.log
pid file=/var/run/rsyncd.pid
address=192.168.133.130
[test]
path=/root/rsync
use chroot=true
max connections=4
read only=no
list=true
uid=root
gid=root
auth users=test
secrets file=/etc/rsyncd.passwd
hosts allow=192.168.133.132 1.1.1.1 2.2.2.2  192.168.133.0/24

rsyncd.conf配置文件詳解 

port:指定在哪個端口啓動rsyncd服務,默認是873端口。
log file:指定日誌文件。
pid file:指定pid文件,這個文件的作用涉及服務的啓動、停止等進程管理操作。
address:指定啓動rsyncd服務的IP。假如你的機器有多個IP,就可以指定由其中一個啓動rsyncd服務,
	如果不指定該參數,默認是在全部IP上啓動。
[]:指定模塊名,裏面內容自定義。
path:指定數據存放的路徑。
use chroot true|false:表示在傳輸文件前首先chroot到path參數所指定的目錄下。這樣做的原因是實現額外的安全防護,
	但缺點是需要以roots權限,並且不能備份指向外部的符號連接所指向的目錄文件。默認情況下chroot值爲true,
	如果你的數據當中有軟連接文件,阿銘建議你設置成false。
max connections:指定最大的連接數,默認是0,即沒有限制。
read only ture|false:如果爲true,則不能上傳到該模塊指定的路徑下。
list:表示當用戶查詢該服務器上的可用模塊時,該模塊是否被列出,設定爲true則列出,false則隱藏。
uid/gid:指定傳輸文件時以哪個用戶/組的身份傳輸。
auth users:指定傳輸時要使用的用戶名。
secrets file:指定密碼文件,該參數連同上面的參數如果不指定,則不使用密碼驗證。
	注意該密碼文件的權限一定要是600。
	格式:用戶名:密碼
hosts allow:表示被允許連接該模塊的主機,可以是IP或者網段,如果是多個,中間用空格隔開。 
當設置了auth users和secrets file後,客戶端連服務端也需要用用戶名密碼了,
若想在命令行中帶上密碼,可以設定一個密碼文件

rsync -avL [email protected]::test/test1/  /tmp/test8/ --password-file=/etc/pass 
其中/etc/pass內容就是一個密碼,權限要改爲600

mysqldump教程

備份數據庫的命令爲:
mysqldump -ubackup -pxxxxx db1 > db1.sql

如果是遠程的MySQL服務,還可以加上IP和Port,例如:
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 db1 > db1.sql

mysqldump工具常用的幾個用法,如下:

1)只備份表結構,不備份數據
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -d db1 > db1.sql

2)只備份數據,不備份表結構
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -t db1 > db1.sql

3)只備份指定表
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308  db1  tb1 > db1_tb1.sql

4)備份全部數據庫
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -A > all_db.sql

5)備份指定多個庫
mysqldump -ubackup -pxxxxx -h192.168.100.100 -P3308 -B db1 db2 > db12.sql

恢復數據:
mysql -uroot -pxxxxx dbname < xxx.sql

xtrabackup教程

提供一個參考文檔:http://xtra.aminglinux.com

mysqldump對於導出幾個G的數據庫或幾個表,還是不錯的,速度並不慢。一旦數據量達到幾十上百G,
無論是對原庫的壓力還是導出的性能,mysqldump就力不從心了。Percona-Xtrabackup備份工具,
是實現MySQL在線熱備工作的不二選擇,可進行全量、增量、單表備份和還原。

xtrabackup命令只支持InnoDB和XtraDB存儲引擎的數據庫非阻塞地備份,
而innobackupex通過perl封裝了一層xtrabackup,對MyISAM的備份通過加表讀鎖的方式實現。

在CentOS7上這樣安裝percona-xtrabackup
安裝yum源
rpm -ivh http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm  
yum install -y percona-xtrabackup-24 //yum安裝2.4版本

用xtrabackup做全量備份的命令是:
innobackupex --defaults-file=/etc/my.cnf  --host=10.100.100.100  --port=3333 \
--user=bakuser --password=your_pass  /data/backup/mysql

說明:在執行該備份操作之前,需要先創建一個用戶bakuser(用戶名自定義),
並授予reload, lock tables, replication client, process, super等權限。
備份數據將會放到/data/backup/mysql目錄裏面,自動生成一個以當前日期、時間爲名字的目錄,例如2018-10-15_03_00_01。

增量備份:
innobackupex --host=10.100.100.100  --port=3333 --user=bakuser --password=your_pass \
 --incremental /data/backup/mysql --incremental-basedir=/data/backup/mysql/last-backup-file

說明:
--incremental :表示本次備份是一個增量備份(若針對的上次備份爲一個全量備份,這裏也可以認爲是個差量備份)
--incremental-basedir:指定本次增量備份針對的哪一個備份(可以是上個增量,也可以是上個全量)
增量備份可以一環扣一環,比如可以週一做一個全量備份,然後週二做週一的增量,週三做週二的增量。。。


恢復:
1)全量備份的恢復
預備恢復:innobackupex --apply-log /PATH/TO/BACKUP/dir-quan --user-memroy=2G
停止MySQL/MariaDB,將datadir目錄裏面的數據清空(或者挪走)
恢復:innobackupex --defaults-file=/etc/my.cnf  --copy-back  /PATH/TO/BACKUP/dir-quan
改權限:chown -R mysql:mysql /PATH/TO/datadir
啓動MySQL/MariaDB

說明:
--apply-log:指定全備文件路徑
--use-memory=N:指定恢復數據時,使用內存大小,默認爲100M,若備份數據量大且有足夠的空閒內存時,
    可以用來指定大小的內存來工作,單位可以使用G,M....。
--defaults-file: 指定配置文件路徑,通過配置文件它會找到datadir在哪裏


2)增量備份的恢復
停止服務
刪除dataidir裏面的數據
準備全量:
innobackupex --apply-log --redo-only  /PATH/TO/全量備份目錄
準備增量1:
innobackupex --apply-log --redo-only  /PATH/TO/全量備份目錄 --incremental-dir=/PATH/TO/第一次增量備份目錄
準備增量2:
innobackupex --apply-log --redo-only /PATH/TO/全量備份目錄  --incremental-dir=/PATH/TO/第二次增量備份目錄
......
準備最後一個增量:
innobackupex --apply-log /PATH/TO/全量備份目錄  --incremental-dir=/PATH/TO/最後一次增量備份目錄
再次準備全量:
innobackupex --apply-log   /PATH/TO/全量備份目錄   #(這次不用加--redo-only了)

恢復:
innobackupex --copy-back /PATH/TO/全量備份目錄
改權限:chown -R mysql:mysql /PATH/TO/datadir
啓動MySQL/MariaDB

說明:--redo-only:表示進行準備(應用日誌)工作時,只進行redo操作,只會重做已提交但未應用的事務,
不會回滾未提交的事務。原因是後面還有個增量備份,未提交的可能在後面增量備份時進行提交。
需要注意的是,最後一個增量備份不需要加這個選型。

MariaDB新版本(10.3.x+)的備份和恢復

MariaDB10.3.x及以上的版本用Percona XtraBackup工具會有問題。
原因可能是MariaDB10.3以上版本的redo日誌格式和之前不同了。
解決方案是,使用mariabackup,它是MariaDB提供的一個開源工具,用於對InnoDB,Aria和MyISAM表進行物理在線備份。
這個工具是基於Percona的XtraBackup(版本2.3.8)的解決方案:

全量備份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21

全量恢復:
停止數據庫
清空datadir
mariabackup --prepare --target-dir /data/backup/2019-02-21/ 
mariabackup --copy-back --target-dir /data/backup/2019-02-21/
改屬主、屬組
啓動

增量備份:
mariabackup --defaults-file=/etc/my.cnf --backup --user=xxx --password=xxx --target-dir /data/backup/2019-02-21
第一個增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc1 --incremental-basedir /data/backup/2019-02-21
第二個增量:mariabackup --backup --user=xxx --password=xxx  --target-dir /data/backup/2019-02-21_inc2 --incremental-basedir /data/backup/2019-02-21_inc1

增量恢復:
先準備全備
mariabackup --prepare --target-dir /data/backup/2019-02-21 --apply-log-only
準備第一個增量:
cd /data/backup
mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc1 --apply-log-only
準備第二個增量:
mariabackup --prepare --target-dir ./2019-02-21 --incremental-dir ./2019-02-21_inc2 --apply-log-only
恢復:
mariabackup --copy-back  --target-dir ./2019-02-21

備份腳本

#!/bin/bash 
bakdir=/data/backup
d=`date +%F`

for db in bbs blog db2
do
    mysqldump -uroot -paminglinux $db > $bakdir/$db\_$d.sql
done

cd $bakdir
gzip *_$d.sql
find ./ -name "*.gz" -mtime +30 |xargs rm


原文鏈接:https://github.com/aminglinux/linux2019/blob/master/5.49-%E6%95%B0%E6%8D%AE%E5%A4%87%E4%BB%BD.md


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章