如果我没有弄错,执行mysqldump的时候,会locking表,不是吗? 呃,没关系,我的问题是:
如果我使用mysqldump每小时备份LIVE数据库会有什么后果?
我有很多数据库(大约15个),但是我只需要备份10个数据库(其中2个数据库相当庞大,大约40 MB)。 因此,在我的batch file中,我为每个不使用“–all-”选项的数据库执行mysqldump。
我想尽可能经常备份这些重要的数据库,我打算每3小时做一次备份。 不过,我担心表演,恐怕会放慢我的网站。 有什么build议吗?
您将在您的数据库服务器IO子系统上承受巨大的负担。
如果你需要这样做,那么我的build议是将mysql复制设置到第二个服务器,并从那里运行备份。
从技术上讲,一旦你有这个复制运行,你的奴隶的二进制日志是足够的时间点恢复,你不应该需要经常运行一个完整的备份。
另外,运行备份时,应考虑mysqlbackup上的--single-transation mysqlbackup标志,以避免对每个表执行表级locking。 这就要求你使用的是InnoDB而不是MyISAM,你应该这样做。
除非你的意思是40G而不是40M,否则你应该完全没有问题。 40M是不是很大,它是相当小的:),应该肯定适合内存(即使考虑到其他的数据库,如你所说甚至更小),这是除非你是一个非常低的内存,并没有给你的MySQL足够的,但即使如此,甚至加载数据完全从磁盘应该只需要几秒钟。
我build议你用'time'shell命令至less调用一次。
而备份正在进行(假设你使用正确的选项(我使用“-ceKq –single-transaction –create-options”),所有从你的应用程序到数据库的查询将被locking,但如果它只是一个第二次每隔几个小时我不会太担心,除非你有一个reeeeeely高通讯网站,在这种情况下,mysqldump是不是一个真正的备份选项。
LVM快照可以在几秒钟内提供数据库文件系统的冻结图像。 如果使用MyISAM表,程序将是:
锁只能保持一秒钟左右。
然后可以挂载快照,并运行第二个mysql实例。 或者,您可以将快照压缩并复制到远程系统中,直到需要时为止。
你可以做到这一点,但我build议试图把它分成多个不同的工作,间隔3个小时。 如果10个相关的数据库是独立的,这应该是可能的。 这样你就不会只有一个很长很长的I / O活动。 小块更好。
我会跟Daves的build议。 设置一个复制从属,并在那里运行备份。 你不想影响你的生产数据库服务器。 如果你想要一个漂亮的盒子工具,我会给MySQL-ZRM一个镜头。 社区版本正常工作。 当你configurationZRM时,你可以select它作为一个从属设备,当你备份的时候它会停止复制。 就像戴夫所说的那样,拥有奴隶和原木也是很好的事情。 在MySQL-ZRM