3

当我运行以下命令时,输出仅包含“mytable”的创建语法,但没有数据:

mysqldump --single-transaction -umylogin -p mydatabase mytable > dump.sql

如果我删除 --single-transaction,我会收到一个错误,因为我无法锁定表。

如果我删除“mytable”(并执行数据库),它看起来像是在创建 INSERT 语句,但整个数据库是巨大的。

有没有一种方法可以转储表——模式和数据——而不必锁定表?

(我也尝试过 INTO OUTFILE,但也无法访问。)

4

1 回答 1

2

答案可能取决于您用于表的数据库引擎。InnoDB 对非锁定备份有一些支持。鉴于您对权限的评论,您可能缺乏所需的权限。

想到的最佳选择是创建一个没有索引的重复表。将要备份的表中的所有数据复制到新表中。如果您以可以轻松翻阅数据的方式创建查询,则可以调整锁定的持续时间。我发现每次迭代 10,000 行通常很快。一旦你有了这个查询,你就可以继续运行它,直到所有行都被复制。

现在您有了一个副本,您可以删除它、截断它或保留它并尝试使用最新数据对其进行更新并将其用作备份源。

雅各布

于 2010-02-24T22:41:31.607 回答