mysql異地增量備份: 1.#!/bin/sh 2. 3.#MySQL Info 4.sqluser=root 5.sqlpsw=root 6. 7./usr/bin/mysqladmin -u$sqluser -p$sqlpsw flush-logs –default-character-set=GBK 8. 9.DATADIR=/data/mysql 10.BAKDIR=/home/backup/mysql/daily 11.TEMPDIR=/home/b
MySQL異地增量備份:
1.#!/bin/sh?
2.
3.#MySQL Info??
4.sqluser=root??
5.sqlpsw=root??
6.?
7./usr/bin/mysqladmin -u$sqluser -p$sqlpsw flush-logs –default-character-set=GBK?? 8.?
9.DATADIR=/data/mysql??
10.BAKDIR=/home/backup/mysql/daily??
11.TEMPDIR=/home/backup/mysql/temp??
12.?
13.BINLOGNAME=’mysql-bin’? 14.cd $DATADIR??
15.FILELIST=$(cat $BINLOGNAME.index | cut -c3-)? 16.
17.## COUNTER number??
18.COUNTER=0??
19.for file in $FILELIST?? 20.do? 21.COUNTER=$(expr $COUNTER + 1)??
22.done??
23.?
24.NextNum=0??
25.for file in $FILELIST?? 26.do? 27.NextNum=$(expr $NextNum + 1)??
28.if test “$NextNum” = “$COUNTER”? 29.then??
30.echo “skip lastest”? 31.else? 32.dest=$BAKDIR/$file??
33.if test -e $dest?? 34.then??
35.echo “skip exist $dest”? 36.else? 37.cp $file $TEMPDIR??
38.fi??
39.fi??
40.done??
41.echo “backup mysql binlog ok”? 42.?
43.sleep 2s??
44.?
45.cd $TEMPDIR??
46.tarname=binlog$(date +%y%m%d).tar.gz??
47.tar czf $tarname ./mysql-bin*??
48.?
49.sleep 1s? 50.
51.#ftp Info??
52.ftphost=111.111.11.11??
53.ftpname=xxx??
54.ftppsw=psw??
55.?
56.cd $TEMPDIR??
57.?
58.ftp -i -n 59.open $ftphost??
60.user $ftpname $ftppsw??
61.type binary??
62.put $tarname??
63.close??
64.bye??
65.!??
66.sleep 10s??
67.?
68.echo “end upload”? 69.?
70.cd $TEMPDIR??
71.mv $BINLOGNAME* $BAKDIR??
72.rm -r $tarname??
73.?
74.echo “end”? 說明:
mysqladmin -u$sqluser -p$sqlpsw flush-logs:mysql自動把內存中的日志放到日志文件binlog的最后一個文件里,并生成一個空的新日志文件,之后只需要備份前面的幾個即可,最后一個因為是剛生成的,并且是空的,所以不需備份。
關于binlog可參考: http://www.linuxidc.com/Linux/2012-09/70815.htm
大概思路:
把datadir和bakdir目錄中的binlog進行對比,如bakdir中沒有,且該binlog不是最后一個,則把該binlog復制到tempdir中;這樣tempdir中的binlog都是新增的binlog。之后把tempdir中的binlog進行打包壓縮,ftp到另一個服務器上。