2010-02-08 130 views
1

嗨我有多个数据库需要每天备份。目前,我正在使用cronjob来设置批处理文件来备份它。下面是我的情况,我有大约10个数据库需要备份,其中3长势非常快,让我告诉你当前的数据库大小:一次备份多个数据库[MySQL]?

  • DB1 = 35 MB
  • DB2 = 10 MB
  • DB3 = 9 MB
  • 的其余部分:块DBx = 5 MB

我的批处理文件的代码是:

mysqldump -u root -pxxxx DB1 > d:/backup/DB1_datetime.sql 
mysqldump -u root -pxxxx DB2 > d:/backup/DB2_datetime.sql 
... and so for the rest 

我已经运行了2天,对我来说似乎相当不错。但是我想知道,如果它在执行批处理文件时会影响我的网站性能。

如果这种方法不好,那么如何备份多个数据库,而其生活和大小每天都在增加?

回答

1

这取决于表类型。如果这些表是innoDB,那么您应该使用--single-transaction标志,以便转储是连贯的。如果你的表是MyISAM,那么你有一个小问题。如果按原样运行mysqldump,转储将在执行转储时导致表锁定(不写入)。随着数据库变大,这显然是一个巨大的瓶颈。您可以使用--lock-tables=false选项覆盖此选项,但可以确保备份中不会有一些不一致的数据。

理想的解决方案是在生产环境外部有一个备份复制从服务器来进行转储。

+0

看起来我需要设置“--lock-tables = false”选项。我没有奴隶服务器呢。那么,有时文件正在减少,例如昨天的大小是35mb,但今天的大小是28mb。我打开了sql文件,文件损坏,我的意思是没有正确备份,是因为我没有锁定表? – mysqllearner 2010-02-08 03:58:44

+0

这正是为什么。目前,您应该真正允许表锁,并为了一致的备份而拥有几秒钟的写锁 – 2010-02-08 12:37:07

0

如果你仍然在寻找一种方法来做到这一点,你可能会感兴趣:this

它使用转储为每个数据库创建一个文件,并且使您只需进行第一次配置即可节省大量时间。

希望它有帮助,问候。