數據備份重要性:mysql
數據尤爲是一個公司的核心數據關係着公司的命脈,數據丟失能夠致使公司倒閉。
數據主要分爲兩大類:linux
文件類: 程序代碼、圖片、附件、軟件包、配置文件 數據(數據庫)類: 關係型數據庫(MySQL/MariaDB等)、非關係型數據庫(Redis、MongoDB等)
備份原則:git
每日一備份,本地保存一份,遠程保存一份,根據數據重要性和磁盤空間決定保存週期。
文件類的備份:github
tar、scp、cp、rsync
數據類:sql
自帶工具實現備份(如,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 test@192.168.133.130::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教程bash
提供一個參考文檔: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
備份腳本app
#!/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