• 技术文章 >数据库 >MySQL

    mysql全局锁是什么

    小妮浅浅小妮浅浅2021-08-31 16:58:45原创145

    1、全局锁就是对整个数据库实例加锁。

    2、MySQL提供了一个加全局读锁的方法,命令是Flush tables with read lock。当整个数据库需要只读时,可以使用这个命令。

    然后其他线程的以下句子会被堵塞:数据更新句子(数据增删)、数据定义句子(包括建表、修改表结构等。)和更新事务的提交句子。

    典型的全局锁使用场景是做全库逻辑备份。也就是说,整个库的每个表都被select存储成文本。


    但让整个库只读,可能会出现以下问题:


    如果在主库备份,备份期间不能更新,业务基本停止。

    若从库备份,则在备份期间无法执行主库同步的binlog,则会导致主从延迟。

    打开可重复读隔离级别的事务可以获得一致性视图。

    mysqldump是官方的逻辑备份工具。当mysqldump使用参数-single-transaction时,将在导数据之前启动事务,以确保获得一致性视图。由于MVCC的支持,数据可以在这个过程中正常更新。single-transaction仅适用于所有表使用事务引擎的库。


    既然要全库只读,为什么不用setglobalreadonly=true?


    在一些系统中,readonly的值将被用作其他逻辑,例如,它用于判断一个库是主库还是备库。因此,修改global变量的方法有更大的影响。

    异常处理机制存在差异。如果在执行Flushtableswithreadlock命令后,由于客户端异常断开,MySQL会自动释放整个锁,整个库会回到正常更新的状态。在将整个库设置为readonly,如果客户端出现异常,数据库将始终保持readonly状态,这将导致整个库长期处于不可写状态,风险更高。

    以上就是mysql全局锁的介绍,希望对大家有所帮助。更多mysql学习指路:MySQL

    本文转载于php中文网,如有侵犯联系作者修改。

    专题推荐:mysql全局锁
    品易云
    上一篇:mysql事务启动的两种方法 下一篇:mysql表级锁的介绍

    相关文章推荐

    • mysql如何启动组复制• mysql组复制有哪些用处• mysql视图view的特点• mysql修改视图的方法• mysql视图如何使用• mysql存储过程的特点• mysql错误日志是什么• mysql自增值保存的位置• mysql自增值如何修改• mysql自增主键用完的处理办法• mysql中InnoDB的MVCC实现• mysql中undo log的两种类型• mysql行锁的特点• mysql间隙锁的危害• mysql死锁产生有哪些条件• mysql事务启动的两种方法

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网