【问题标题】:Mysql Backup on all InnoDB tables environment所有 InnoDB 表环境上的 Mysql 备份
【发布时间】:2015-06-04 10:36:35
【问题描述】:

目前我正在使用 mysqlbackup 进行备份。这将调用“带读锁的刷新表”并增加锁定我的表的可能性,直到刷新完成并释放全局锁。

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

类似 mysqldump --single-transaction 的东西,我读到的在小型数据库上很有用,但事实并非如此。 是否有类似的适用于我的情况?

希望如此!

【问题讨论】:

  • 您是否尝试过其他备份工具,例如Percona XtraBackup
  • @Simon 我现在正在研究这一点,因为 Lock Tables 功能看起来很有希望。你知道吗?
  • 如果您不关心 binlog 位置并且没有更改的非 InnoDB 表,可以将 --no-lock 与 XtraBackup 一起使用
  • 我会尽量减少 MyISAM 表的数量和大小
  • 如果没有 myisam 表,那么服务器将被锁定很短的时间。但是,如果您仍然不能接受,那么配置一个从站并从中获取备份

标签: mysql innodb mysql-backup


【解决方案1】:

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

a) 从逻辑备份(即:由 mysqldump 创建)恢复 100GB 表所花费的时间会过多,因为 mysql 在重放 sql 时必须重建索引并进行大量 I/O 处理。

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

也就是说,请注意,由于 xtrabackup 会复制 /lib/mysql 目录中的所有相关文件,因此磁盘空间要求非常高。如果您有一个在磁盘上分配了 200GB 的数据库(即使某些表上有一些空的分配空间),您的备份大小将是 200GB。

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

在此处了解有关 Percona xtrabackup 工作原理的更多信息:https://www.percona.com/doc/percona-xtrabackup/LATEST/how_xtrabackup_works.html

mysqldump 与 innodb 表一起使用以及 --master-data 和 --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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-24
    • 1970-01-01
    • 2011-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多