我有一个使用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/