20120520 linux下mysql數據庫備份

文章摘自:http://hi.baidu.com/liuyingan02/blog/item/4fef92d66c1c590c622798b9.html
linux下mysql數據庫備份方案2012-03-24 20:26一、主從同步

可以參考http://kerry.blog.51cto.com/172631/110206

二、增量備份:

每天中午12點和晚上12點做一次全備,每隔一小時備份binlog,也就是增量備份,具體操作如下:

Linux下開啓binlog

/etc/my.cnf中的mysqld部分加入:

[mysqld]

log-bin=../logs/mysql-bin

max-binlog-size=50M

windows下開啓binlog

%mysql%/my.ini中的mysqld部分加入:

[mysqld]

log-bin =../logs/mysql-bin

max-binlog-size=50M

完整備份腳本 (網友提供)

如果數據庫數據量比較大,可以一天全備一次, 再每隔一小時增量備份一次;

#!/bin/sh

# mysql data backup script #

# use mysqldump --help,get more detail.

BakDir=/backup/mysql

LogFile=/backup/mysql/mysqlbak.log

DATE=`date +%Y%m%d`

echo " " >> $LogFile

echo " " >> $LogFile

echo "-------------------------------------------" >> $LogFile

echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile

echo "--------------------------" >> $LogFile

cd $BakDir

DumpFile=$DATE.sql

GZDumpFile=$DATE.sql.tgz

mysqldump --quick --all-databases --flush-logs

--delete-master-logs --lock-all-tables

> $DumpFile

echo "Dump Done" >> $LogFile

tar czvf $GZDumpFile $DumpFile >> $LogFile 2>&1

echo "[$GZDumpFile]Backup Success!" >> $LogFile

rm -f $DumpFile

#delete previous daily backup files:採用增量備份的文件,如果完整備份後,則刪除增量備份的文件.

cd $BakDir/daily

rm -f *

cd $BakDir

echo "Backup Done!"

echo "please Check $BakDir Directory!"

echo "copy it to your local disk or ftp to somewhere !!!"

ls -al $BakDir

上面的腳本把mysql備份到本地的/backup/mysql目錄,增量備份的文件放在/backup/mysql/daily目錄下.

增量備份

增量備份的數據量比較小,但是要在完整備份的基礎上操作

增量備份使用bin log,腳本如下:

#!/bin/sh

# mysql binlog backup script

/usr/bin/mysqladmin flush-logs

DATADIR=/var/lib/mysql

BAKDIR=/backup/mysql/daily

###如果你做了特殊設置,請修改此處或者修改應用此變量的行:缺省取機器名,mysql缺省也是取機器名

HOSTNAME=`uname -n`

cd $DATADIR

FILELIST=`cat $HOSTNAME-bin.index`

##計算行數,也就是文件數

COUNTER=0

for file in $FILELIST

do

COUNTER=`expr $COUNTER + 1 `

done

NextNum=0

for file in $FILELIST

do

base=`basename $file`

NextNum=`expr $NextNum + 1`

if [ $NextNum -eq $COUNTER ]

then

echo "skip lastest"

else

dest=$BAKDIR/$base

if(test -e $dest)

then

echo "skip exist $base"

else

echo "copying $base"

cp $base $BAKDIR

fi

fi

done

echo "backup mysql binlog ok"

增量備份腳本是備份前flush-logs,mysql會自動把內存中的日誌放到文件裏,然後生成一個新的日誌文件,所以我們只需要備份前面的幾個即可,也就是不備份最後一個.

因爲從上次備份到本次備份也可能會有多個日誌文件生成,所以要檢測文件,如果已經備份過,就不用備份了.

數據還原:

先還原最近的完全備份數據:

mysql -hhostname -uusername -ppassword databasename < backupfile.sql

再還原binlog :

./mysqlbinlog --start-date="2009-04-10 17:30:05" --stop-date="2009-04-10 17:41:28" /usr/local/mysql/data/mysql-bin.000002 |mysql -u root -p123456
 
 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章