如何使用mysqldump增加500GB数据库的快速备份和还原?


10

有一个数据库,大小为500GB。数据库A中的表包含MyISAM和INNODB表。MyISAM表是主表,而Innodb表是主事务表。

使用mysql dump备份和还原需要花费很长时间或几天。

  • max_allowed_pa​​cket = 1G
  • foreign_key_checks = 0
  • auto_commit =关闭

1
我只想确保您在mysqldump实用程序中使用--opt。重新加载时可节省大量时间。没有它,mysqldump逐行创建sql文件。--opt可以:在启用所有创建选项的情况下添加锁,删除和重新创建,临时禁用键以进行快速重新加载,然后在写入完成后最后重新打开键以重建索引。它在插入中将几行连接在一起,以减少每个语句的文件大小和解析时间(最多减少70%),并启用--quick来减少运行时对转储DB的负载。减少80%的加载时间
ppostma1

Answers:


5

但是该链接还建议使用Percona的XtraBackup,它速度更快,不会对已在使用的表进行锁定,也不会浪费时间进行恢复。对于500GB的数据,我希望Percona XtraBackup快速高效,除非您希望将其转换为innodb_file_per_table模型(如果它不是来自现有数据库服务器的话)。以下链接说明了如何进行。

http://www.percona.com/doc/percona-xtrabackup/innobackupex/creating_a_backup_ibk.html


1
与Percona的Xtrabackup的问题是,mysqld的需要被停止以恢复数据库。
dr_

2

看看mydumper。它比mysqldump快很多:新的mydumper 0.6.1版本提供了性能和可用性功能

您可以从这里下载:https : //github.com/maxbube/mydumper

什么是mydumper?为什么?

  • 并行性(因此,速度)和性能(避免了昂贵的字符集转换例程,整体上高效的代码)
  • 易于管理输出(用于表的单独文件,转储元数据等,易于查看/解析数据)
  • 一致性-维护所有线程的快照,提供准确的主日志和从日志位置等
  • 可管理性-支持PCRE用于指定数据库和表的包含和排除

1

我认为问题是关于如何从mysqldump终止的转储文件中更快地恢复,而不是其他备份解决方案。

一种方法是,通过在架构中创建表组,并为每个组创建一个单独的数据库用户,并使用MySQL权限不允许仅使用一个数据库用户即可插入表。

这是一种经过验证的,快速的,几乎是并行的技术,但不能100%确定从500G恢复所需的时间。但是恕我直言,您需要并行处理。有关示例,请参见下面的链接。

从MySQL的SQL转储(mysqldump)快速并行还原


1

使用innobackupex尝试以下操作:

innobackupex --parallel=7 --rsync  /var/mysql/backup

您可以根据需要更改并行进程号。既然您提到了myisam表,那么“ rsync”参数将有助于加快这些表的备份。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.