热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

5.5版本中mysqldump一些改进

昨天一同学说在slave上出现Waitingfortablemetadatalock,metadatalock在5.5版本新加的(http:dev.mysql.com

昨天一同学说在slave上出现Waiting for table metadata lock,metadata lock在5.5版本新加的(http://dev.mysql.com/doc/refman/5.5/en/metadata-locking.html)。metadata lock出现最多情况是一个事务中在t表进行DML时,另外一事务想对t表DDL,这时对t表DDL的事务只能等待,就会出现metadata,就是为了保护表的metadata。
出问题的备库上在跑mysqldump备份数据(参数有–single-transaction),一同学在主库drop table操作,导致备库一直hang住(备库延迟),show processlist就可以看到metadata lock。为什么mysqldump会对表加metadata lock的?

Mysqldump代码(5.5版本,5.1版本有点区别)
1、 if->flush tables成功,do->flush tables with read lock
2、 start transaction
3、 unlock tables
4、 backup(一个表一个表加metadata lock)

模拟mysqldump过程:

root@test >show TABLES;
+----------------+
| Tables_in_test |
+----------------+
| a |
| b |
| c |
+----------------+


Session 1:

root@test 06:46:20>flush TABLES WITH READ LOCK;
Query OK, 0 ROWS affected (0.00 sec)root@test 06:48:16>start TRANSACTION;
Query OK, 0 ROWS affected (0.00 sec)root@test 06:48:23>unlock TABLES;
Query OK, 0 ROWS affected (0.00 sec)root@test 06:48:38>select * FROM a;
Empty SET (0.00 sec)


Session 2:

root@test 06:45:25>drop TABLE a; hang …


session 3:

root@test 06:50:18>drop TABLE b;
Query OK, 0 ROWS affected (0.62 sec)


Session 1:

root@test 06:48:47>select * FROM b;
ERROR 1146 (42S02): TABLE 'test.b' doesn't exist
root@test 06:51:41>select * from c;
Empty set (0.00 sec)


Session 3:

root@test 06:51:03>drop TABLE c; hang…


从上面测试可以知道,mysqldump是备份到哪个表,锁到哪个表。这里有产生一个新的问题:
Session I:
Mysqldump未备份到b表
Session II:
写操作记录到binlog中
drop table b,实际在mysqldump备份集里是没有b表的

当恢复时,因为要apply 写b表的binlog,但备份集恢复后根本就没有b表,所以会报表找不到表,这个在我们线上环境已出现。

总结:因为5.1没有metadata lock,所以出现几率会更大,5.5已改进扫到哪里加锁到哪里。

转自:http://www.dbunix.com/?p=3217


推荐阅读
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • Nginx使用(server参数配置)
    本文介绍了Nginx的使用,重点讲解了server参数配置,包括端口号、主机名、根目录等内容。同时,还介绍了Nginx的反向代理功能。 ... [详细]
  • android listview OnItemClickListener失效原因
    最近在做listview时发现OnItemClickListener失效的问题,经过查找发现是因为button的原因。不仅listitem中存在button会影响OnItemClickListener事件的失效,还会导致单击后listview每个item的背景改变,使得item中的所有有关焦点的事件都失效。本文给出了一个范例来说明这种情况,并提供了解决方法。 ... [详细]
  • Oracle Database 10g许可授予信息及高级功能详解
    本文介绍了Oracle Database 10g许可授予信息及其中的高级功能,包括数据库优化数据包、SQL访问指导、SQL优化指导、SQL优化集和重组对象。同时提供了详细说明,指导用户在Oracle Database 10g中如何使用这些功能。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • Webmin远程命令执行漏洞复现及防护方法
    本文介绍了Webmin远程命令执行漏洞CVE-2019-15107的漏洞详情和复现方法,同时提供了防护方法。漏洞存在于Webmin的找回密码页面中,攻击者无需权限即可注入命令并执行任意系统命令。文章还提供了相关参考链接和搭建靶场的步骤。此外,还指出了参考链接中的数据包不准确的问题,并解释了漏洞触发的条件。最后,给出了防护方法以避免受到该漏洞的攻击。 ... [详细]
  • 本文详细介绍了MySQL表分区的创建、增加和删除方法,包括查看分区数据量和全库数据量的方法。欢迎大家阅读并给予点评。 ... [详细]
  • 如何在php文件中添加图片?
    本文详细解答了如何在php文件中添加图片的问题,包括插入图片的代码、使用PHPword在载入模板中插入图片的方法,以及使用gd库生成不同类型的图像文件的示例。同时还介绍了如何生成一个正方形文件的步骤。希望对大家有所帮助。 ... [详细]
  • Servlet多用户登录时HttpSession会话信息覆盖问题的解决方案
    本文讨论了在Servlet多用户登录时可能出现的HttpSession会话信息覆盖问题,并提供了解决方案。通过分析JSESSIONID的作用机制和编码方式,我们可以得出每个HttpSession对象都是通过客户端发送的唯一JSESSIONID来识别的,因此无需担心会话信息被覆盖的问题。需要注意的是,本文讨论的是多个客户端级别上的多用户登录,而非同一个浏览器级别上的多用户登录。 ... [详细]
  • 本文讨论了在ASP中创建RazorFunctions.cshtml文件时出现的问题,即ASP.global_asax不存在于命名空间ASP中。文章提供了解决该问题的代码示例,并详细解释了代码中涉及的关键概念,如HttpContext、Request和RouteData等。通过阅读本文,读者可以了解如何解决该问题并理解相关的ASP概念。 ... [详细]
  • MySQL数据库查询注意事项及查询命令详解
    本文介绍了在进行MySQL数据库查询时需要注意的地方,包括启动informix数据库的命令oninit,查询状态的命令onstat,以及相关的网址链接。同时还详细解释了oninit命令的用法和参数,包括初始化磁盘空间和共享内存、保留在线模式等。对于需要进行MySQL数据库查询的读者,本文提供了实用的查询命令和相关注意事项,帮助读者更好地进行数据库查询。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • Mac OS 升级到11.2.2 Eclipse打不开了,报错Failed to create the Java Virtual Machine
    本文介绍了在Mac OS升级到11.2.2版本后,使用Eclipse打开时出现报错Failed to create the Java Virtual Machine的问题,并提供了解决方法。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
uai_128366833952
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有