mysqldump
我刚刚花了几个小时从一个月前创建的文件构建了一个新的数据库服务器来替换 2 个故障服务器,然后使用我的服务器的 bin-logs 将其mysqldump
更新。现在我已经将这个新的数据库服务器上线,并且已经运行了几天,我需要完成服务器设置并重新实施备份策略。
我需要为新服务器带来(至少)一个 MySQL 复制从属服务器,以及在再次出现故障时开始创建可用的备份。
在我进一步讨论之前:
- 我忘记(eep)在导入旧的逻辑备份并执行旧的 bin 日志之前在新的 MySQL 服务器上启用 bin-log(我猜,这要归咎于当时已经醒了 24 小时)。
- 我的数据由几个数据库组成,所有数据库都混合了 MyISAM 表和 InnoDB 表。
- 此外,在启用新服务器上的 bin 日志时,我忘记
innodb-file-per-table
在my.cnf
导入所有数据之前打开该选项。现在,二进制日志已在新 MySQL 服务器上启用,但每个表的 inno 文件选项几乎无法修复,直到我可以导入另一个逻辑备份(我可能最终会启动第二个从服务器,并将第一个从服务器升级为主服务器,并放弃当前主服务器 - 因为配置不是我需要的)。
因此,问题是:
我需要备份 MySQL 服务器,但我无法将新的 MySQL 服务器脱机。我需要继续进行写入和读取,并且几乎不停机。此“几乎不停机”要求定义为少于 10 分钟。我的数据目前占用了服务器上大约 100GB 的空间(mysql 数据文件),逻辑备份大约为 50GB(索引很多……哈哈)。我不关心此备份是逻辑备份,还是 MySQL 数据目录中数据文件的副本。我可以在将其联机后从从属服务器创建逻辑备份。
问题是:
您将如何创建所需的备份?我知道这并不容易,很多人会说这是不可能的。但我拒绝相信这是不可能的,一定有办法做到这一点。
关于服务器的说明:它运行的是 Ubuntu 10.04、MySQL 5.1.41,存储数据的文件系统是 ext3。服务器在 Rackspace Cloud 上运行,因此文件系统基本“就是原来的样子”,除非我可以重新分区根设备并使用另一个 FS(可能是 XFS?)重新分区以创建快照。
我读过Perconas XtraBackup 工具但它只适用于 InnoDB 表。他们有一个 MyISAM 工具,但我真的不明白它如何(或者即使它可以)与 XtraBackup 配合使用来创建完全一致的备份。
我读过mysqlhotcopy
但它只适用于 MyISAM 表。
显然我知道mysqldump
,但(同样,显然)这里的问题是在不锁定整个数据库服务器的情况下创建一致的备份,而无需在输出整个 sql 备份文件所需的小时数内锁定整个数据库服务器。
答案1
关于 XtraBackup,或者更具体地说是 innobackupex,请查看此解释
摘抄:
innobackupex 程序还允许您备份 MyISAM 表和 .frm 文件,从而增加了更多便利性和功能。它启动 xtrabackup,等待文件复制完成,然后发出 FLUSH TABLES WITH READ LOCK 以防止对 MySQL 数据进行进一步更改并将所有 MyISAM 表刷新到磁盘。它持有此锁,复制 MyISAM 文件,然后释放锁。
备份的 MyISAM 和 InnoDB 表最终将彼此一致,因为在准备(恢复)过程之后,InnoDB 的数据将前滚到备份完成的时间点,而不是回滚到备份开始的时间点。此时间点与执行 FLUSH TABLES WITH READ LOCK 的时间点相匹配,因此 MyISAM 数据和准备的 InnoDB 数据是同步的。
希望这可以帮助。
干杯
答案2
此“几乎没有停机时间”要求定义为少于 10 分钟
好的,有两个明显的解决方案:
1) 设置镜像文件系统来保存 mysql 数据表。当您想要进行备份时,请关闭 mysqld,从镜像集中删除其中一个镜像,然后再次启动 mysqld,然后将刚从镜像中取出的驱动器重新安装到其他地方,然后复制原始文件或启动 mysld 的第二个实例(不同的端口、不同的文件路径)并在那里运行 mysqldump。完成后,关闭第二个 mysqld 实例并将驱动器放回镜像集(RAID 系统应该在驱动器作为镜像的一部分读取之前处理驱动器的更新,因此此时无需关闭第一个实例)。
2) 与 1 类似,但在应用程序级别实现镜像 - 将当前 mysqld 实例设置为主实例,将第二个实例配置为从实例。当您想要创建备份时,停止从属实例上的复制,执行备份,然后再次启动复制(0 停机时间)。
答案3
由于它是云基础设施,并且您无法在专用服务器上执行许多操作(例如重新分区/更改文件系统/使用 lvm),请从云服务提供商处寻找快照/备份解决方案。
通过快速谷歌搜索,我找到了这个:http://www.rackspace.com/cloud/blog/2010/06/16/introducing-cloud-servers-snapshots-to-cloud-files/
检查一下,这可能是解决您问题的最佳方法。