Mydumper是一個針對MySQL和Drizzle的高性能多線程備份和恢復工具。開發人員分別來自MySQL,Facebook,SkySQL公司。目前已經在有一些大型產品業務上測試並使用了Mydumper。分穩定版和開發版兩種,目前最新穩定版是0.2.3和最新開發版是0.5.1。恢復時可使用myloader工具。
Mydumper主要特性:
輕量級C語言寫的代碼
比mysqldump接近快10倍的速度
事務性和非事務性表一致的快照(適用於0.22+)
快速的文件壓縮(File compression on-the-fly)
支持導出binlog
多線程恢復( 0.2.1+)
可以用守護進程的工作方式,定時的掃描和輸出連續的二進制日誌
開源 (GNU GPLv3)
#yum install glib2-devel mysql-devel zlib-devel pcre-devel
#apt-get install libglib2.0-dev libmysqlclient15-dev zlib1g-dev libpcre3-dev //Ubuntu/Debian用戶
#tar -xzvf mydumper-0.5.1.tar.gz
#cd mydumper-0.5.1
#cmake .
#make;make install
# mydumper -u root -p 123456 -P 3307 -B test_innodb -o /backup/database/export-20111119
[root@localhost export-20111119]# ls
metadata test_innodb.t_innodb-schema.sql test_innodb.t_innodb.sql
[root@localhost export-20111119]# cat metadata
Started dump at: 2011-11-19 16:55:28
SHOW MASTER STATUS:
Log: mysql-bin.000019
Pos: 106
Finished dump at: 2011-11-19 16:55:28
# myloader -u root -p 123456 -P 3307 -d /backup/database/export-20111119/ –overwrite-tables
mydumper主要參數:
–host, -h 連接的mysql服務器
–user, -u 用戶備份的連接用戶
–password, -p
–port, -P 連接端口
–socket, -S 連接socket文件
–database, -B 需要備份的數據庫
–table-list, -T 需要備份的表,用,分隔
–outputdir, -o 輸出的目錄
–build-empty-files ,-e 如果表數據是空,還是產生一個空文件,默認無數據則只有表結構文件
–regex, -x 支持正則表達式,如mydumper –regex ’^(?!(mysql|test))’
–ignore-engines, -i 忽略的存儲引擎
–no-schemas, -m 不導出表結構
–long-query-guard 長查詢,默認60s,超過則通過mydumper
–kill-long-queries, -k 可以設置kill長查詢
–verbose, -v 0 = silent, 1 = errors, 2 = warnings, 3 = info,默認是2
–binlogs, -b 導出binlog
–daemon, -D 啓用守護進程模式
–snapshot-interval, -I dump快照間隔時間,默認60s
–logfile, -L mysqldumper日誌輸出,一般在Daemon模式下使用
myloader 大多參數和mydumper一樣
–directory, -d 要還原的數據目錄
–overwrite-tables, -o Drop any existing tables when restoring schemas
myloader 大多參數和mydumper一樣
–directory, -d 要還原的數據目錄
–overwrite-tables, -o Drop any existing tables when restoring schemas
1、備份數據庫;
2、加上了過期代碼,保留了7天的備份,以免硬盤被撐爆了,有需求的請自行增減時間;
3、通過對比可得知數據庫備份使用了多長時間。
#!/bin/bash
#This is a ShellScript for auto DB-Backup
#201204 by szy
#Setting
DBName=test
DBUser=root
DBPasswd=password
BackupPath=/home/backup/db
LogFile=/home/backup/log/DBbackup.log
NewFile="$BackupPath"/"$DBName1"/$(date +%y%m%d)
OldFile="$BackupPath"/"$DBName1"/$(date +%y%m%d --date='7 days ago')
echo "----------------Backup Start-------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "-----------------------------------------------------" >> $LogFile
#Delect Old File
if [ -d $OldFile ]
then
rm -rf $OldFile >> $LogFile 2>&1
echo "----------[$OldFile]Delete Old File Success!----------" >> $LogFile
else
echo "----------[$DBName]No Old Backup File!-------------" >> $LogFile
fi
#Backup
echo "----------------------$DBName----------------------" >> $LogFile
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
if [ -d $NewFile ]
then
echo "----------[$NewFile]The Backup File is exists,Can't Backup!----------" >> $LogFile
else
mkdir $NewFile
mydumper --kill-long-queries -u $DBUser -B $DBName -p $DBPasswd -v 2 -c -t 8 --outputdir=$NewFile
fi
echo $(date +"%y-%m-%d %H:%M:%S") >> $LogFile
echo "--------------This ShellScript End-------------------" >> $LogFile