首頁  >  文章  >  資料庫  >  Centos7 實作MySQL區域網路備份(包含全備份,日誌增量備份)

Centos7 實作MySQL區域網路備份(包含全備份,日誌增量備份)

黄舟
黄舟原創
2017-02-28 13:20:081563瀏覽

         資料庫備份作業是非常重要的一步,而針對上線系統來說,沒有備份的資料庫是不安全的。本篇部落格文章透過查閱網路資料,實現了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"

      #vi incre-backup.sh
#

# chmod 700 incre-backup.sh  // 只允许管理员运行此脚本
  #./mysql-backup.sh                //执行脚本,测试一次

      #vi incre-backup.sh

#

 # crontab –e
添加:
00 01 * * */mysql-backup.sh    // 每天凌晨1点执行

2. 修改檔案權限並執行

  # yuminstall -y nfs-utils
 
           b)编辑exports文件
           #vim/etc/exports
           #/home/nfs/192.168.248.0/24(rw,sync)
【自動備份】

# 自動備份是站在以上編寫腳本的基礎上,利用linux系統

crontab指令
,定時自動執行shell檔:

rrreee
【遠端區域網路備份】


區域網路備份利用NFS伺服器實現資料在區域網路共享的方式實現備份,利用在NFS伺服器掛載的方式實現,就像我們平常共享文件,透過設定網路連接,讓自己的文件得到共享。實作方式如下:

1. NFS伺服器端安裝


#a)安裝NFS 伺服器所需的軟體套件:

rrreee

      同192.168.248.0/24一個網路號碼的主機可以掛載NFS伺服器上的/home/nfs/目錄到自己的檔案系統中

rw表示可讀寫;sync表示同步寫入

           c)啟動nfs服務

           #systemctlstart rpcbind.service

##tract      d)確認NFS伺服器啟動成功:

           #rpcinfo –p


##           e)若沒有啟動成功,請重新啟動與nfnfs-servercbind和nfnfd

           #systemctl restart rpcbind.service

           #systemctl restart nfs-server.service

## 

            a)安裝nfs,啟動rpcbind服務

            # yuminstall -y nfs-utils

## 

# #systemctlenable rpcbind.service

 


            c)然後啟動rpcbind服務:

        1 伺服器端是否有共用目錄:

            #showmount -e 192.168.64.138

 

    192.168.64.138

 

    192.下(這裡將上面

本地備份

的檔案路徑掛載如伺服器裡面):

             #mount -tnfs -o nolock,nfsvers=1,vers=3 192.168.64.138:/home /nfs /backup

 

         問題

:mount.nfs: Stale NFS file handle

        掉掛載:

         # umount –a    【備份恢復】

      a.將gzip資料庫還原為Mysq

#      a.將gzip資料庫還原至Mysq##op##g     a. mysql -u Username -p dbname

      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)!


#

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn