MySQL备份之mysqldump工具--lock-all-tables
来源:互联网 发布:馆陶县行知教育集团 编辑:程序博客网 时间:2024/05/18 11:45
在使用mysqldump(或者mysqlpump)备份mysql数据库时,有如下三个参数值得研究:
--lock-all-tables
保证整个数据库(所有schema)的数据具有一致性快照。
在mysqldump导出的整个过程中以read方式锁住所有表(锁住方式类似 flush tables with read lock 的全局锁)。
比如当前数据库有如下schema:
information_schema(不会导出)
mysql
performance_schema(不会导出)
sys(不会导出)
test
test1
test2
那么我们在使用mysqldump导出时:
C:\Users\Administrator>mysqldump --lock-all-tables --set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump
指定--lock-all-tables参数,那么从一开始就对整个mysql实例加global read lock锁。
这整个全局读锁会一直持续到导出结束。
所以在这个过程中,数据库实际严格处于read only状态。
所以导出的数据库在数据一致性上是被严格保证的,也就是数据是一致性的。
由于这个参数会将数据库置于read only状态(也相当于不可使用状态),所以默认不加该参数。
这相当于脱机备份的感觉,所以生产数据库的备份策略上,也很少使用该参数。
使用该参数的话,也会自动将 --single-transaction 及 --lock-tables 参数置于 off 状态。
该参数默认off。
--single-transaction
保证各个表具有数据一致性快照。
指定 --single-transaction 参数,那么导出过程中只能保证每个表的数据一致性(利用多版本特性实现,目前只能针对InnoDB事务表)。
比如有一个大表,mysqldump对该表的导出需要1分钟,那么在这1分钟的过程中,该表时可以被正常访问的。
(正常访问包括增删改查,但是alter table等对表结构发生更改的语句要被挂起。)
mysqldump能够保证从开始对该表进行导出,一直到对该表的导出结束,该表的数据都是开始的一致性数据快照状态。
所以该参数明显不能保证各个表之间的数据一致性(特别是外键约束的父表和子表之间)。
但是该参数能够让数据库处于可使用(就是应用感觉数据库可用)状态,相当于联机备份,所以被经常使用。
该参数默认off。
--lock-tables
保证各个schema具有数据一致性快照。
指定 --lock-tables 参数,那么在导出过程中能够保证各个schema的数据一致性。
比如导出 cms 库(该库有155张表)时:
C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=off -ER -B cms> d:\temp\mysql.cms.2016-4-1.dump
从命令开始,就对 cms 库的155张表加类似 lock table xxx read 的读锁。
这会导致在导出整个cms库的过程中,cms库实际上整体处于read only状态。
但是如果我们指定如下命令:
C:\Users\Administrator>mysqldump --lock-tables --set-gtid-purged=on -AER > d:\temp\mysql.2016-4-1.dump
来导出全部mysql库,那么当导出cms库的过程中,其他 schema 实际上是可以被正常访问的。
这个正常访问就是可以接受所有合法的sql语句。
所以该参数只能保证各个schema自己的数据一致性快照。
该参数默认on。
- MySQL备份之mysqldump工具--lock-all-tables
- MySQL备份之mysqldump工具--lock-all-tables、--single-transaction以及--lock-tables参数
- mysqldump 备份数据 using LOCK TABLES
- [MySQL] MySQL备份工具之mysqldump
- 深入理解mysqldump参数 --single-transaction --lock-all-tables
- 备份错误mysqldump: Got error: 1016 when using LOCK TABLES
- 用mysqldump备份数据库时出现when using LOCK TABLES
- mysqldump备份数据库时出现when using LOCK TABLES
- MySQL备份之mysqldump
- MySql备份之mysqldump
- mysql备份之mysqldump
- mysql备份之 mysqldump
- MySQL备份之mysqldump
- MySQL Study之--Mysql数据库备份工具(mysqldump)
- Mysqldump 之Access denied when doing LOCK TABLES
- 深入理解mysqldump原理 --single-transaction --lock-all-tables --master-data
- 深入理解mysqldump原理 --single-transaction --lock-all-tables --master-data
- 深入理解mysqldump原理 --single-transaction --lock-all-tables --master-data
- 表单标签
- Divide and Conquer -- Leetcode problem53. Maximum Subarray
- FreeRTOS 任务挂起和恢复
- 郵便実装
- 微服务架构特点
- MySQL备份之mysqldump工具--lock-all-tables
- ThinkPHP CURD之登录
- MATLAB 判断字符串中是否含有特定的字符
- Attention and Augmented Recurrent Neural Networks
- computed 计算属性无法双向绑定
- MySQL横表和纵表的相互转换
- 98道常见Hadoop面试题及答案解析
- GPIO介绍
- [机器学习实战] k-近邻算法