2012-02-24 56 views
4

只想知道在实时数据库上运行mysqldump有什么风险?有没有数据库损坏的机会? mysqldump似乎锁定整个数据库。在实时数据库上运行mysqldump

+0

'man mysqldump' – silly 2012-02-24 14:45:52

+1

本网站专门提供编程问题,而您的问题似乎更适合http://dba.stackexchange.com。你可能会在那里得到更快的相关答案。 – 2012-02-24 14:47:23

回答

2

数据库表使用什么引擎?如果您使用的是事务表,则可以使用“单事务”选项进行转储,这会将表转储为一致状态。如果您使用MyISAM等非事务性表格,则不应有任何数据库损坏问题。如果您遇到种族情况,您可能会遇到不一致的数据问题。无论哪种情况,在转储发生时,您都会显着减慢数据库响应时间。最好的办法是在运行转储之前,先对一个奴隶运行转储或等待该站点静止。

+0

我为这个数据库使用MyISAM。当mysqldump正在运行时,我将用户锁定3/4分钟,目前确定无误。在这一点上,我更关心数据的完整性。 – rpat 2012-02-24 15:02:20

+0

以下是您可能遇到的问题。假设我有一个带有“水果”表和一个“购物袋”的数据库。我正在运行我的转储,我锁定了水果桌并将其转储。假设之后有人向水果桌上添加新的水果,并且某人将新的水果放入他们的购物袋中(在shopping_bag表中创建一行引用新的水果行)。当购物袋被倾倒时,您现在有一排参考不存在的水果!这不一定会导致你的问题......但它可能,而且是不一致的。 – rpierce 2012-02-24 15:18:53

+0

这正是我的担心所在。我一直在运行mysqldump。我偶尔会看到不一致的地方。我不确定他们来自哪里。 mysqldump通过cron运行。所以我无法知道这些不一致是否由mysqldump引起。我无法经营奴隶。我认为数据库在转储过程中被锁定。有没有办法做到这一点,因为用户无论如何都不能做任何事情,当他转储运行 – rpat 2012-02-24 15:33:47

0

从我的经验来看,它是倾销时的表锁。如果您的数据库处于较大的一端,并且您的流量很大,那么您就必须恢复流量。我不认为数据损坏会成为一个问题,因为它在转储该表的数据之前锁定了一个表。但是,如果我对表锁是错误的,并且它是数据库锁,那么在转储过程中基本上关闭了数据库,但这就是队列的用途,当转储完成时,它将按顺序开始执行队列因为他们收到。

+0

我不确定锁定部分。它需要3/4分钟来转储数据库。在这段时间阻止用户对我来说确实没问题。但是任何类型的数据完整性都是不可接受的。 – rpat 2012-02-24 14:58:18

相关问题