返回顶部
首页 > 资讯 > 数据库 >怎么理解MySQL中半同步引起Master实例Crash
  • 739
分享到

怎么理解MySQL中半同步引起Master实例Crash

2024-04-02 19:04:59 739人浏览 安东尼
摘要

怎么理解Mysql中半同步引起Master实例Crash,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。场景 : Cr

怎么理解Mysql中半同步引起Master实例Crash,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。


场景 : 
Crash发生时的数据库版本: mysql-5.7.12, 官方标注在5.7.17进行了fix;
开启半同步的主从架构中, 从库开启半同步, 启动/重启slave线程导致Master实例Crash;

结论 :
mysql bug, 附上bug单链接: https://bugs.mysql.com/bug.PHP?id=79865

问题描述(摘抄):

Description: From 5.7,semi-sync add Ack_receiver thread for listening slave ack,which use select(). But select() can only listen Socket fd between 1 and __FD_SET_SIZE(my os is 1024),  when socket fd is bigger than __FD_SET_SIZE, select() has no effect, and can never get  ack from slave,then semi-sync can't run nORMally.even more,select() use array store fds, when use FD_SET store fd which is bigger than __FD_SET_SIZE, array will overflow,so mysqld may crash。


主要问题就出在tcp连接的select方法, 通常, 操作系统通过宏FD_SET_SIZE来声明一个进程中select能操作的文件描述符的最大数据, 然而通常情况下, 这个FD_SET_SIZE的值仅为1024;

实际上, 用epoll或者poll会比较少, select貌似是用的很少的;


问题复现:

准备一套MySQL-5.7.12的主从架构, 开启半同步:
怎么理解MySQL中半同步引起Master实例Crash

为了能尽量简单的启用大量的文件描述符, 这里利用MyISAM分区表的"特性";
怎么理解MySQL中半同步引起Master实例Crash

这时候在主库上连续执行select语句多次(>5);
怎么理解MySQL中半同步引起Master实例Crash

这时候看一下主库的文件描述符数量;
怎么理解MySQL中半同步引起Master实例Crash

那么现在在开启半同步的从库上重启一下slave, 同时tail一下主库的日志;
怎么理解MySQL中半同步引起Master实例Crash

在重启线程几秒钟之后, 主库就发生了Crash;

PS: 在测试的过程中, 多次执行了select语句, 然后确认主库的半同步状态也是ON的情况下迅速在从库上重启slave, 基本是必现的;
PPS: MyISAM表在open的时候会同时打开所有的分区文件, 所以能比较方便的模拟占用大量文件描述符的情景;
(MyISAM分区表: Http://blog.itpub.net/29510932/viewspace-2134679/)
PPPPPPPS:  _(:з」∠)_


附上测试用的脚本与Crash的信息

  1. CREATE TABLE `myisam_t` (

  2.   `id` int(11) DEFAULT NULL

  3. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

点击(此处)折叠或打开

2017-04-28T22:10:00.731611+08:00 5092 [Note] Start binlog_dump to master_thread_id(5092) slave_server(13043), pos(, 4)

2017-04-28T22:10:01.648365+08:00 5092 [Note] Start semi-sync binlog_dump to slave (server_id: 13043), pos(, 4)

*** buffer overflow detected ***: /usr/sbin/mysqld terminated

 Backtrace: 

/lib/x86_64-linux-gnu/libc.so.6(+0x731af)[0x7fcdfc7981af]

/lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7fcdfc81dcf7]

/lib/x86_64-linux-gnu/libc.so.6(+0xf6f10)[0x7fcdfc81bf10]

/lib/x86_64-linux-gnu/libc.so.6(+0xf8c67)[0x7fcdfc81dc67]

/usr/lib/mysql/plugin/semisync_master.so(_ZN12Ack_receiver17get_slave_socketsEP6fd_set+0x83)[0x7fcc73D4a493]

/usr/lib/mysql/plugin/semisync_master.so(_ZN12Ack_receiver3runEv+0x603)[0x7fcc73d4aaf3]

/usr/lib/mysql/plugin/semisync_master.so(ack_receive_handler+0x19)[0x7fcc73d4aba9]

/usr/sbin/mysqld(pfs_spawn_thread+0x1b4)[0xe90784]

/lib/x86_64-linux-gnu/libpthread.so.0(+0x80a4)[0x7fcdfdf650a4]

/lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fcdfc80d87d]

点击(此处)折叠或打开

  1. 14:10:01 UTC - mysqld Got signal 6 ;

  2. This could be because you hit a bug. It is also possible that this binary

  3. or one of the libraries it was linked against is corrupt, improperly built,

  4. or misconfigured. This error can also be caused by malfunctioning hardware.

  5. Attempting to collect some information that could help diagnose the problem.

  6. As this is a crash and something is definitely wrong, the information

  7. collection process might fail.


  8. key_buffer_size=8388608

  9. read_buffer_size=131072

  10. max_used_connections=5

  11. max_threads=9999

  12. thread_count=8

  13. connection_count=2

  14. It is possible that mysqld could use up to

  15. key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 21899362 K  bytes of memory

  16. Hope that's ok; if not, decrease some variables in the equation.


  17. Thread pointer: 0x0

  18. Attempting backtrace. You can use the following information to find out

  19. where mysqld died. If you see no messages after this, something went

  20. terribly wrong...

  21. stack_bottom = 0 thread_stack 0x40000

  22. /usr/sbin/mysqld(my_print_stacktrace+0x2c)[0xe77fec]

  23. /usr/sbin/mysqld(handle_fatal_signal+0x459)[0x7a7019]

  24. /lib/x86_64-linux-gnu/libpthread.so.0(+0xf8d0)[0x7fcdfdf6c8d0]

  25. /lib/x86_64-linux-gnu/libc.so.6(gsignal+0x37)[0x7fcdfc75a067]

  26. /lib/x86_64-linux-gnu/libc.so.6(abort+0x148)[0x7fcdfc75b448]

  27. /lib/x86_64-linux-gnu/libc.so.6(+0x731b4)[0x7fcdfc7981b4]

  28. /lib/x86_64-linux-gnu/libc.so.6(__fortify_fail+0x37)[0x7fcdfc81dcf7]

  29. /lib/x86_64-linux-gnu/libc.so.6(+0xf6f10)[0x7fcdfc81bf10]

  30. /lib/x86_64-linux-gnu/libc.so.6(+0xf8c67)[0x7fcdfc81dc67]

  31. /usr/lib/mysql/plugin/semisync_master.so(_ZN12Ack_receiver17get_slave_socketsEP6fd_set+0x83)[0x7fcc73d4a493]

  32. /usr/lib/mysql/plugin/semisync_master.so(_ZN12Ack_receiver3runEv+0x603)[0x7fcc73d4aaf3]

  33. /usr/lib/mysql/plugin/semisync_master.so(ack_receive_handler+0x19)[0x7fcc73d4aba9]

  34. /usr/sbin/mysqld(pfs_spawn_thread+0x1b4)[0xe90784]

  35. /lib/x86_64-linux-gnu/libpthread.so.0(+0x80a4)[0x7fcdfdf650a4]

  36. /lib/x86_64-linux-gnu/libc.so.6(clone+0x6d)[0x7fcdfc80d87d]

  37. The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains

  38. information that should help you find out what is causing the crash.

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网数据库频道,感谢您对编程网的支持。

您可能感兴趣的文档:

--结束END--

本文标题: 怎么理解MySQL中半同步引起Master实例Crash

本文链接: https://lsjlt.com/news/66257.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么理解MySQL中半同步引起Master实例Crash
    怎么理解MySQL中半同步引起Master实例Crash,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。场景 : Cr...
    99+
    2024-04-02
  • MySQL中怎么实现半同步复制
    MySQL中怎么实现半同步复制,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。半同步复制:什么是半同步复制我们知道在默认情况下,...
    99+
    2024-04-02
  • 怎么实现MySQL中的半同步复制
    这篇文章给大家介绍怎么实现MySQL中的半同步复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。 关于MySQL的复制架构,大体有下面三种方式,异步,全同步复制,半同步复制。三种复制...
    99+
    2024-04-02
  • mysql中怎么设置半同步复制
    mysql中怎么设置半同步复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。在主、从上安装和开启半同步插件mysql> install ...
    99+
    2024-04-02
  • mysql中怎么配置半同步复制
    这篇文章给大家介绍mysql中怎么配置半同步复制,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。1.准备主备库配置文件,创建复制用户主库server_id = 1 备库  se...
    99+
    2024-04-02
  • MySQL半同步复制中after_rollback怎么用
    这篇文章给大家分享的是有关MySQL半同步复制中after_rollback怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。调用流程 ha_rollback_low->...
    99+
    2024-04-02
  • Mysql5.7中怎么实现半同步复制
    这篇文章将为大家详细讲解有关Mysql5.7中怎么实现半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。0.系统版本mysql> se...
    99+
    2024-04-02
  • mysql5.5中怎么实现半同步复制
    本篇文章为大家展示了mysql5.5中怎么实现半同步复制,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。master:192.168.70.101slave:192....
    99+
    2024-04-02
  • 怎么在MySQL中配置半同步复制
    今天就跟大家聊聊有关怎么在MySQL中配置半同步复制,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。MySQL安装通过APT的方式安装,官方指导文档地...
    99+
    2024-04-02
  • MySQL异步复制和半同步复制怎么实现
    这篇文章主要介绍“MySQL异步复制和半同步复制怎么实现”,在日常操作中,相信很多人在MySQL异步复制和半同步复制怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”My...
    99+
    2024-04-02
  • MySQL中怎么实现主从复制和半同步复制
    这篇文章将为大家详细讲解有关MySQL中怎么实现主从复制和半同步复制,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。一、复制的介绍MySQL支持单向、异步复制...
    99+
    2024-04-02
  • MySQL中并行复制乱序提交引起的同步异常如何处理
    这篇文章将为大家详细讲解有关MySQL中并行复制乱序提交引起的同步异常如何处理,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。现象描述Slave在开启并行复制后, 默认会乱...
    99+
    2024-04-02
  • mysql中怎么实现同步备份
    本篇文章为大家展示了mysql中怎么实现同步备份,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。  不同服务器上mysql如何实现同步备份  1.服务器状态:  服务...
    99+
    2024-04-02
  • MySQL中怎么实现单向同步
    本篇文章为大家展示了MySQL中怎么实现单向同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。实例主机:dbasky=192.168.1.120dbaskyback...
    99+
    2024-04-02
  • mysql中怎么实现主主同步
    本篇文章为大家展示了mysql中怎么实现主主同步,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。 A服务器: host 192.168.1.101 port 3...
    99+
    2024-04-02
  • 怎么理解MySQL中多源复制引起的内存泄漏
    怎么理解MySQL中多源复制引起的内存泄漏,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。场景 : MySQL-5.7, 所有的小版本(&l...
    99+
    2024-04-02
  • mysql实时同步到kafka中怎么实现
    要实现MySQL实时同步到Kafka中,可以通过以下步骤来实现: 使用Debezium连接MySQL数据库:Debezium是一...
    99+
    2024-04-08
    kafka mysql
  • MYSQL字符集不同引起的join无法走索引的问题怎么解决
    本篇内容主要讲解“MYSQL字符集不同引起的join无法走索引的问题怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MYSQL字符集不同引起的join无法...
    99+
    2024-04-02
  • MySQL数据库中怎么实现同步
    本篇文章给大家分享的是有关MySQL数据库中怎么实现同步,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。  1.修改 master 端的my.c...
    99+
    2024-04-02
  • MYSQL中怎么实现单双向同步
    MYSQL中怎么实现单双向同步,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。 Sever info: Master:192.168.1...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作