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在使用之前一定要想到的事情的更多相关文章
- MySQLDump在使用之前一定要想到的事情 [转载]
转载于:http://blog.itpub.net/29254281/viewspace-1392757/ MySQLDump经常用于迁移数据和备份. 下面创建实验数据,两个数据库和若干表create ...
- MySQL选用可重复读之前一定要想到的事情
原文地址:http://blog.itpub.net/29254281/viewspace-1398273/ MySQL选用可重复读隔离级别之前一定要想到的事情.间隙锁 MySQL在使用之前有三个务必 ...
- 快速构建App界面的框架(●'◡'●) -----SalutJs
前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...
- 理解伪元素 :Before 和 :After
层叠样式表(CSS)的主要目的是给HTML元素添加样式,然而,在一些案例中给文档添加额外的元素是多余的或是不可能的.事实上CSS中有一个特性允许我们添加额外元素而不扰乱文档本身,这就是“伪元素”. 你 ...
- 一个十年java程序员的心得
展望未来,总结过去10年的程序员生涯,给程序员小弟弟小妹妹们的一些总结性忠告 走过的路,回忆起来是那么曲折,把自己的一些心得体会分享给程序员兄弟姐妹们,虽然时代在变化,但是很可能你也会走我已经做过的1 ...
- 10 个迅速提升你 Git 水平的提示
1. Git自动补全 假使你使用命令行工具运行Git命令,那么每次手动输入各种命令是一件很令人厌烦的事情.为了解决这个问题,你可以启用Git的自动补全功能,完成这项工作仅需要几分钟. 为了得到这个脚本 ...
- [转]快速构建App界面的框架(●'◡'●) -----SalutJs
前言 卤煮在公司之初接触到的是一个微信APP应用.前端技术采用的是Backbone+zepto等小型JS类库.在项目开发之初,这类中小型的项目采用这两种库可以满足基本的需求.然而,随着迭代的更新和业务 ...
- IT人士感言2(转)
01. 自己的户口档案.养老保险.医疗保险.住房公积金一定要保管好.由于程序员行业每年跳槽一次,我不隐瞒大家,我至少换过5个以上的单位,这期间跳来跳去,甚至是城市都换过3个.还好户口没丢掉,其他都已经 ...
- GTD时间管理(2)---管理收集箱
通过上面一篇文章,相信大家对GTD收集有了原理大致的了解,如果大家对收集不是很了解,可以去看一下. 当我们收集到很多想法和事情之后,在晚会的时候必须要清空收集箱,否则收集箱会堆积如山,最终收集箱成了垃 ...
随机推荐
- 【Henu ACM Round #12 A】 Grandma Laura and Apples
[链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 知道题意之后就是一个模拟的过程了. 用int now记录当前苹果的个数.bool flag记录是否有小数(即半个苹果) (这样处理为 ...
- 【2017 Multi-University Training Contest - Team 3】Kanade's sum
[Link]:http://acm.hdu.edu.cn/showproblem.php?pid=6058 [Description] 给你n个数; 它们是由(1..n)组成的排列; 然后给你一个数字 ...
- 洛谷 P1400 塔
P1400 塔 题目描述 有N(2<=N<=600000)块砖,要搭一个N层的塔,要求:如果砖A在砖B上面,那么A不能比B的长度+D要长.问有几种方法,输出 答案 mod 10000000 ...
- golang 简单web服务
1.golang print输入 package main import "fmt" func main() { fmt.Printf("Hello World!\n&q ...
- IE兼容性开发的笔记
当前项目组开发的产品对外承诺支持IE9和IE11,但在推广应用过程中发现存在相当比例的用户实际上还在使用IE8.而这相当比例中的用户还包含了大部分的公司领导.为了满足公司内部各阶层人士体验我们产品的诉 ...
- BestCoder Round #65 HDOJ5592 ZYB's Premutation(树状数组+二分)
ZYB's Premutation Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Othe ...
- golang sync.WaitGroup
//阻塞,直到WaitGroup中的所以过程完成. import ( "fmt" "sync" ) func wgProcess(wg *sync.WaitGr ...
- JavaScript学习总结(6)——js弹出框、对话框、提示框、弹窗总结
一.JS的三种最常见的对话框 [javascript] view plaincopy //====================== JS最常用三种弹出对话框 =================== ...
- 【转载】使用logstash+elasticsearch+kibana快速搭建日志平台
原文链接:http://www.cnblogs.com/buzzlight/p/logstash_elasticsearch_kibana_log.html 日志的分析和监控在系统开发中占非常重要的地 ...
- C++ Traits 技术
Tarits.特性的复数. c++萃取技术就是指它. 实现方式是模板特化. STL中涉及到iterator的地方常常能用到它. gcc的STL与VS的STL略有区别. vs中下列代码,把鼠标放在ite ...