xtarbackup mysql資料庫熱備指令碼

2021-08-21 23:59:10 字數 4282 閱讀 7461

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...