【发布时间】:2013-06-12 20:26:47
【问题描述】:
我有一个使用 innodb 引擎的 mysql 数据库。当我执行 mysqldump 时,表被锁定并且写入将失败。所以我不想将写入发送到正在执行 mysqldump 的数据库。
是否有我可以查看的变量表明正在发生转储并且数据库已锁定?
【问题讨论】:
标签: mysql database mysqldump percona
我有一个使用 innodb 引擎的 mysql 数据库。当我执行 mysqldump 时,表被锁定并且写入将失败。所以我不想将写入发送到正在执行 mysqldump 的数据库。
是否有我可以查看的变量表明正在发生转储并且数据库已锁定?
【问题讨论】:
标签: mysql database mysqldump percona
没有特定的变量表明 mysqldump 正在进行中。到底什么是 mysqldump?对于每张桌子,它只是一个 SHOW CREATE TABLE <Table> 和 SELECT * FROM <Table>。您可以在 SHOW PROCESSLIST 中看到这些。
不管怎样,只要您只备份 InnoDB 表,您就不必锁定任何东西。使用mysqldump --single-transaction,它将使用事务来确保备份过程的一致读取,而不是锁定。
另见http://dev.mysql.com/doc/refman/5.6/en/mysqldump.html#option_mysqldump_single-transaction
但要更直接地回答您的问题,您可以查询几个地方来发现当前的锁:
你的评论:
在使用 Percona XtraDB Cluster 时从数据库读取仍然只是本地读取。使用mysqldump --single-transaction 应该没问题。如果您使用的是 Percona XtraDB Cluster(顺便说一句,我在 Percona 工作),那应该没有什么不同。
唯一可能受 PXC 影响的是如果您使用 wsrep_causal_reads,如果有未提交的写入集传入,则会阻止读取。
如果你喜欢 Percona 产品,并且你所有的表都是 InnoDB,你应该使用Percona XtraBackup,它也可以在没有锁定的情况下执行备份。
【讨论】: