1. 程式人生 > >linux上 mysql資料庫備份與還原 (xtrabackup工具安裝與使用)

linux上 mysql資料庫備份與還原 (xtrabackup工具安裝與使用)

由於我安裝的mysql5.7是最新的版本,而一些老的xtrabackup版本已經不相容,所以在這裡我下載最新的xtrabackup工具

注:我這裡沒有應用全備和整備,而是用了部分備份,即一個數據庫的備份和恢復

環境:  centos7

           mysql 5.7

          xtrabackup 2.4.9

         遠端連線主機免密碼登入 ,            在執行伺服器上執行   ssh-keygen          一路回車,還是不要新增密碼的好,這時候可以注意一下公鑰,祕鑰儲存位置            把公鑰放到備份的伺服器上 ssh-copy-id

[email protected]           (注意:這兩臺linux必須能ping通) 

一 .安裝最新版的xtrabackup

wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.9/binary/tarball/percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz

tar zxvf percona-xtrabackup-2.4.9-Linux-x86_64.tar.gz

cd percona-xtrabackup-2.4.9-Linux-x86_64

cp bin/innobackupex /usr/bin

cp bin/xtrabackup* /usr/bin

yum install perl-DBI -y

yum install perl-DBD-MySQL -y

yum install perl-Time-HiRes -y

yum install perl-IO-Socket-SSL –y

yum install perl-TermReadKey.x86_64 –y

yum install -y perl-Digest-MD5

 wget https://www.percona.com/downloads/percona-toolkit/2.2.16/RPM/percona-toolkit-2.2.16-1.noarch.rpm

rpm -ivh percona-toolkit-2.2.16-1.noarch.rpm

 安裝測試是否成功  xtrabackup -version

二.在執行伺服器上.建立shell指令碼,存放備份資料庫相關內容

   cd /home

   vim mysql_data.sh

   新增如下內容:

# vim  mysql_xtr.sh
#!/bin/sh 
INNOBACKUPEX_PATH=innobackupex  #INNOBACKUPEX的命令
INNOBACKUPEXFULL=/usr/bin/$INNOBACKUPEX_PATH  #INNOBACKUPEX的命令路徑,自己查詢
MY_CNF=/etc/my.cnf   #mysql的配置檔案,自己查詢
MYSQL=/usr/bin/mysql
BACKUP_DIR=/home/longrang # 備份的主目錄
DB_NAME=database        #要備份的資料庫名字
DB_USER=root          #資料庫登入名
DB_PASS=root           #資料庫登陸密碼
DAYS=5                #每次備份儲存的時間
# logfiledate=backup.`date +%Y%m%d%H%M`.txt 日誌檔案
DATE=`date +%Y%m%d%H%M`        #當前時間
TAR_SQL="mysqldata_bak_$DATE.tar.gz"
Host=192.168.1.1    #遠端備份主機地址
User=root      #遠端備份主機使用者
# 檢查執行環境

if [ ! -x $INNOBACKUPEXFULL ]; then
 error "$INNOBACKUPEXFULL未安裝或未連結到/usr/bin."
fi

$INNOBACKUPEXFULL --defaults-file=$MY_CNF  --user=$DB_USER --password=$DB_PASS  --databases=$DB_NAME --stream=tar /. | ssh 
[email protected]
$Host \ "gzip >$BACKUP_DIR/$TAR_SQL"

   3.將指令碼檔案設定成可執行檔案型別

      chmod +x /home/mysql_xtr.sh

     可測試指令碼是否能執行,兩種方法:  

            1.  cd   /home                 ./mysql_xtr.sh

             2. bash –x /home/mysql_xtr.sh

     4.新增計劃任務(每天一點三十備份)

             crontab -e

             30 1 * * *  /home/mysql_xtr.sh   

      5.重啟定時服務

        service crond restart

三 在備份伺服器上

     1.在備份伺服器上建立備份目錄  (此測試生成目錄放在home下)          cd  /home

        mkdir  longrang           注:此路徑必須和上面指令碼中的備份路徑一致

       2.在home目錄下建立刪除五天外的備份檔案指令碼

        vim dele.sh

       新增如下內容:

DAYS=5
BACKUP_DIR=/home/longrang    #(這個檔案和上面備份的檔案一致)
#刪除過期的檔案
find $BACKUP_DIR -name "mysqldata_bak*" -type f -mtime +$DAYS -exec rm {} \;        #刪>除5天前的備份檔案(注意:{} \;中間有空格)

    3. 將指令碼檔案設定成可執行檔案型別:

        chmod +x /home/dele.sh

     4. 檢測是否已安裝crontab

          執行 crontab -e 命令如果報 command not found,就表明沒有安裝.

           安裝命令 #   yum install -y vixie-cron

      5.新增計劃任務   (每天一點三十執行)

         crontab -e 

        30 1 * * *  /home/dele.sh

       6.重啟定時任務

         service crond restart

     四 xtrabackup 部分備份恢復

        在備份主機上操作

        1.先解壓縮(必須帶i命令)到指定資料夾

        tar  ixvf  xtra.tar  -C  /home/longlong

        2.準備部分備份

        innobackupex --apply-log --export /home/longlong

       3.恢復部分備份

            1. 停止MySQL:service mysqld stop             2. 將第二步準備過的檔案拷貝到/var/lib/mysql下:\cp /home/longlong/* /var/lib/mysql -rf             3. 給檔案賦權:chown -R mysql:mysql /var/lib/mysql/             4 啟動MySQL:service mysqld start

      測試一下,你就知道.