xtrabackup命令屬於物理備份,還原速度快,mysql自身帶著mysqldump屬於邏輯備份,適用於備份小型資料庫,,而且mysqldump備份得是二進位制檔案,還原較慢。
xtarbackup安裝過程如下:
yum install -y wget perl perl-devel perl-time-hires perl-dbd-mysql perl-digest-md5
wget
tar xvf percona-xtrabackup-2.1.9-744-linux-x86_64.tar.gz
cd percona-xtrabackup-2.1.9-linux-x86_64/
cd bin
cp innobackupex-1.5.1 /usr/bin/innobackupex
cp xtrabackup_55 /usr/bin/xtrabackup
cp xtrabackup_56 /usr/bin/
mkdir -p /data/backup/mysql/log
mkdir -p /data/backup/mysql/bin-log
mysql資料庫熱備指令碼如下:
#!/bin/bash
#mysql熱備指令碼
#備份策略:每週一進行完整備份,以後每一天在前一天的基礎上進行增量備份
#備份目錄
back_dir="/data/backup/mysql"
#備份資料庫資訊
host=""
dbuser=""
dbpasswd=""
#日誌檔案
back_log="$/log/mysql_back.log"
#week day
week_day=`date +%w`
#yesterday
yesterday=`date +%f -d "1 days ago"`
#日誌記錄函式
function log()
}#判斷當前日期,是周一進行全備份,其他時間進行增量備份
if [ $ -eq 1 ]; then
#完整備份
log "周$開始完全備份..."
innobackupex --defaults-file=/etc/my.cnf --host=$ --user=$ --password=$ $ &>> $
if [ $? -eq 0 ]; then
log "完全備份完畢."
else
log "完全備份出錯,請檢查."
exit 1
fielse
let dir_num=`find $ -type d -name "$*" | wc -l`
if [ $ -ne 1 ]; then
log "昨天增量目錄未找到或昨天備份目錄大於等於2個,請確認後再次備份."
exit 1
fiincremental_dir=`find $ -type d -name "$*"`
log "周$開始增量備份..."
#增量備份
innobackupex --host=$ --user=$ --password=$ --incremental $ --incremental-basedir=$ &>> $
if [ $? -eq 0 ]; then
log "增量備份成功."
else
log "備份失敗,請檢查日誌..."
exit 1
fifiexit $?
備份二進位制如下:
#!/bin/bash
# operating environment :centos release 6.8
# chkconfig: 2345 80 50
# auther:wangjiana
bin=$(cat xtrabackup_binlog_info | awk 'begin ')
log=$(cat xtrabackup_binlog_info | awk 'begin ')
/data/mysql/bin/mysqlbinlog -j $log /data/mysql/data/$bin > /data/backup/mysql/bin-log/mon.sql
還原指令碼如下:
#!/bin/bash
#mysql資料恢復指令碼
#back dir
back_dir='/data/backup/mysql'
#full back day
full_back_day=1
#today
today=`date +%f`
#week day
week_day=`date +%w`
#log file
recovery_log="$/log/mysql_recovery.log"
#log
function log()}
#find back dir
function finddir()
#all recovery
function allredo()
#incremental recovery
function incredo()
#real recovery
function recovery()
if [ $? -ne 0 ]; then
log "完整恢復準備出錯,請檢查..."
exit 1
filog "恢復資料完成,請檢查."
log "請手動恢復二進位制檔案資料."}
#判斷今日是否是周一
if [ $week_day -eq $ ]; then
finddir $
all_dir="$"
if [ ! -z "$" ]; then
allredo $all_dir
recovery $all_dir
else
log "未發現今日備份,恢復上週資料."
for i in "7 6 5 4 3 2 1"
doback_date=`date +%f -d "$ days ago"`
if [ $i -eq 7 ]; then
finddir $
all_dir="$"
allredo $
else
finddir $
dir_back=$
incredo $ $
fidone
recovery $
fielse
back_date=`date +%f -d "$(($-$)) days ago"`
finddir $
all_dir="$"
allredo $
let flag=$(($-1-$))
while [ $ -ge 0 ]
doincr_date=`date +%f -d "$ days ago"`
finddir $
incr_dir="$"
incredo $ $
let flag=`expr $flag - 1`
done
recovery $fi
exit 0
#恢復資料檔案的過程
:' 1、首先關閉mysql程式
2、刪除/data/mysql/data檔案資料,保證資料夾內容為空
3、執行恢復指令碼
4、修改許可權chown -r mysql.mysql /data/mysql/data
5、啟動mysql程式
如果報錯,報錯內容:
starting mysql...the server quit without updating pid file (/var/lib/mysql/mysql.pid).[失敗]
解決的過程各個方法:
1)、可能是/data/mysql/mysql.pid沒有寫許可權
2)、可能已經存在mysql程序
3)、有殘餘資料檔案影響服務啟動,刪除mysql-bin.index
4) 、skip-federated欄位的問題,注釋掉
5)、錯誤日誌目錄不存在,關閉seliunx
6、恢復二進位制檔案
mysql 進入後首先關閉二進位制檔案
set sql_log_bin = 0;
source /data/backup/mysql/bin-log/mon.sql
set sql_log_bin = 1 ;
'
sqlserver 資料庫集群與熱備
ms sql server資料庫伺服器可以說是應用範圍最廣的資料庫產品,並且越來越多地在大型和比較關鍵的應用系統中提供服務。當企業應用越來越複雜 資料量越來越大的時候,sql server資料庫要不停的進行處理 儲存 查詢的工作,這個時候企業就要考慮sql server資料庫伺服器的效能和速度及安全...
資料庫(一)雙機熱備
1 什麼是雙機熱備?為了確保資料庫產品的穩定性,很多資料庫擁有雙機熱備功能,按工作中的切換方式可分為 主 備方式 active standby方式 和雙主機方式 active active方式 主 備方式即指的是一台伺服器處於某種業務的啟用狀態 即active狀態 另一台伺服器處於該業務的備用狀態 ...
oracle 11g 手工熱備 資料庫
檢視資料庫是否處於歸檔模式,開啟資料庫熱備模式,拷貝作業系統資料庫資料檔案到備份目錄 sys prod archive log list database log mode archive mode automatic archival enabled oldest online log seque...