使用 InnoDB 和 MyISAM 表创建*一致* *在线* MySQL 备份

Jim*_*ein 6 mysql backup mysql-replication incremental-backup database-backup

我只是花了几个小时构建一个新的数据库服务器来替换mysqldump一个月前创建的文件中的2 个失败的服务器,然后使用我的服务器的 bin-logs 将其mysqldump更新。现在我有这个新的数据库服务器在线,并且已经运行了几天,我需要完成服务器设置并重新实施备份策略。

我需要将(至少)一个 MySQL Replication Slave 联机以供新服务器使用,并开始创建可用备份以备再次失败时使用。

在我进一步行动之前:

  • 在导入旧的逻辑备份并执行旧的 bin 日志之前,我忘记 (eep) 在新的 MySQL 服务器上启用 bin-log(我猜这归咎于当时醒着 24 小时)。

  • 我的数据由几个数据库组成,所有数据库都混合了 MyISAM 表和 InnoDB 表。

  • 此外,与在新服务器上启用 bin 日志相同,我忘记在导入所有数据之前打开该innodb-file-per-table选项my.cnf。二进制日志现在在新的 MySQL 服务器上启用,但 inno file per table 选项几乎是一个非修复,直到我可以导入另一个逻辑备份(我可能最终会启动第二个从站,并提升第一个从站掌握并放弃当前的主人 - 因为配置不是我需要的地方)。

所以,问题是:
我需要备份 MySQL 服务器,但我不能让新的 MySQL 服务器脱机。我需要继续进行写入,并在几乎没有停机时间的情况下提供读取服务。这种“几乎没有停机时间”的要求被定义为少于 10 分钟。我的数据目前在服务器上使用了大约 100GB 的空间(mysql 数据文件),逻辑备份大约是 50GB(这是很多索引......哈哈)。我不关心这个备份是合乎逻辑的,还是从 MySQL 数据目录中复制一份数据文件。在线后,我可以从从属设备创建逻辑备份。

而且,问题是:
您将如何创建这个所需的备份?我知道这并不容易,很多人会说这是不可能的。但我拒绝相信这是不可能的,必须有办法完成它。

关于服务器的说明:它运行的是 Ubuntu 10.04、MySQL 5.1.41,并且存储数据的文件系统是 ext3。服务器在 Rackspace Cloud 上运行,所以文件系统几乎“就是它本来的样子”,除非我可以重新分区根设备并使用另一个 FS(可能是 XFS?)重新分区来做快照。

我读过Perconas XtraBackup Tool,但它只适用于 InnoDB 表。他们有一个 MyISAM 工具,但我真的不明白它如何(或者即使它确实如此)与 XtraBackup 一起工作来创建一个完全一致的备份。

我读过,mysqlhotcopy但它只适用于 MyISAM 表。

显然我知道mysqldump,但(也很明显)这里的问题是创建一致的备份而不锁定整个数据库服务器输出整个 sql 备份文件所需的小时数。

HTT*_*500 4

关于 XtraBackup,或更具体地说 innobackupex,请查看此解释

摘抄:

innobackupex 程序还允许您备份 MyISAM 表和 .frm 文件,从而增加了更多便利和功能。它启动xtrabackup,等待完成复制文件,然后发出FLUSH TABLES WITH READ LOCK以防止进一步更改MySQL的数据并将所有MyISAM表刷新到磁盘。它持有该锁,复制 MyISAM 文件,然后释放该锁。

备份的MyISAM和InnoDB表最终会保持一致,因为在准备(恢复)过程之后,InnoDB的数据会前滚到备份完成的点,而不是回滚到备份开始的点。该时间点与执行 FLUSH TABLES WITH READ LOCK 的位置相匹配,因此 MyISAM 数据和准备好的 InnoDB 数据是同步的。

希望这可以帮助。

干杯