概述
ftwrl主要有三个步骤:
- 上全局读锁(lock_global_read_lock)
- 清理表缓存(close_cached_tables)
- 上全局 COMMIT 锁(make_global_read_lock_block_commit)
第一步的作用是堵塞更新,备份时,我们期望获取此时数据库的一致状态,不希望有更多的
更新操作进来。对于 innodb 引擎而言,其自身的 MVCC 机制,可以保证读到老版本数据,
因此第一步对它使多余的。
第二步,清理表缓存,这个操作对于 myisam 有意义,关闭 myisam 表时,会强制要求表
的缓存落盘,这对于物理备份 myisam 表是有意义的,因为物理备份是直接拷贝物理文件。
对于 innodb 表,则无需这样,因为 innodb 有自己的 redolog,只要记录当时 LSN,然后
备份 LSN 以后的 redolog 即可。
第三步,主要是保证能获取一致性的 binlog 位点,这点对于 myisam 和 innodb 作用是一
样的。
所以总的来说,FTWRL 对于 innodb 引擎而言,最重要的是获取一致性位点,前面两个步
骤是可有可无的,因此如果业务表全部是 innodb 表,这把大锁从原理上来讲是可以拆的。
所以如果你的表引擎是 innodb 的话,你不想在备份的时候全局读锁导致数据查询失败。你
可以加上 --single-transaction。
最后
以上就是清爽路人为你收集整理的FLUSH TABLE WITH READ LOCK操作明细的全部内容,希望文章能够帮你解决FLUSH TABLE WITH READ LOCK操作明细所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复