十年網(wǎng)站開發(fā)經(jīng)驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
使用 MySQLdump 邏輯備份還原單個數(shù)據(jù)庫/表非常方便。但是,當數(shù)據(jù)量比較大的時候,對邏輯備份進行恢復(fù)的時間太長了。這個時候選擇物理備份的方式能大大縮短其中時間。

在土默特右旗等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計、成都做網(wǎng)站 網(wǎng)站設(shè)計制作按需網(wǎng)站策劃,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),營銷型網(wǎng)站,成都外貿(mào)網(wǎng)站建設(shè)公司,土默特右旗網(wǎng)站建設(shè)費用合理。
使用 xtrabackup 進行全庫物理備份還原非常簡單,無須對其表空間(tablespace)進行重新導(dǎo)入。
xtrabackup 全庫備份還原步驟:
創(chuàng)建備份
$ xtrabackup --backup --target-dir=/data/backups/
準備備份
$ xtrabackup --prepare --target-dir=/data/backups/
還原備份
$ xtrabackup --copy-back --target-dir=/data/backups/
$ chown -R mysql:mysql /var/lib/mysql
單庫/表備份還原步驟:
創(chuàng)建備份
xtrabackup --backup --datadir=/var/lib/mysql --target-dir=/data/backups/ --tables="^test[.]. * "
準備備份
$ xtrabackup --prepare --target-dir=/data/backups/
導(dǎo)出表結(jié)構(gòu)
$ mysqldump -d ^test > test.sql
導(dǎo)入表結(jié)構(gòu)
$ mysql test < test.sql
釋放表空間
#mysql -e "set foreign_key_checks=0;alter table test.* discard tablespace;"
復(fù)制文件到數(shù)據(jù)目錄
# cp -f /data/backups/*.cfg /data/backups/*.ibd /data/backups/*.frm /var/lib/mysql/test
修改屬主
# chown -R mysql:mysql /var/lib/mysql/test
導(dǎo)入表空間
# mysql -e "set foreign_key_checks=0;alter table test.* import tablespace;analyze table test.*;"
如果兩個實例都具有 GA(通用可用性)狀態(tài)并且它們的版本在同一個系列中,則從另一個 MySQL 服務(wù)器實例導(dǎo)入表空間文件將起作用。 否則,該文件必須已在與其導(dǎo)入的服務(wù)器實例相同的服務(wù)器實例上創(chuàng)建。
以下是一個通過 xtrabackup 對單庫進行備份還原的腳本
#!/bin/bash
# by geamover on 2017-12-26
# last updated on 2018-05-08
# This is for backup one DB to the orther DB on the same server by xtrabackup.
BK_DIR=/data/backup/`date +%F`/$1 # 備份路徑
MT=$BK_DIR/$1.sql # 元數(shù)據(jù)
DT=/data/mysql/data/ # 數(shù)據(jù)目錄
SK=/tmp/mysql.sock # mysql.sock
PW=123456 # mysql 密碼
if [ $# -ne 2 ]; then
echo -e "\e[1;31mUsage:\e[0m $0 source_DB destination_DB"
exit 1
fi
mysql -u root -p"$PW" -e "use $1;" &> /dev/null
if [ $? != 0 ]; then
echo "There is no database $1, please check!"
exit 1
fi
echo "It will drop databae $2, are you sure continue?"
echo -e "\e[1;31my\e[0m for continue, any orther for exit: "
read input
if [ $input == "y" ]; then
echo "Go on!"
else
echo "Cancled!"
exit
fi
if [ -d $BK_DIR ];then
rm -rf $BK_DIR/*
else mkdir -p $BK_DIR
fi
echo "From $1 to $2" | tee -a xtra.log
echo `date "+%F %T"`" Backing up databae $1 to $BK_DIR" | tee -a xtra.log
xtrabackup --backup -u root -p"$PW" --socket=$SK --databases="$1" --parallel=8 --target-dir=$BK_DIR &>> xtra.log
JD=`tail -n 1 xtra.log | awk '{print $3$4}'`
if [ $JD == "completedOK!" ]; then
echo `date "+%F %T"`" Back up databae $1 to $BK_DIR completed OK!"
else
echo `date "+%F %T"`" Back up databae $1 to $BK_DIR failed!"
exit 1
fi
echo `date "+%F %T"`" Prepare the backup."| tee -a xtra.log
xtrabackup --prepare --export --parallel=8 --target-dir=$BK_DIR &>> xtra.log
JD=`tail -n 1 xtra.log | awk '{print $3$4}'`
if [ $JD == "completedOK!" ]; then
echo `date "+%F %T"`" Prepare up databae $1 to $BK_DIR completed OK!"
else
echo `date "+%F %T"`" Prepare up databae $1 to $BK_DIR failed!"
exit 1
fi
echo `date "+%F %T"`" Dump the metadata of $1 to $MT."
# --set-gtid-purged=OFF 如果開啟 GTID 請指定該選項導(dǎo)出元數(shù)據(jù)
mysqldump -u root -p"$PW" -d $1 > $MT
echo "Drop database $2 if exists.Then create it and import metadata."
mysql -u root -p"$PW" -e "Drop database if exists $2;create database $2;use $2;source $MT;" &> /dev/null
for i in $(grep "CREATE TABLE" $MT | awk '{print $3}' | sed "s#\`##g")
do
mysql -u root -p"$PW" -e "set foreign_key_checks=0;alter table $2.$i discard tablespace;" &> /dev/null
cp -f $BK_DIR/$1/$i.cfg $BK_DIR/$1/$i.ibd $BK_DIR/$1/$i.frm $DT$2/
chown -R mysql:mysql $DT$2/
mysql -u root -p"$PW" -e "set foreign_key_checks=0;alter table $2.$i import tablespace;analyze table $2.$i;" &> /dev/null
done
echo `date "+%F %T"`" From $1 to $2 done." | tee -a xtra.log
# delete the backup
rm -rf $BK_DIR