mysqldump的single-transaction
先看一下--lock-tables和--lock-all-tables
--lock-all-tables
一次性锁定所有数据库的所有表,在整个dump期间一直获取global read lock;
该选项自动关闭—lock-tables和—single-transaction;
--lock-tables
以database为单位,dump前锁定其下所有表;如果是Myisam表则采用 read local模式,允许同时insert;
--opt自动启用—lock-tables;
注:--opt包含--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset
再看一下官方对于single-transaction的解释
--single-transaction
This option sets the transaction isolation mode to REPEATABLE READ and sends a START TRANSACTION SQL statement to the server before dumping data. It is useful only with transactional tables such as InnoDB, because then it dumps the consistent state of the database at the time when START TRANSACTION was issued without blocking any applications.
When using this option, you should keep in mind that only InnoDB tables are dumped in a consistent state. For example, any MyISAM or MEMORY tables dumped while using this option may still change state.
While a --single-transaction dump is in process, to ensure a valid dump file (correct table contents and binary log coordinates), no other connection should use the following statements: ALTER TABLE, CREATE TABLE, DROP TABLE, RENAME TABLE, TRUNCATE TABLE. A consistent read is not isolated from those statements, so use of them on a table to be dumped can cause the SELECT that is performed by mysqldump to retrieve the table contents to obtain incorrect contents or fail.
The --single-transaction option and the --lock-tables option are mutually exclusive because LOCK TABLES causes any pending transactions to be committed implicitly.
To dump large tables, combine the --single-transaction option with the --quick option.
可以总结出以下几点:
1 只适用于innodb;
2 需要repeatable read模式开启一个事务
3 执行期间不阻碍DML和DDL,但是不要人工执行alter/create/drop/rename/truncate table;
4 不能与lock-tables共用,后者执行的LOCK TABLES会隐式提交所有pending事务
执行流程
(1)SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
(2)START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
(3)UNLOCK TABLES
如果mysqldump只指定single-transaction,期间不会加锁也不会阻止任何的事务;
--master-data
默认启用—lock-all-tables,如果显示指定—single-transaction则弃用—lock-all-tables,此时只在dump开始时短暂获取global read lock;
执行流程
(1)FLUSH TABLES
(2)FLUSH TABLES WITH READ LOCK
(3)SHOW MASTER STATUS
同时使用Master-data和single-transaction可以对Innodb进行Online backup
shell> mysqldump --all-databases --master-data --single-transaction > all_databases.sql
执行流程
(1)FLUSH TABLES
(2)FLUSH TABLES WITH READ LOCK
(3)SET SESSION TRANSACTION ISOLATION LEVEL REPEATABLE READ
(4)START TRANSACTION /*!40100 WITH CONSISTENT SNAPSHOT */
(5)SHOW MASTER STATUS
(6)UNLOCK TABLES
global read lock的持续时间很短,获取当前binlog的位置信息后立即释放;
注意:
在执行时如果当前有一个事务长时间没有结束,那么FLUSH TABLES WITH READ LOCK将会一直等待,而更加严重的是,阻塞的FLUSH TABLES WITH READ LOCK会进一步阻塞后续的DML,从而造成MySQL hang;
--dump-slave
5.5引入了dump-slave选项,可对slave执行mysqldump,得出的change master to却是指向master,即使用slave创建一个新的slave;
执行期间会停止slave sql thread,完成后自动恢复;
MDL
5.5有了MDL(Meta data lock),所以–single-transaction时,事务内操作过的表都会持有MDL,因此不会被DDL破坏。
例如,mysqldump已经备份了a,b,c表,因为它们在事务内,事务还没提交,它们的MDL不会释放,因此另外的线程如果做a,b,c中任意一张表的DDL操作,都会出现Waiting for table metadata lock,而还没备份到的表不会持有MDL,因此还可以做DDL。
mysqldump的single-transaction的更多相关文章
- [转]Wrapping multiple calls to SaveChanges() in a single transaction
本文转自:http://www.binaryintellect.net/articles/165bb877-27ee-4efa-9fa3-40cd0cf69e49.aspx When you make ...
- MySQL 命令行工具之 mysqldump 深入研究
mysqldump 是MySQL的一个命令行工具,用于逻辑备份.可以将数据库和表的结构,以及表中的数据分别导出成:create database, create table, insert into的 ...
- [笔记] MySql Workbench 导出表结构和数据报错 mysqldump: [ERROR] unknown variable 'delayed-insert=FALSE'
下午使用MySql Workbench导出数据库表结构,设置完导出选项后执行导出,报如下错误: :: Dumping nacweixindb (tb_app) Running: mysqldump.e ...
- Mysql备份--mysqldump&outfile
1.备份工具mysqldump 客户端和服务器端都能用select outfile 只能写到服务器端 2.按表单位备份 a.单个表备份 mysqldump -uusername -p database ...
- mysqldump的流程
发布时间:2013 年 4 月 6 日 发布者: OurMySQL 来源:P.Linux Laboratory 前几天看到群里在讨论mysqldump导致锁表的问题,为什么一个表已经dump ...
- mysqldump 利用rr隔离实现一致性备份
mysqldump -p -S /data/mysqldata1/sock/mysql.sock --single-transaction --master-data=2 --database db1 ...
- mysqldump 用法
mysqldump 是文本备份还是二进制备份 它是文本备份,如果你打开备份文件你将看到所有的语句,可以用于重新创建表和对象.它也有 insert 语句来使用数据构成表. mysqldump 的语法是什 ...
- 【转】mysqldump的锁表的问题
今天凌晨,公司的一台MySQL生产库备份时间从2:30一直备份到8:30,正常情况下这个备份应该只会备份20分钟,3:00之前就会备份完毕,但是这次备份时间太长了,也影响了公司业务的使用.先写一下公司 ...
- MySQL备份与恢复-mysqldump备份与恢复
这片博文主要用来介绍MySQL的备份与恢复: MySQL的备份形式可以分为如下几种: 热备----即不停机备份 冷备----需要关闭MySQL,然后备份其数据文件.(停机备份一般是直接拷贝其datad ...
- 逻辑备份,mysqldump,SELECT…INTO OUTFILE,恢复
逻辑备份 mysqldump mysqldump备份工具最初由Igor Romanenko编写完成,通常用来完成转存(dump)数据库的备份以及不同数据库之间的移植,例如从低版本的MySQL数据库升级 ...
随机推荐
- kill prefix extra,endo out 1
1●extra 超过外面的, 以外的,外面 的 2●endo 内部
- html和css命名标准以及常用的框架,我使用的是网易nec
前端的工作很细,涉及的东西也很多,静态页面和js开发,调接口之类,有时还要自己设计.现在css管理使用less和sass,新东西起码要支持下,具体用与不用看公司的业务需求.前端人员之间的配合也很重要要 ...
- 弹出层小插件之(二) layer&layui
其实layer或者layui相对于上次所说的 sweetalert来说不仅仅有弹出层,它有很多的功能,这也大大的提高了我们的开发效率,根据我们项目的实际需要的效果进行选择.下面介绍下Layer的用法吧 ...
- (C/C++学习笔记) 十五. 构造数据类型
十五. 构造数据类型 ● 构造数据类型概念 Structured data types 构造数据类型 结构体(structure), 联合体/共用体 (union), 枚举类型(enumeration ...
- L1-025 正整数A+B
题的目标很简单,就是求两个正整数A和B的和,其中A和B都在区间[1,1000].稍微有点麻烦的是,输入并不保证是两个正整数. 输入格式: 输入在一行给出A和B,其间以空格分开.问题是A和B不一定是满足 ...
- git操作远端分支(转)
http://www.cnblogs.com/Camier-myNiuer/p/5558884.html 原文地址:http://hi.baidu.com/lingzhixu/blog/item/4a ...
- 2018-2019-2 网络对抗技术 20165202 Exp3 免杀原理与实践
博客目录 一.基础问题回答 二.实践内容 1.使用msf编码器msfvenom生成后门程序 2.使用msf编码器msfvenom生成jar文件 3.使用veil-evasion生成后门程序及检测 4. ...
- secureCRT 字体颜色、文件夹和文件显示的颜色
secureCRT菜单栏中选择会话选项 修改显示文件夹和文件显示的颜色 修改字体样式 查看效果
- PHP连接MYSQL 报错"No such file or directory"
首先确定是mysql_connect()和mysql_pconnect()的问题,故障现象就是函数返回空,而mysql_error()返回“No such file or directory”. 写个 ...
- MATLAB安装教程
1.资源下载 下载官方安装包R2015b_win64.(文件太大,没上传资源) 下载破解文件包,解压其中的相应压缩包(一般是win64那个压缩包) 下载地址:链接:http://pan.baidu.c ...