我花了几个小时build立一个新的数据库服务器,从一个月前创build的mysqldump文件中取代了两个失败的服务器,然后使用我的服务器的bin-logs使mysqldump保持最新状态。 现在我已经有了这个新的数据库服务器,并且已经运行了几天,我需要完成服务器设置并重新实现一个备份策略。
我需要为新服务器联机(至less)一个MySQL Replication Slave,并且在事情再次失败时开始创build可用的备份。
在我进一步行动之前:
my.cnf的innodb-file-per-table选项。 现在在新的MySQL服务器上启用了二进制日志,但是每个表的inno文件选项几乎是一个无法解决的问题,直到我可以导入另一个逻辑备份(我可能最终会启动第二个从服务器,并提升第一个从服务器掌握和放弃当前的主 – 因为configuration不是我需要它的地方)。 所以,问题是:
我需要备份MySQL服务器,但是我不能让新的MySQL服务器脱机。 我需要继续写作,并提供几乎没有停机时间的阅读。 这个“小到没有停机”的要求被定义为不到10分钟。 我的数据目前在服务器上使用大约100GB的空间(mysql数据文件),而逻辑备份大概是50GB(这是很多的索引..哈哈)。 我不在乎这个备份是合乎逻辑的,还是从MySQL数据目录拷贝数据文件。 我可以创build一个逻辑备份从奴隶后,我得到它在线。
而问题是:
你将如何创build这个需要的备份? 我知道这不容易,很多人会说这是不可能的。 但我拒绝相信这是不可能的,必须有办法做到这一点。
有关服务器的说明:它运行Ubuntu 10.04,MySQL 5.1.41,数据存储在其上的文件系统是ext3。 服务器在Rackspace Cloud上运行,所以文件系统几乎“现在就是这样”,除非我可以重新分区根设备,并用另一个FS(XFS也许?)重新分区来做快照。
我已经阅读了Perconas XtraBackup Tool,但它只适用于InnoDB表。 他们有一个MyISAM工具,但我真的不明白它如何(或者甚至是否与XtraBackup一起工作)创build一个完全一致的备份。
我已经阅读了关于mysqlhotcopy但它只适用于MyISAM表。
很明显,我知道mysqldump ,但(显然),这里的问题是创build一个一致的备份,而不locking整个数据库服务器的小时数,它将需要输出整个sql备份文件。
关于XtraBackup,或更具体的innobackupex,请看看这个解释
摘抄:
innobackupex程序还允许您备份MyISAM表和.frm文件,从而增加了更多便利和function。 它启动xtrabackup,一直等到它完成复制文件,然后发出FLUSH TABLES WITH READ LOCK来防止对MySQL数据的进一步更改,并将所有MyISAM表清空到磁盘。 它拥有这个锁,复制MyISAM文件,然后释放锁。
备份的MyISAM和InnoDB表最终将保持一致,因为在准备(恢复)过程之后,InnoDB的数据会前滚到备份完成点,而不是回滚到启动点。 此时间点与FLUSH TABLES WITH READ LOCK相匹配,因此MyISAM数据与准备好的InnoDB数据同步。
希望这可以帮助。
干杯
这个“小到没有停机”的要求被定义为不到10分钟
OK 2明显的解决scheme:
1)build立一个镜像文件系统来保存MySQL数据表。 当你想做一个备份时,closuresmysqld,从集合中删除一个镜像,然后重新启动mysqld,然后重新挂载你刚从镜像其他地方取出的驱动器,然后复制原始文件或启动build立mysld的第二个实例(不同的端口,不同的文件path)并在那里运行mysqldump。 完成后,closures第二个mysqld实例,并将该驱动器放回镜像集(RAID系统应该在读取镜像之前更新驱动器,作为镜像的prt,因此不需要closures第一个实例)。
2)类似于1,但在应用程序级别实现镜像 – 将当前的mysqld实例设置为主,将第二个实例configuration为从属。 当你想创build一个备份,停止从属的复制,做备份,然后再次开始复制(0宕机)。
由于它是云基础架构,您不能在专用服务器上做很多事情(如重新分区/更改文件系统/使用lvm),请从您的云服务提供商处寻找快照/备份解决scheme。
快速谷歌search指向我: http : //www.rackspace.com/cloud/blog/2010/06/16/introducing-cloud-servers-snapshots-to-cloud-files/
检查一下,这可能是你的问题的最佳解决scheme。