【问题标题】:MYSQL variable change when performing mysqldump执行 mysqldump 时 MYSQL 变量更改
【发布时间】:2013-06-12 20:26:47
【问题描述】:

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

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

【问题讨论】:

    标签: mysql database mysqldump percona


    【解决方案1】:

    没有特定的变量表明 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,它也可以在没有锁定的情况下执行备份。

    【讨论】:

    • 谢谢比尔。好吧,我撒了一点谎。该数据库实际上是一个 percona xtradb 集群。集群有 3 个节点。这仍然有效吗?我已经有一个检查集群节点状态的脚本,所以我认为很容易找到一个指示正在发生转储的 var。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-30
    • 2016-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-10-05
    相关资源
    最近更新 更多