概述
- 原理
- 参数
- 优缺点
- 备份时间
- 问题
原理
操作
打开general log,在一个基本没有数据,没有连接的测试库里面执行
(方便查看)
mysql> set global general_log=on;
mysql> show variables like '%general_log_file%';
查看 general log
备份原理
- flush tables (如果有大表ddl,慢查询,大update会导致失败,超时。本部操作是为了避免较长的事务操作造成FLUSH TABLES WITH READ LOCK操作迟迟得不到锁,但同时又阻塞了其它客户端操作。)
- flush tables with read lock
- 设置 session 隔离级别 RR
- begin transaction (开启一个一致性快照读)
- show @@global gtid_executed (得到gtid信息)
- show master status (得到binlog 位置信息)
- 解锁 unlocktables
- show databases
- save point
- 备份数据(show create table test 备份表结构,select * from test备份数据(生成insert 语句),默认会备份触发器,存储过程和函数等)
- 回到 save point
- 下一个表
- 释放资源
参考资料
参数
–master-data={0,1,2}:
0不添加change master to语句
1添加
2以注释形式添加
–single-transaction 得到一个一致性备份
–dump-slave
已有master slave1 需要在master上再添加一个从库slave2
但是master负载很大,不能再master上备份数据库
而我们有需要一个master的备份(来change master to 到这个master上)
这样我们就需要在slave1上备份数据
添加 dump-slave来得到 master的change master 语句
优缺点
优点:
1.恢复简单,可以使用管道将他们输入到mysql
2.与存储引擎无关,因为是从MySQL服务器中提取数据而生成的,所以消除了底层数据存储的不同
3.有助于避免数据损坏。若磁盘驱动器有故障而要复制原始文件时,此时将得到一个损坏的备份
4.文件小,只备份逻辑没有备份索引
缺点:
1.必须有数据库服务器完成逻辑工作,需要更多地cpu周期
2.逻辑备份还原速度慢:需要MySQL加载和解释语句、转化存储格式、重建引擎
参考
备份时间
当我们备份一个数据库,比如 5点开始备份,到5:30结束,那么我们得到的是几点的一致性备份呢?
我们得到的是 5点的备份(flush tables /flush tables with read lock都顺利执行)
从原理我们可以得知begin transaction 之后我们备份的是这个一致性快照的数据(mvcc原理)
问题
1.flush tables 遇到大表ddl,查询等会等待
一个慢查询堵塞数据库备份进程,备份进程堵塞了后续的查询SQL,最后导致后续的大面积SQL等待。
FLUSH TABLES的效果是:关闭所有打开的表,同时清空query cache的内容。
先执行一个FLUSH TABLES操作,而FLUSH TABLES会关闭所有已经打开的表,所以会等待之前的请求执行结束,于是一个慢查询就这么堵塞了mysqldump进程
参考:慢查询导致备份阻塞
2.使用flush logs参数 遇到大事物,刷不动
flush logs 使用一个新的binlog文件,事物不能跨binlog,就会等待这个大事物完成
最后
以上就是高贵小馒头为你收集整理的mysqldump总结的全部内容,希望文章能够帮你解决mysqldump总结所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复