现在我可以使用mysqldump进行备份。 但是我必须取下networking服务器,大约需要5分钟的时间做备份。 如果我不把networking服务器取下来,这将需要永远的时间,永远不会完成+在备份过程中网站变得不可访问。
有一个更快/更好的方法来备份我的22 GB和不断增长的数据库?
所有的表都是MyISAM。
是。
设置复制到第二台机器。 当你需要做备份时,你可以locking辅助机器,执行mysqlhotcopy或mysqldump,然后解锁它。 它会追上你的主人,你不必把主人离线。
你甚至可以在同一台机器上这样做,如果你不介意把写入I / O翻一番,但理想情况下你应该实时备份到第二个物理服务器上,并根据需要随时进行快照备份而不会干扰您的生产服务器。
使用已知状态和binlogs还原数据库在理论上也是可能的。 我从来没有这样做过,所以请先调查一下,但是可以备份一个已知的数据库状态,然后备份所有新的二进制日志,并在需要恢复时重播它们。 由于binlog是线性编写的,所以将新的binlogs同步到远程计算机将非常快速。
编辑:确实,它看起来像使用binlogs备份logging。
这个问题是高度相关的
请原谅我的操作系统是Linux。 如果你不使用LVM,你应该。 如果你是,这是一个非常简单的通过快照进行备份的方法。
# Define these vars to meet your needs. These meet mine. lvol="/dev/VolGroup03/lvol0" snap_name="nightly_snapshot" snap_vol="$(dirname $lvol)/$snap_name" snap_path="/mnt/$snap_name" snap_size="10g" # Not the size of your data, anticipated data changes during the backup backup_path="/backups/$snap_name" /usr/bin/time -f 'Databases were locked for %E' -- \ mysql <<- MYSQL # based on http://pointyhair.com/tiki-view_blog_post.php?blogId=1&postId=5 FLUSH TABLES WITH READ LOCK; \! lvcreate --size $snap_size --snapshot --name $snap_name $lvol UNLOCK TABLES; MYSQL mount $snap_vol $snap_path rsync -av --delete $snap_path/mysql $backup_path/ umount $snap_path lvremove -f $snap_vol
这将使您无需添加从服务器即可进行夜间备份。 我非常赞成有一个高可用性的从属服务器,但我不想让你觉得自己被困住了,直到你可以创build这个从属。
带有读锁的冲刷表不是您想要在生产系统上定期(甚至半定期)执行的操作。 这应该是最后的手段。
设置至less两个复制从站(当然,这将需要FLUSH TABLES WITH READ LOCK)。 一旦build立起来,就可以从另一个备份中取出一个备份,而另一个作为备用主备份保持同步。
另外,如果其中一个从站发生故障,您可以使用该快照重build第二个(或第三个)从站。 如果你所有的奴隶都失败了,你可以回到FLUSH TABLES WITH READ LOCK。
记住永远有一个定期检查数据是否同步的过程 – 使用像mk-table-checksum这样的操作(这是非常简单的设置,详情请参阅Maatkit文档)。
由于22 GB是相对较小,这样做你会没有问题。 做一个大型数据库可能会更成问题。
这里的解决scheme是双重的,如上所述:
请注意,如果对表使用InnoDB,则可以使用–single-transaction标志来避免执行任何表锁,即使在主服务器上也可以获得数据库的一致转储,因此无需执行备份取下服务器。 但是,上述解决scheme是一个更好的解决scheme。
另外,如果您在Linux上使用LVM,则可以获取该分区的LVM快照,然后将其恢复。 LVM快照是primefaces的,所以如果你用'读取locking'来刷新表格,然后把你的快照和解锁,你会得到一个一致的快照。
如果担心I / O争用导致转储时间过长,则可以添加第三台计算机并通过networking运行mysqldump以避免抖动磁盘。
你可以做一个渐进的备份。 每小时备份1/24的logging。 这种方法唯一的问题是,如果它在一天的头几个小时内崩溃,那么从那个时候到崩溃时间,你将失去任何东西。 无论哪种方式,不到24小时的logging丢失(我不知道这对你有多重要)。
根据你的环境,快照通常是一个很好的方法。 特别是如果您由于某种原因必须备份主服务器。 我们运行主从对,并在两者上使用快照备份。
FLUSH TABLES WITH READ LOCK;
UNLOCK TABLES;
使用InnoDB表,你需要运行SET AUTOCOMMIT=0;
在执行读锁之前。
看看“ 备份生产MySQL数据库的最佳做法? ”。 这是堆栈溢出一个类似的post。