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/ �Coverwrite-tables
mydumper主要参数:
�Chost, -h 连接的mysql服务器
�Cuser, -u 用户备份的连接用户
�Cpassword, -p
�Cport, -P 连接端口
�Csocket, -S 连接socket文件
�Cdatabase, -B 需要备份的数据库
�Ctable-list, -T 需要备份的表,用,分隔
�Coutputdir, -o 输出的目录
�Cbuild-empty-files ,-e 如果表数据是空,还是产生一个空文件,默认无数据则只有表结构文件
�Cregex, -x 支持正则表达式,如mydumper �Cregex ’^(?!(mysql|test))’
�Cignore-engines, -i 忽略的存储引擎
�Cno-schemas, -m 不导出表结构
�Clong-query-guard 长查询,默认60s,超过则通过mydumper
�Ckill-long-queries, -k 可以设置kill长查询
�Cverbose, -v 0 = silent, 1 = errors, 2 = warnings, 3 = info,默认是2
�Cbinlogs, -b 导出binlog
�Cdaemon, -D 启用守护进程模式
�Csnapshot-interval, -I dump快照间隔时间,默认60s
�Clogfile, -L mysqldumper日志输出,一般在Daemon模式下使用
myloader 大多参数和mydumper一样
�Cdirectory, -d 要还原的数据目录
�Coverwrite-tables, -o Drop any existing tables when restoring schemas
myloader 大多参数和mydumper一样
�Cdirectory, -d 要还原的数据目录
�Coverwrite-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