王牌执照,重庆网上订购汽车票,艺考生高考
mysqldump:其特征之一是在处理过程中需要对列表加以锁定,因此如果我们需要在工作时段执行备份工作,那么会引起dml阻塞。但一般现在的mysql都有主从,备份也大部分在从上进行,所以锁的问题可以不用考虑。这样,mydumper能更好的完成备份任务。
mydumper主要特性:是一个针对mysql和drizzle的高性能多线程备份和恢复工具,开发人员主要来自mysql,facebook,skysql公司。
下载安装:环境:ubuntu 12.04
安装:解压后,有安装说明
cmake warning at docs/cmakelists.txt:9 (message):
unable to find sphinx documentation generator
-- ------------------------------------------------
-- mysql_config = /usr/bin/mysql_config
-- cmake_install_prefix = /usr/local
-- build_docs = on
-- run_cppcheck = off
-- change a values with: cmake -d<variable>=<value>
-- ------------------------------------------------
--
-- configuring done
-- generating done
-- build files have been written to: /root/mydumper-0.5.2
root@dd:~/mydumper-0.5.2# make
scanning dependencies of target mydumper
[ 20%] building c object cmakefiles/mydumper.dir/mydumper.c.o
[ 40%] building c object cmakefiles/mydumper.dir/binlog.c.o
[ 60%] building c object cmakefiles/mydumper.dir/server_detect.c.o
[ 80%] building c object cmakefiles/mydumper.dir/g_unix_signal.c.o
linking c executable mydumper
[ 80%] built target mydumper
scanning dependencies of target myloader
[100%] building c object cmakefiles/myloader.dir/myloader.c.o
linking c executable myloader
[100%] built target myloader
生成2个工具:mydumper(备份),myloader(导入)
参数:
mydumper:
help options:
-?, --help show help options
application options:
-b, --database 需要备份的库
-t, --tables-list 需要备份的表,用逗号分隔
-o, --outputdir 输出文件的目录
-s, --statement-size 生成插入语句的字节数, 默认 1000000
-r, --rows 分裂成很多行块表
-c, --compress 压缩输出文件
-e, --build-empty-files 即使表没有数据,还是产生一个空文件
-x, --regex 正则表达式: 'db.table'
-i, --ignore-engines 忽略的存储引擎,用逗号分隔
-m, --no-schemas 不导出表结构
-k, --no-locks 不执行共享读锁 警告:这将导致不一致的备份
-l, --long-query-guard 设置长查询时间,默认60秒
--kill-long-queries kill掉长时间执行的查询
-b, --binlogs 导出binlog
-d, --daemon 启用守护进程模式
-i, --snapshot-interval dump快照间隔时间,默认60s,需要在daemon模式下
-l, --logfile 日志文件
-h, --host the host to connect to
-u, --user username with privileges to run the dump
-p, --password user password
-p, --port tcp/ip port to connect to
-s, --socket unix domain socket file to use for connection
-t, --threads 使用的线程数,默认4
-c, --compress-protocol 在mysql连接上使用压缩协议
-v, --version show the program version and exit
-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
myloader:
help options:
-?, --help show help options
application options:
-d, --directory 备份文件所在的目录
-q, --queries-per-transaction 每次执行查询数量, 默认1000
-o, --overwrite-tables 如果表存在则先删除。这里注意下,使用该参数,需要备份时候要备份表结构,不然会出问题
-b, --database 需要还原的数据库
-e, --enable-binlog 启用二进制恢复数据
-h, --host the host to connect to
-u, --user username with privileges to run the dump
-p, --password user password
-p, --port tcp/ip port to connect to
-s, --socket unix domain socket file to use for connection
-t, --threads 使用的线程数量,默认4
-c, --compress-protocol 连接上使用压缩协议
-v, --version show the program version and exit
-v, --verbose 更多输出, 0 = silent, 1 = errors, 2 = warnings, 3 = info, default 2
测试:测试基本用法
1:备份
备份analyzedxy数据库到/home/zhoujy/bak/ 目录中,查看是否多线程:
上面显示确实是4个线程(默认)在备份,查看备份文件:
分析:mydumper把数据和表结构分开备份,并且把二进制日志备份出来单独放到一个文件中。
2:还原:还原到另一台服务器,先建立要还原的数据库(chushihua)
和备份一样查看是否多线程:
上面显示确实是4个线程(默认)在还原。
进一步测试:测试一些常用的参数
1):备份指定表(-t),并且不要导出表结构(-m)
zhoujy@zhoujy:~/bak$ ls -lh
-rw-rw-r-- 1 zhoujy zhoujy 3.4k 2013-11-14 20:57 test.a.sql
-rw-rw-r-- 1 zhoujy zhoujy 1.6m 2013-11-14 20:57 test.b.sql
-rw-rw-r-- 1 zhoujy zhoujy 7.8m 2013-11-14 20:57 test.c.sql
-rw-rw-r-- 1 zhoujy zhoujy 1.7m 2013-11-14 20:57 test.d.sql
-rw-rw-r-- 1 zhoujy zhoujy 303k 2013-11-14 20:57 test.e.sql
-rw-rw-r-- 1 zhoujy zhoujy 517k 2013-11-14 20:57 test.f.sql
-rw-rw-r-- 1 zhoujy zhoujy 646k 2013-11-14 20:57 test.g.sql
-rw-rw-r-- 1 zhoujy zhoujy 394k 2013-11-14 20:57 test.h.sql
-rw-rw-r-- 1 zhoujy zhoujy 34k 2013-11-14 20:57 test.i.sql
-rw-rw-r-- 1 zhoujy zhoujy 75 2013-11-14 20:57 metadata
2)压缩备份文件(-c),备份binlog(-b),正则表达式备份表(-x)
drwx------ 2 zhoujy zhoujy 4.0k 2013-11-14 21:16 binlog_snapshot
-rw-rw-r-- 1 zhoujy zhoujy 133 2013-11-14 21:16 metadata
-rw-rw-r-- 1 zhoujy zhoujy 94k 2013-11-14 21:16 test.tmp_0808.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 75k 2013-11-14 21:16 test.tmp_0809.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 25k 2013-11-14 21:16 test.tmp_0813.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 208k 2013-11-14 21:16 test.tmp_0826.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 915 2013-11-14 21:16 test.tmp_0827.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 901 2013-11-14 21:16 test.tmp_0912.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 2.1k 2013-11-14 21:16 test.tmp_0916.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 622k 2013-11-14 21:16 test.tmp_0918_a.sql.gz
-rw-rw-r-- 1 zhoujy zhoujy 28m 2013-11-14 21:16 test.tmp_0918_ff.sql.gz
如上所示,备份文件已经是压缩的了(用gzip -d 解压),并且备份出了tmp.*匹配出来的所有表,二进制日志也被备份到了binlog_snapshot文件中,并且也是被压缩的。
3)还原,表存在先删除(-o):这里需要注意,使用该参数,备份目录里面需要有表结构的备份文件。
更多的参数效果,请自己测试。
最后测试:用mysqldump和mydumper进行对比测试。
backup = os.system('')
def mysqldump_data():
t1 = time.time()
backup = os.system('mysqldump --no-defaults -uroot -p123456 -h192.168.200.25 --default-character-set=utf8 test > /home/zhoujy/test.bak')
t2 = time.time()
t = round(t2-t1)
print "mysqldump cost time %s" %t
def mydumper_data():
t1 = time.time()
backup = os.system('mydumper -u root -p 123456 -h 192.168.200.25 -p 3306 -b test -o /home/zhoujy/bak/')
t2 = time.time()
t = round(t2-t1)
print "mydumper cost time %s" %t
if __name__ =='__main__':
mysqldump_data()
mydumper_data()
测试了2个数据库:
1:
mysqldump cost time :162s
mydumper cost time :61s
2:
mysqldump cost time :483s
mydumper cost time :337s
从上面的时间来看,mydumper 确实提升了备份数据,还原也同理。
总结:
从上面的测试分析中看出mydumper可以提升备份还原的效率,提升多少受限于磁盘的io能力,在使用前做好磁盘io的评估,大家可以尝试使用该工具。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
网友评论