2015-06-04 24 views
0

目前我正在用mysqlbackup进行备份。这将调用“FLUSH TABLES WITH READ LOCK”并提高锁定我的表的可能性,直到刷新完成并释放全局锁。所有InnoDB表上的Mysql备份环境

那么,有没有办法备份我的数据库,这真的很大,有超过100 GB的表,没有这个全局锁?

Something like mysqldump - 单笔交易,我读的是在小型数据库上很有用,但情况并非如此。 有没有类似于我的情况?

希望如此!

+2

你有没有尝试过其他的备份工具,如[Percona的XtraBackup](https://www.percona.com/software/percona -xtrabackup)? – Simon

+0

@Simon我正在研究这个功能,因为Lock Tables功能看起来很有前途。你知道这件事吗? – GoofKyko

+0

可以使用--no-lock与XtraBackup,如果你不关心binlog的位置,并且没有更改的非InnoDB表 – akuzminsky

回答

0

当你有大的表格时,Percona Xtrabackup是一个很好的选择。这主要是由于以下两点:

a)从逻辑备份(即:由mysqldump创建)恢复100GB表所用的时间过长,因为mysql必须重建索引并执行大量I/O处理,因为sql已被重播。

b)xtrabackup可以在完成第一次完整备份后进行增量备份,从而使磁盘空间方面的例行睡眠或小时数更快更小。

也就是说,要知道,因为xtrabackup复制/ lib/mysql目录中的所有相关文件,所以磁盘空间要求很高。如果您的磁盘上有200GB的数据库(即使某些表上有空的分配空间),您的备份大小将为200GB。

这与mysqldump的逻辑备份(可以重新创建数据,表结构,索引等的sql语句)相比较,这将占用很小的一部分空间。

了解更多关于Percona的xtrabackup在这里工作如何:使用InnoDB表使用https://www.percona.com/doc/percona-xtrabackup/LATEST/how_xtrabackup_works.html

mysqldump和--master数据和--single-transaction选项的组合是考虑一个不错的选择。它获取所有表上的全局读锁,但只读取足够长的时间以读取二进制日志坐标。通常情况下,这将非常快速,除非有非常重要的更新正在进行,在这种情况下,它可能会停止,直到更新完成。

这为您提供了一致的时间点备份,并且在初始读取锁定之后没有锁定。

下面是语法:

mysqldump --all-databases --master-data --single-transaction > all_databases.sql 

mysqldump --master-data --single-transaction my-database > my-database.sql 

备份一个数据库。

关于这方面更多的信息可以在dev.mysql.com网站在这里阅读:https://dev.mysql.com/doc/refman/5.7/en/mysqldump.html#option_mysqldump_single-transaction