转载于:http://blog.itpub.net/29254281/viewspace-1392757/

MySQLDump经常用于迁移数据和备份.

下面创建实验数据,两个数据库和若干表
create database db1 ;
use db1;
create table t1(id int primary key);
insert into t1 values(1),(2),(3);
create table t2(id int primary key);
insert into t2 values(1),(2),(3);

create database db2;
use db2;
create table t3(id int primary key);
insert into t3 values(1),(2),(3);
create table t4(id int primary key);
insert into t4 values(1),(2),(3);
commit;

mysqldump的常用参数如下
1.导出指定数据库(--databases)
mysqldump -uroot --databases db1 db2 > test.sql

2.导出指定数据库的结构(-d)
mysqldump -uroot --databases -d db1 db2 > test.sql

3.导出之前刷新日志(-F)

4.设置字符集(--default-character-set)

5.设置扩展Insert(-e --skip-extended-insert禁用扩展Insert)

6.锁表(--lock-tables)

7.锁所有数据库的所有表(--lock-all-tables)

8.一致性读,仅针对InnoDB有效(--single-transaction)

9.获取binlog位置(--master-data 1将binlog位置写在正文 2将binlog位置写入注释)

常用用法
1.迁移数据
将db1 db2数据库通过mysqldump导出.然后通过管道导入目标数据库
mysqldump -uroot --single-transaction--databases db1 db2 | mysql -uroot -p123456 -h 172.16.1.25

2.导出数据备份或者创建Slave
mysqldump -uroot --single-transaction --master-data --databases db1 db2 > test.sql

3.分别产生表结构和数据
select into outfile是针对单个表的.使用--tab选项可以导出多个表
mysqldump -uroot --single-transaction  --tab=F:\  db1

重要参数解析(MySQL 5.6.14)
开启MySQL general_log,然后使用mysqldump操作,查看产生的日志.

1.--lock-tables
执行命令
mysqldump -uroot --lock-tables --databases db1 db2 > test.sql
它在导出db1的时候,会对db1所有的表上锁,导出结束之后释放锁.然后再同样导出db2.
也就是说在db1导出的时候,db2的数据可能还在变化.

2.--lock-all-tables
mysqldump -uroot --lock-all-tables --databases db1 db2 > test.sql
它会在一开始就对所有的数据库的所有表上锁,请注意它会使用FLUSH TABLES

3.--single-transaction
mysqldump -uroot --single-transaction --databases db1 db2 > test.sql
可以看到它设置整个导出的过程为一个事务.避免了锁

4.--master-data
它对所有数据库的所有表上了锁,并且查询binlog的位置。请注意它会使用FLUSH TABLES

5.--master-data + --single-transaction
mysqldump -uroot --master-data --single-transaction --databases db1 db2 > test.sql
这种组合,会先对所有数据库的所有表上锁,读取binlog的信息之后就立即释放锁,这个过程是十分短暂的。
然后整个导出过程都在一个事务里.
请注意它会使用FLUSH TABLES

MySQLDump在使用之前一定要想到的事情

如果mysqldump执行的过程中需要flush tables,而正在此时,有一个慢SQL正在运行,这时mysqldump会被阻塞(waiting for table flush),
并且其他连接对这个表的所有操作(甚至查询)都被阻塞.系统Hung了.

这个问题在XtraBackup备份的时候同样存在.

如果是人工执行,一定要开启另外一个连接,监控 show processlist,查看是否阻塞.
如果是调度执行,拼人品了.

其实优化慢SQL才是正道.

另外在mysqldump导出的过程中,不要有任何的DDL操作,否则同样会引发metadata lock的连环阻塞.

参考:
http://blog.itpub.net/29254281/viewspace-1157701/(Waiting for table阻塞查询的问题)
http://blog.itpub.net/29254281/viewspace-1383193/

http://imysql.com/2008_10_24_deep_into_mysqldump_options
http://hidba.org/?p=421

MySQLDump在使用之前一定要想到的事情 [转载]的更多相关文章

  1. MySQLDump在使用之前一定要想到的事情

    MySQLDump经常用于迁移数据和备份. 下面创建实验数据,两个数据库和若干表create database db1 ;use db1;create table t1(id int primary ...

  2. MySQL选用可重复读之前一定要想到的事情

    原文地址:http://blog.itpub.net/29254281/viewspace-1398273/ MySQL选用可重复读隔离级别之前一定要想到的事情.间隙锁 MySQL在使用之前有三个务必 ...

  3. 快速构建App界面的框架(●'◡'●) -----SalutJs

    前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...

  4. 直接启动tomcat时为tomcat指定JDK

    第一种: 在windows环境下以批处理文件方式启动tomcat,只要运行<CATALINA_HOME>/bin/startup.bat这个文件,就可以启动Tomcat.在启动时,star ...

  5. 理解伪元素 :Before 和 :After

    层叠样式表(CSS)的主要目的是给HTML元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的.事实上CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”. 你 ...

  6. 一个十年java程序员的心得

    展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...

  7. 10 个迅速提升你 Git 水平的提示

    1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...

  8. [转]快速构建App界面的框架(●'◡'●) -----SalutJs

    前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...

  9. IT人士感言2(转)

    01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好.由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个.还好户口没丢掉,其他都已经 ...

随机推荐

  1. 链式mapreduce

    在hadoop 中一个Job中可以按顺序运行多个mapper对数据进行前期的处理,再进行reduce,经reduce后的结果可经个经多个按顺序执行的mapper进行后期的处理,这样的Job是不会保存中 ...

  2. 【POJ 1159】Palindrome

    [POJ 1159]Palindrome 近期各种题各种奇葩思路已经司空见惯了...又新出个滚动数组= = 该题另一点须要知道 最少须要补充的字母数 = 原序列S的长度 - S和S'的最长公共子串长度 ...

  3. Java 内存区域与内存溢出异常

    一.Java虚拟机内存划分 1.程序计数器 线程私有 可以看做是当前线程所执行的字节码的行号指示器.字节码解释器工作时是通过改变这个计数器的值来选取下一条需要执行的字节码指令. Java虚拟机是通过多 ...

  4. linux下如何用php读取word

    在实际的工作中遇到到要导入word格式的文件,经过努力,终于成功了. 在linux上用PHP读取WORD文档,其实是使用了 antiword程序把word文档转化为txt文档. 再使用php执行系统命 ...

  5. rails使用mysql数据库

    简单步骤 1,安装mysql 安裝 MySQL Ubuntu 上安裝 MySQL 請執行: $ sudo apt-get install mysql-server mysql-common mysql ...

  6. react native 之页面布局

     第一章 flexbox 布局 1.flexDirection:'row', 水平 flexDirection:'column',垂直 需要在父元素上设置这种属性才能实现flex. flex:1 会撑 ...

  7. iOS NSString拼接字符串

    NSString* str_C; // 结果字符串NSString* str_A, str_B; //已存在的字符串,需要将str_A和str_B连接起来 //方法1 str_C = [NSStrin ...

  8. IDEA下搭建简单的SpringBoot工程应用

    (1)File->new,选择maven,创建一个空项目,直接next. (2)填写工程名,next. (3)填写项目名,next,创建一个基于maven的空Java项目. (4)在pom文件中 ...

  9. bzoj1017 [JSOI2008]魔兽地图DotR——DP

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1017 好难想的状态啊!f[i][j][k]表示i号物品有j个向上贡献,一共花了k钱的最大力量 ...

  10. VC链接hid.lib出错问题解决方案

    写一个HID的客户端小程序,调用了一些HID API,但是链接时出现了奇怪的现象. 尽管我已经把头文件和lib文件加入到了VC的Include和Lib目录中,但不管我用VC链接,还是在DDK环境下链接 ...