我有一个使用innodb引擎的mysql数据库。当我执行mysqldump时,表被锁定,写入将失败。因此,我不想将写入发送到正在执行mysqldump的数据库。

我是否可以查看表明变数正在发生并且数据库已锁定的变量?

最佳答案

没有特定的变量指示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

但是要更直接地回答您的问题,您可以查询几个地方来发现当前的锁:


SHOW OPEN TABLES
INFORMATION_SCHEMA.INNODB_LOCKS




发表您的评论:

使用Percona XtraDB Cluster时从数据库读取仍然只是本地读取。使用mysqldump --single-transaction应该没问题。如果您使用的是Percona XtraDB群集,它应该没有什么不同(顺便说一句,我在Percona工作)。

可能受PXC影响的唯一事情是使用wsrep_causal_reads,如果有未提交的写入集传入,则会使reads阻塞。

如果您喜欢Percona产品,并且所有表都是InnoDB,则应使用Percona XtraBackup,它也可以执行不锁定的备份。

关于mysql - 执行mysqldump时MYSQL变量更改,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17074708/

10-16 14:40