Centos7 實現MySQL局域網備份(包含全備份,日志增量備份)

? ? ? ? ?數據庫備份操作是非常重要的一步,針對上線系統來說,沒有備份的數據庫是不安全的。本博文通過查閱網上資料,實現了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)!

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享