在實際工作中,經常有一不小心誤刪除數據庫或表而後悔莫及的事件發生,這有沒有後悔藥可吃呢?今天介紹的延時備份就可以做到。
延時備份讓slave滯後於master一段時間,當你誤操作時只要立即停止slave的同步,即可輕松地從延時備份庫中找回你誤刪的數據。
下面介紹使用maatkit工具集中mk-slave-delay來實現延時備份。
1、 maatkit工具集簡介
官方:http://www.maatkit.org/doc/
maatkit是一個包括多個實用MySQL的工具集,使用它們,可以讓你的MySQL服務器使用起來更加方便也更加安全。maatkit是開源的軟件,你可以自由的改進軟件並將自己作出的改進版本向社會發行傳播。
maatkit工具目前包含26個不同功能的工具。
主要有:
mk-archiver,mk-audit,mk-find,mk-kill,mk-heartbeat,mk-query-digest,mk-parallel-dump,mk-parallel-restore,mk-show-grants ,mk-slave-delay,mk-slave-move,mk-slave-restart等工具。
顧名思義mk-slave-delay是延時備份工具。mk-slave-delay控制MySQL slave端,使它滯後於其master。
2、 maatkit安裝
下載:http://code.google.com/p/maatkit/
安裝步驟:
tar -zxf maatkit-<version>.tar.gz
cd maatkit-<version>
perl Makefile.PL
make install
###
# make install
….
Installing /usr/bin/mk-index-usage
Installing /usr/bin/mk-slave-delay
Installing /usr/bin/mk-archiver
Installing /usr/bin/mk-checksum-filter
Installing /usr/bin/mk-slave-prefetch
Installing /usr/bin/mk-log-player
Installing /usr/bin/mk-query-profiler
Installing /usr/bin/mk-slave-move
Installing /usr/bin/mk-query-digest
Installing /usr/bin/mk-show-grants
Installing /usr/bin/mk-parallel-restore
Installing /usr/bin/mk-profile-compact
Installing /usr/bin/mk-find
Installing /usr/bin/mk-table-checksum
Installing /usr/bin/mk-fifo-split
Installing /usr/bin/mk-error-log
Installing /usr/bin/mk-visual-explain
Installing /usr/bin/mk-variable-advisor
Installing /usr/bin/mk-kill
Installing /usr/bin/mk-heartbeat
Installing /usr/bin/mk-purge-logs
Installing /usr/bin/mk-query-advisor
Installing /usr/bin/mk-parallel-dump
Installing /usr/bin/mk-merge-mqd-results
Installing /usr/bin/mk-duplicate-key-checker
Installing /usr/bin/mk-upgrade
Installing /usr/bin/mk-deadlock-logger
Installing /usr/bin/mk-slave-restart
Installing /usr/bin/mk-slave-find
Installing /usr/bin/mk-loadavg
Installing /usr/bin/mk-table-sync
3、 文檔幫助
man /usr/bin/mk-slave-delay
/usr/bin/mk-slave-delay –help
4、 mk-slave-delay使用
示例:
mk-slave-delay –delay 1m –interval 15s –run-time 10m slavehost
延時運行10分鐘,slave滯後master1分鐘,15秒檢查下次延時情況。
詳細參數說明:
Usage: mk-slave-delay [OPTION...] SLAVE-HOST [MASTER-HOST]
Options:
–ask-pass Prompt for a password when connecting to MySQL
–charset=s -A Default character set
–config=A Read this comma-separated list of config files; if
specified, this must be the first option on the command
line
–[no]continue Continue replication normally on exit (default yes)
–daemonize Fork to the background and detach from the shell
–defaults-file=s -F Only read mysql options from the given file
–delay=m How far the slave should lag its master (default 1h).
Optional suffix s=seconds, m=minutes, h=hours, d=days;
if no suffix, s is used.
–help Show help and exit
–host=s -h Connect to host
–interval=m How frequently mk-slave-delay should check whether the
slave needs to be started or stopped (default 1m).
Optional suffix s=seconds, m=minutes, h=hours, d=days;
if no suffix, s is used.
–log=s Print all output to this file when daemonized
–password=s -p Password to use when connecting
–pid=s Create the given PID file when daemonized
–port=i -P Port number to use for connection
–quiet -q Don’t print informational messages about operation
–run-time=m How long mk-slave-delay should run before exiting.
Optional suffix s=seconds, m=minutes, h=hours, d=days;
if no suffix, s is used.
–set-vars=s Set these MySQL variables (default wait_timeout=10000)
–socket=s -S Socket file to use for connection
–use-master Get binlog positions from master, not slave
–user=s -u User for login if not current user
–version Show version and exit
5、 延時原理
mk-slave-delay 定時地starts /stops slave的sql_thread,以使其達到滯後master的目的。
2011-02-15T14:46:19 START SLAVE until master 2011-02-15T06:46:17 apollo226-bin.000290/779116659
2011-02-15T14:46:19 START SLAVE until master 2011-02-15T06:46:18 apollo226-bin.000290/781852897
6、 應用布署
腳本my_slave_delay.sh集中控制延時備份DB服務器.
服務器信息以host_ip port 的格式存在delay_host配置文件中。
head delay_host.txt
10.xx.xx.xxx 3601
usage1: sh my_slave_delay.sh
usage2: sh my_slave_delay.sh [delay_host] [delay] [interval]
my_slave_delay核心代碼:
delay_host=$1
delay_host=${delay_host:-”delay_host.txt”}
delay=$2
delay=${delay:-”8h”}
interval=$3
interval=${interval:-”2m”}
log_file=”my_slave_delay.log”
my_slave_delay(){
cat $delay_host |grep -v ‘#’ | while read host port
do
echo ” /usr/bin/mk-slave-delay -h $host -P $port –interval=$interval –delay=$delay &”
echo ” /usr/bin/mk-slave-delay -h $host -P $port –interval=$interval –delay=$delay &”>>$log_file
/usr/bin/mk-slave-delay -h $host -P $port –interval=$interval –delay=$delay &
sleep 1
done
}
### 取消延時
my_slave_start(){
echo “my_slave_start”
ps aux |grep “mk-slave-delay -h” -i |grep -v “grep” | awk ‘{print $2,$14,$16}’ | while read pid host port ;
do
echo “stop slave delay <$host:$port>”;
kill -9 $pid
echo “slave start sql_thread <$host:$port>”
echo “slave start sql_thread;” | mysql -h $host -P$port -N
done;
echo “my_slave_start done.”
}
7、 參考
http://www.maatkit.org/doc/mk-slave-delay.html