我是靠谱客的博主 高贵小馒头,最近开发中收集的这篇文章主要介绍mysqldump总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 原理
  2. 参数
  3. 优缺点
  4. 备份时间
  5. 问题

原理

操作

打开general log,在一个基本没有数据,没有连接的测试库里面执行
(方便查看)


mysql> set global general_log=on;
mysql> show variables like '%general_log_file%';

查看 general log

备份原理

  1. flush tables (如果有大表ddl,慢查询,大update会导致失败,超时。本部操作是为了避免较长的事务操作造成FLUSH TABLES WITH READ LOCK操作迟迟得不到锁,但同时又阻塞了其它客户端操作。)
  2. flush tables with read lock
  3. 设置 session 隔离级别 RR
  4. begin transaction (开启一个一致性快照读)
  5. show @@global gtid_executed (得到gtid信息)
  6. show master status (得到binlog 位置信息)
  7. 解锁 unlocktables
  8. show databases
  9. save point
  10. 备份数据(show create table test 备份表结构,select * from test备份数据(生成insert 语句),默认会备份触发器,存储过程和函数等)
  11. 回到 save point
  12. 下一个表
  13. 释放资源

参考资料

参数

–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总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部