? ? ? ? ?數據庫備份操作是非常重要的一步,針對上線系統來說,沒有備份的數據庫是不安全的。本博文通過查閱網上資料,實現了mysql數據庫通過shell腳本文件的全備份,增量備份和局域網內定時備份操作。
服務器介紹:centos 7.0
【本地全備份】? ??
1. 單數據庫備份腳本文件
#vi mysql-backup.sh
db_user="root"?????#本服務器用戶名密碼 db_passwd="root"?? db_host="192.168.64.137"???#本服務器地址 db_name="whp"??#需要備份數據庫名稱 #?the?directory?for?story?your?backup?file.?? backup_dir="/backup"????#備份以后放入的文件路徑 #?date?format?for?backup?file?(dd-mm-yyyy)?? time="$(date?+"%Y-%m-%d-%H-%M-%S")"?? #?mysql,?mysqldump?and?some?other?bin's?path?? MYSQL="/application/mysql/bin/mysql"?? MYSQLDUMP="/application/mysql/bin/mysqldump"?? GZIP="/bin/gzip"?? ?? $MYSQLDUMP?-u?$db_user?-h?$db_host?-p$db_passwd?$db_name?|?$GZIP?-9?>?"$backup_dir/$db_name"_"$time.gz"
??2. 保留7天歷史數據的全備份
db_user="root"?? db_passwd="root"?? db_host="localhost"??? #?the?directory?for?story?your?backup?file.?? backup_dir="/application/backup/"?? #?date?format?for?backup?file?(dd-mm-yyyy)?? time="$(date?+"%H-%M-%S-%m-%d-%y")"?? #?mysql,?mysqldump?and?some?other?bin's?path?? MYSQL="/application/mysql/bin/mysql"?? MYSQLDUMP="/application/mysql/bin/mysqldump"?? MKDIR="/bin/mkdir"?? RM="/bin/rm"?? MV="/bin/mv"?? GZIP="/bin/gzip"?? #?check?the?directory?for?store?backup?is?writeable??? test?!?-w?$backup_dir?&&?echo?"Error:?$backup_dir?is?un-writeable."?&&?exit? #?the?directory?for?story?the?newest?backup?? test?!?-d?"$backup_dir/backup.0/"?&&?$MKDIR?"$backup_dir/backup.0/"?? echo?"Start?to?Backup...";?? #?get?all?databases?? #?don't?backup?information_schema、performance_schema?? all_db="$($MYSQL?-u?$db_user?-h?$db_host?-p$db_passwd?-Bse?'show?databases')"?? all_db=${all_db//information_schema/};?? all_db=${all_db//performance_schema/};?? for?db?in?$all_db?? do?? $MYSQLDUMP?-u?$db_user?-h?$db_host?-p$db_passwd?$db?|?$GZIP?-9?>?"$backup_dir/backup.0/$time.$db.gz"?? done?? #?delete?the?oldest?backup?? test?-d?"$backup_dir/backup.7/"?&&?$RM?-rf?"$backup_dir/backup.7"?? #?rotate?backup?directory?? for?int?in?6?5?4?3?2?1?0?? do?? if(test?-d?"$backup_dir"/backup."$int")?? then?? next_int=`expr?$int?+?1`?? $MV?"$backup_dir"/backup."$int"?"$backup_dir"/backup."$next_int"?? fi?? done?? echo?"BackUp?Success!"?? exit?0;
?3. 修改shell腳本權限并執行
???????#?chmod?700?mysql-backup.sh??//?只允許管理員運行此腳本 ???????????#./mysql-backup.sh????????????????//執行腳本,測試一次
? ?【日志文件增量備份】
? ? ?1. ?建立腳本文件:
? ? ? #vi incre-backup.sh
#執行mysqladmin執行刷新日志文件????????? /application/mysql/bin/mysqladmin?-uroot?-proot?flush-logs??? ????????? #DATADIR=/var/lib/mysql??? DATADIR=/application/data??#獲取數據文件路徑? BAKDIR=/backup????#獲取要備份的數據目標文件路徑 ????????? ###如果mysql?bin?log你做了特殊設置,請修改此處或者修改應用此變量的行:缺省取機器名,mysql缺省也是取機器名??? #HOSTNAME=`uname?-n`??? cd?$DATADIR???#轉入到/application/data?查詢mysql-bin.index文件 #FILELIST=`cat?$HOSTNAME-bin.index`??? ?FILELIST=`cat?mysql-bin.index`??? ? ##?COUNTER?number??? COUNTER=0??? for?file?in?$FILELIST??? do??? COUNTER=`expr?$COUNTER?+?1?`??? done??? ????????? NextNum=0??? for?file?in??$FILELIST??? do??? base=`basename?$file`??? NextNum=`expr?$NextNum?+?1`??? if?[?$NextNum?-eq?$COUNTER?]??? then echo?"skip?lastest" else dest=$BAKDIR/$base??? if(test?-e?$dest)??? then echo?"skip?exist?$base" else echo?"copying?$base" cp?$base?$BAKDIR??? fi??? fi??? done??? ????????? echo?"backup?mysql?binlog?ok"
2. 修改文件權限并執行
#?chmod?700?incre-backup.sh??//?只允許管理員運行此腳本 ??#./mysql-backup.sh????????????????//執行腳本,測試一次
【自動備份】
?自動備份是站在以上編寫腳本的基礎上,利用linux系統crontab命令,定時自動執行shell文件:
?#?crontab?–e 添加: 00?01?*?*?*/mysql-backup.sh????//?每天凌晨1點執行
【遠程局域網備份】
局域網備份利用NFS服務器實現數據在局域網共享的方式實現備份,利用在NFS服務器掛載的方式實現,就像我們平時共享文件,通過配置網絡連接,讓自己的文件得到共享。實現方式如下:
1. NFS服務器端安裝
a)安裝 NFS 服務器所需的軟件包:
??#?yuminstall?-y?nfs-utils ? ???????????b)編輯exports文件 ???????????#vim/etc/exports ???????????#/home/nfs/192.168.248.0/24(rw,sync)
? ? ? 同192.168.248.0/24一個網絡號的主機可以掛載NFS服務器上的/home/nfs/目錄到自己的文件系統中
rw表示可讀寫;sync表示同步寫
? ? ? ? ? ?c)啟動nfs服務
? ? ? ? ? ?#systemctlstart rpcbind.service
? ? ? ? ? ?#systemctlstart nfs-server.service
?
? ? ? ? ? ?d)確認NFS服務器啟動成功:
? ? ? ? ? ?#rpcinfo –p
? ? ? ? ? ?e)若沒有啟動成功,重新啟動rpcbind和nfs-server服務:
? ? ? ? ? ?#systemctl restart rpcbind.service
? ? ? ? ? ?#systemctl restart nfs-server.service
?
? ? ? ? ? ?客戶端安裝
? ? ? ? ? ? a)安裝nfs,啟動rpcbind服務
? ? ? ? ? ? # yuminstall -y nfs-utils
?
? ? ? ? ? ? b)先為rpcbind做開機啟動
? ? ? ? ? ? #systemctlenable rpcbind.service
?
? ? ? ? ? ? c)然后啟動rpcbind服務:
? ? ? ? ? ? systemctlstart rpcbind.service
?
? ? ? ? ? ? d)檢查NFS服務器端是否有共享目錄:
? ? ? ? ? ? #showmount -e 192.168.64.138
?
? ? ? ? ? ? e)在從機上使用mount掛載服務器端目錄到客戶端某個目錄下(這里將上面本地備份的文件路徑掛載如服務器里面):
? ? ? ? ? ? ?#mount -tnfs -o nolock,nfsvers=1,vers=3 192.168.64.138:/home/nfs /backup
?
? ? ? ? ?問題:mount.nfs: Stale NFS file handle
? ? ? ? ?解決方法:在client端把掛載文檔去掉重新掛載:
? ? ? ? ?# umount –a
? ? 【備份恢復】
? ? ? a.將gzip數據庫恢復到Mysq
? ? ? ?#gunzip
? ? ? b.二進制文件恢復數據庫:
? ? ? ?#/mysql/bin/mysqlbinlog–database=fox –start-date=”2013-01-22 5:00:00″? –stop-date=”2013-01-22 9:00:00″/mysql/data/mysql-bin.000001 | /mysql/bin/mysql -u root -p123456 –f
? ? ? database:指定具體的數據庫
? ? ? start-date:開始時間
? ? ? stop-date:結束時間
? ? ? /mysql/data/mysql-bin.000001:指定二進制文件
? ?【總結】 ? ?
基本的備份方法已經完成,但是我們要根據具體的應用場景采用不同的備份策略,保證安全的前提下又不消耗過多內存。
?以上就是Centos7 實現MySQL局域網備份(包含全備份,日志增量備份)的內容,更多相關內容請關注PHP中文網(www.php.cn)!