linux上 mysql資料庫備份與還原 (xtrabackup工具安裝與使用)
由於我安裝的mysql5.7是最新的版本,而一些老的xtrabackup版本已經不相容,所以在這裡我下載最新的xtrabackup工具
注:我這裡沒有應用全備和整備,而是用了部分備份,即一個數據庫的備份和恢復
環境: centos7
mysql 5.7
xtrabackup 2.4.9
遠端連線主機免密碼登入 ,
在執行伺服器上執行 ssh-keygen
一路回車,還是不要新增密碼的好,這時候可以注意一下公鑰,祕鑰儲存位置
把公鑰放到備份的伺服器上 ssh-copy-id
一 .安裝最新版的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
測試一下,你就知道.