故障分析 | MySQL 5.7 使用临时表导致数据库 Crash

故障分析 | binlog flush 失败导致的 Crash 作者:xuty 开个坑,记录自己平时由于解决问题需要或是兴趣研究进行的 MySQL 源码跟踪学习过程。 一、问题现象 某项目上出现 MySQL Crash,相关 errorlog 日志如下,从日志可以看出是 binlog error 导致的问题,但是无法确认具体原因,网上大部分资料都说是由于空间已满导致,后来在系统日志(/var/log/message)中确实找到了 / 分区空间已满的信息,所... 阅读详情

作者:雷文霆

爱可生华东交付服务部 DBA 成员,主要负责Mysql故障处理及相关技术支持。爱好看书,电影。座右铭,每一个不曾起舞的日子,都是对生命的辜负。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


目录
  • 背景信息
  • 故障分析
  • 问题复现
  • 测试日志
  • 测试结论
  • 参考链接

背景信息

在 MySQL5.7.30 主从读写分离环境下,从库在某天出现了 MySQL crash.

系统侧: 监控显示该从库主机的内存和CPU资源使用率在故障前后均正常,磁盘IO有2%的iowait(读写200M/s),说明故障前磁盘存在压力。

**服务侧:**slow-log 中记录了服务重启前,存在使用了临时表和文件排序的慢 SQL 语句。

Error-log 中记录了服务调用到 btr0btr.cc 文件 的 L2165 行,出现了 err == DB_SUCCESS 报错。

0x7f2dd49d0700  InnoDB: Assertion failure in thread 139834817316608 in file btr0btr.cc line 2165
InnoDB: Failing assertion: err == DB_SUCCESS
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.

故障分析

在系统侧排除了磁盘空间不足和内存不足的因素,服务侧怀疑是慢查询和BUG的原因,之后通过" btr0btr.cc"关键字查找到了一个类似的 BUG 。链接如下:

https://bugs.mysql.com/bug.php?id=101154

报告的意思是,MySQL 在执行 btr_insert_on_non_leaf_level_func()函数时,写入临时表会导致带有断言的服务崩溃。

通过查看 btr0btr.cc 文件开头的注释了解到的原因是:

此文件的调用机制是:对b树行操作或记录所做的所有更改。

L2165 行操作内容是:在处理插入到非叶级别的内容时,会检查每个级别的可用空间(需保留2倍索引数高度的页空间),如果在操作之前,叶分裂已经开始,就很难撤销,只能通过崩溃进行前滚。**该 BUG 只会在 MySQL5.7 出现 **

代码查询:https://github.com/mysql/mysql-server (通过 Tags 标签选择对应版本)

代码内容:https://github.com/mysql/mysql-server/blob/mysql-5.7.30/storage/innobase/btr/btr0btr.cc#L2165

nserts a data tuple to a tree on a non-leaf level. It is assumed
that mtr holds an x-latch on the tree. */
void
btr_insert_on_non_leaf_level_func()
    ---
    ut_a(err == DB_SUCCESS);
    ---
        
其中ut_a()
https://dev.mysql.com/doc/dev/mysql-server/latest/ut0dbg_8h.html#ae7aed983dfe98ac872b5a9915fa778fa:

检查数据库关于临时表的参数:

innodb_temp_data_file_path ibtmp1:12M:autoextend:max:20G

tmp_table_size 64M 和 max_heap_table_size 64M

注释:实际限制取二者中的较小者。会话级别的参数,对于 innodb_buffer_pool_size 不大且没有用到临时大数据量查询的情况,不建议设置的过大,可能会导致内存溢出的情况。连接数800+,64M为推荐值

internal_tmp_disk_storage_engine InnoDB

注释:用于定义磁盘临时表的存储引擎。超出 InnoDB 行或列限制的磁盘内部临时表的查询会返回 Row size too large 或 Too many columns 错误。解决方法是设置 internal_tmp_disk_storage_engine 为 MYISAM ,我们的 error-log 中无相关报错。初步排查阶段不建议修改

created_tmp_disk_tables 2987733

created_tmp_tables 11049848

注释:当在内存或磁盘上创建内部临时表时,服务器会增加该 Created_tmp_tables值。在磁盘上创建内部临时表时,服务器会增加该 Created_tmp_disk_tables值。如果在磁盘上创建了太多内部临时表,请考虑增加tmp_table_size和max_heap_table_size设置。从早上10点36分到17点产生较多临时表,结合业务繁忙情况,属于正常现象

小结: 通过上面的分析,结合应用架构(无法升级到 MySQL8.0 )。初步阶段是建议先优化 SQL 语句,减少对临时表的使用,降低再次发生的概率。

问题复现

上文提到的 BUG 报告中,有个使用 MySQL Test Run 简称MTR(MySQL官方的自动化测试框架) 的测试用例。

下文将引用此测试用例,进行复现测试。

参数解释:

innodb_limit_optimistic_insert_debug参数可以限制每个B树页面的记录数,在 MySQL 运行过程中动态设置此参数可以导致页分裂。

innodb_limit_optimistic_insert_debug
限制每个 B 树页面的记录数。默认值 0 表示不施加限制。仅当使用 CMake选项编译调试支持时,需开启DEBUG选项。

# 依赖
yum install -y gcc gcc-c++ cmake ncurses ncurses-devel bison openssl openssl-devel
tar -xvf mysql-boost-5.7.30.tar.gz

--编译安装MySQL,因为需要设置innodb_limit_optimistic_insert_debug参数-------
tar -xvf mysql-boost-5.7.30.tar.gz

# 非BOOST版本的Mysql源码包,需要指定-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/boost
cd mysql-5.7.30
cmake . -DCMAKE_INSTALL_PREFIX=/tools/mysql-test5.7.30 -DMYSQL_DATADIR=/tools/mysql-test5.7.30/data -DMYSQL_UNIX_ADDR=/tools/mysql-test5.7.30/mysql5.7.30.sock -DDEFAULT_CHARSET=utf8mb4 -DDEFAULT_COLLATION=utf8mb4_general_ci -DEXTRA_CHARSETS=all -DENABLED_LOCAL_INFILE=1 -DWITH_SSL=system  -DWITH_BOOST=boost -DWITH_DEBUG=1 

make
make install

# Cmake 编译之后会在DCMAKE_INSTALL_PREFIX目录中生成mysql-test测试框架目录
/tools/mysql-test5.7.30/mysql-test/t
vim my0420.test 
cat my0420.test 
--source include/have_innodb.inc

--let $restart_parameters = "restart: --innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:1G --big-tables=1"
--source include/restart_mysqld.inc

SELECT @@innodb_temp_data_file_path;

drop function if exists func1;
delimiter |;
create function func1(x int) returns int deterministic
        begin
                declare z1, z2 int;
                set z1 = x;
                set z2 = z1 + 2;
                return z2;
        end|
delimiter ;|

create table t1 (a int, b varchar(20));
insert into t1 values(1, 'a'), (2, 'b'), (3, 'c'), (3, 'c'), (4, 'c');

SET GLOBAL innodb_limit_optimistic_insert_debug=4;
--let $i=1
while ($i <= 15) {
INSERT INTO t1 SELECT * FROM t1;
--inc $i
}

SELECT COUNT(*) FROM t1;

SET GLOBAL innodb_limit_optimistic_insert_debug=2;
select * from t1 order by func1(a);

进行测试,
/tools/mysql-test5.7.30/mysql-test
./mtr my0420.test

其中 select * from t1 order by func1(a); 会使用Using temporary; Using filesort 和 业务SQL的执行计划一致

将 my0420.test 第二行新增–internal_tmp_disk_storage_engine=MYISAM参数后,服务不崩溃。

–let $restart_parameters = “restart: --innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:1G –internal_tmp_disk_storage_engine=MYISAM --big-tables=1”

将 my0420.test 第二行增大为—innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:6G参数后,服务不崩溃。

–let $restart_parameters = “restart: --innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:6G --big-tables=1”

big_tables如果启用,服务器将所有临时表存储在磁盘上而不是内存中。这可以防止需要大型临时表的操作的大多数错误,但也会减慢内存表就足够的查询。most The table *tbl_name* is full errors forSELECToperations,如果error-log中出现此报错,说明select 操作使用了大的磁盘临时表,不推荐启用。

(小提示,客户环境中时常会收到某张临时表 #sql_tbl_name is full的告警邮件,需要考虑是否可以优化SQL了)

测试日志

MTR 的执行逻辑为启动一个临时 MySQL 服务,并执行t目录中 my0420.test 文件的内容,执行结果默认会和r目录中的 result 同名文件(也叫标准执行结果文件,一般会在正确的版本中生成)进行对比,用于判断测试文件是否正确。

在mysql-test目录下:
./mtr my0420.test  
--执行到以下语句时报错--
SET GLOBAL innodb_limit_optimistic_insert_debug=2;
[100%] main.my0420                              [ fail ]
        Test ended at 2022-04-20 20:05:39

CURRENT_TEST: main.my0420
mysqltest: At line 32: query 'select * from t1 order by func1(a)' failed: 2013: Lost connection to MySQL server during query
safe_process[7080]: Child process: 7081, exit: 1

Server [mysqld.1 - pid: 7089, winpid: 7089, exit: 256] failed during test run
Server log from this test:

Lost connection ,MySQL 服务已停止。之后打印了 error 信息。错误同样出现在 btr0btr.cc line 2165

Server log from this test:
----------SERVER LOG START-----------
2022-04-20T12:02:42.082135Z 0 [Note] /tools/mysql-test5.7.30/bin/mysqld (mysqld 5.7.30-debug-log) starting as process 7049 ...
2022-04-20T12:02:43.698812Z 0 [Note] /tools/mysql-test5.7.30/bin/mysqld: Shutdown complete
2022-04-20T12:02:45.051667Z 0 [Note] /tools/mysql-test5.7.30/bin/mysqld (mysqld 5.7.30-debug-log) starting as process 7090 ...
2022-04-20T12:02:45.262573Z 0 [Note] /tools/mysql-test5.7.30/bin/mysqld: ready for connections.
Version: '5.7.30-debug-log'  socket: '/tools/mysql-test5.7.30/mysql-test/var/tmp/mysqld.1.sock'  port: 13000  Source distribution
2022-04-20 15:05:37 0x7fc298bc4700  InnoDB: Assertion failure in thread 140473762858752 in file btr0btr.cc line 2165
InnoDB: Failing assertion: err == DB_SUCCESS
InnoDB: We intentionally generate a memory trap.
InnoDB: Submit a detailed bug report to http://bugs.mysql.com.
InnoDB: If you get repeated assertion failures or crashes, even
InnoDB: immediately after the mysqld startup, there may be
InnoDB: corruption in the InnoDB tablespace. Please refer to
InnoDB: http://dev.mysql.com/doc/refman/5.7/en/forcing-innodb-recovery.html
InnoDB: about forcing recovery.
12:05:37 UTC - mysqld got signal 6 ;
This could be because you hit a bug. It is also possible that this binary
or one of the libraries it was linked against is corrupt, improperly built,
or misconfigured. This error can also be caused by malfunctioning hardware.
Attempting to collect some information that could help diagnose the problem.
As this is a crash and something is definitely wrong, the information
collection process might fail.

key_buffer_size=1048576
read_buffer_size=131072
max_used_connections=1
max_threads=151
thread_count=1
connection_count=1
It is possible that mysqld could use up to
key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 61093 K  bytes of memory
Hope that's ok; if not, decrease some variables in the equation.

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7fc234005890): select * from t1 order by func1(a)
Connection ID (thread ID): 2
Status: NOT_KILLED

和客户环境的区别之处:

生产中的报错为 Query(7f3be00479d0) is an invalid pointer. 无效指针,类似磁盘空间不足的报错.

测试中的报错为 Query (7fc234005890): select * from t1 order by func1(a).

测试环境的堆栈信息:

https://github.com/mysql/mysql-server/blob/mysql-5.7.30/storage/innobase/btr/btr0btr.cc#L2285

(上图中文是翻译的代码注释,可能会有些偏差错误)

检查测试日志文件 error-log,默认会在当前目录生成var目录,其中包含 my.cnf 文件

/tools/mysql-test5.7.30/mysql-test/var/log/mysqld.1.err

Trying to get some variables.
Some pointers may be invalid and cause the dump to abort.
Query (7fc234005890): select * from t1 order by func1(a)
Connection ID (thread ID): 2
Status: NOT_KILLED

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html contains
information that should help you find out what is causing the crash.
Writing a core file
safe_process[7089]: Child process: 7090, killed by signal: 6

关于编译安装 MySQL 的补充:

Cmake 编译之后会在 DCMAKE_INSTALL_PREFIX 目录中生成 mysql-test 测试框架目录,

不需要以下步骤(以下步骤在不需要 DEBUG 调试时使用)

1.此包是mysql-test-5.7.30-linux-glibc2.12-x86_64.tar.gz

mv mysql-5.7.30-linux-glibc2.12-x86_64/ /tools/mysql-test

2.将mysql安装包目录下的文件与mtr目录合并,mysql安装包目录下为basedir

cp -r /data/mysql/base/5.7.30 /tools/mysql-test

(插播生活日记,make命令大约需要执行1个小时,刚好18:27,又恰逢隔离,起身洗锅炸厨房了嗷)

测试结论

此 BUG 可能会出现在 MySQL5.7 版本中

1.测试中验证了数据库参数 innodb_temp_data_file_path 增大max_file_size后不会发生服务崩溃,如果业务 SQL 无法进行优化时,可以增大此参数,可降低触发崩溃的概率。

2.测试中验证了数据库参数 internal_tmp_disk_storage_engine=MYISAM 时不会发生服务崩溃,默认 INNODB

如果业务无法升级到 8.0 时,可以动态调整此参数。

我们建议的变更顺序是:

优化 SQL 语句 -> 增大 innodb_temp_data_file_path 参数的 max_file_size 值 -> 升级到 MySQL 8.0(使用会话临时表空间) -> 修改 internal_tmp_disk_storage_engine 参数。

其中 internal_tmp_disk_storage_engine 参数,个人不是很理解,是否真的要将默认值 INNODB 更改为 MYISAM 。之后请教同事了解到,“内部临时表不会被复制,不会有并发访问,是可以考虑使用 MYISAM 的”

再次感谢嗷。

参考链接

BUG报告:

https://bugs.mysql.com/bug.php?id=101154
https://jira.percona.com/browse/PS-7318?focusedCommentId=268045&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-268045

编译安装及参数说明:

https://blog.youkuaiyun.com/iteye_621/article/details/81959655
https://baijiahao.baidu.com/s?id=1725289345179642059&wfr=spider&for=pc

https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html#cmake-general-options

MTR 文档:

https://dev.mysql.com/doc/dev/mysql-server/latest/PAGE_MYSQLTEST_FRAMEWORK_COMPONENTS.html

数据库参数:

https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Created_tmp_tables

https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html#statvar_Created_tmp_disk_tables

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_tmp_table_size

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_max_heap_table_size

https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_big_tables

https://dev.mysql.com/doc/refman/5.7/en/select.html

远程桌面项目 阅读详情

相关推荐

瑞芯微RK3506开发板DSM音频开发避坑指南:从硬件改接到内核配置全流程

本文详细解析了在瑞芯微RK3506开发板上进行DSM音频开发的完整流程与关键避坑点。内容涵盖从硬件改造(如电阻焊接)、内核驱动配置(DTS参数、补丁应用)到系统调试与波形分析的全过程,旨在帮助嵌入式开发者高效实现高信噪比、低成本的音频方案,避免常见错误。

weixin_29164091的博客 406

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

091130 11:16:11 - mysqld got exception 0xc0000005 ; This could be because you hit a bug. It is also possible that this binary or one of the libraries it was linked against is corrupt, improperly buil...

weixin_30271335的博客 1577

图相似度模型(论文篇)

图相似度模型

weixin_43702653的博客 5746

mysql backtrace_追踪源码揪出mysql崩溃的真凶

The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html containsinformation that should help you find out what is causing the crash.151203 12:31:23 mysqld_safe Number of processes running n...

weixin_39576336的博客 522

金融科技数据源

数字金融开放研究平台

平平淡淡,戒急用忍,一生学闭嘴。 1756

告别过热焦虑:用Ansys Icepak给你的电子设备做个“水冷体检”(附冷板案例全流程)

本文详细介绍了如何利用Ansys Icepak进行电子设备水冷系统的热仿真分析,帮助工程师解决设备过热问题。通过冷板案例全流程演示,展示了从几何处理、材料设定到求解器设置和后处理的关键步骤,提升散热设计效率与准确性。

weixin_29299807的博客 439

mysql ping 崩溃_MySQL之——崩溃-修复损坏的innodb:innodb_force_recovery

转: https://blog.csdn.net/l1028386804/article/details/77199194一、问题描述今天在线运行的一个mysql崩溃了。查看错误日志,如下:-----------------------------------------161108 11:36:45 mysqld_safe Starting mysqld daemon with database...

weixin_39645308的博客 843

POWER(十一)charge pump原理

电荷泵是一种基于电容充放电原理的DC-DC转换电路,通过开关控制实现电压转换,包括升压、降压和负压输出。其核心是利用电荷守恒原理,通过电容存储和转移电荷来改变输出电压。典型拓扑结构包括倍压电路和多阶升压电路,具有结构简单、体积小等优势。关键参数包括转换效率、输出电流能力和开关频率,适用于芯片供电、显示屏驱动等低功耗场景。LVDS部分补充说明了自举电路在驱动电路中的应用及其自同步特性。

zhlwsh的博客 2796

mysql 创建库 5.7_MySQL 5.7 主库崩溃切备库

场景:MySQL主库无故宕机:判断是IO问题导致。The manual page at http://dev.mysql.com/doc/mysql/en/crashing.html containsinformation that should help you find out what is causing the crash.200118 02:11:39 mysqld_safe Numb...

weixin_28782221的博客 216

施耐德 Modicon M580 ePAC 项目实战:从硬件选型到 Control Expert V15 组态

本文详细解析了施耐德 Modicon M580 ePAC 在工业自动化项目中的实战应用,从硬件选型到 Control Expert V15 组态的全流程。重点介绍了水处理站控制系统的硬件配置、网络架构设计、软件安装授权及程序框架开发,帮助工程师高效实施中大型控制系统项目。

weixin_33701617的博客 326

【QGIS】PyCharm集成pyqgis的processing工具箱:环境配置与初始化实战

本文详细介绍了如何在PyCharm中配置QGIS的Python环境并成功集成其强大的Processing工具箱。文章核心解决了独立环境下导入processing模块失败、算法无法调用等常见难题,通过手动添加插件路径和执行关键初始化步骤,实现了在PyCharm中丝滑调用QGIS地理处理算法,从而将复杂的空间分析流程自动化。

weixin_28831399的博客 390

mysql-mariadb启动报错恢复数据([ERROR] mysqld got signal 6)

一、启动mysql(mariadb)报错(注:后文中mysql==mariadb): 二、查看mysql日志: vim /var/log/mariadb/mariadb.log InnoDB: End of page dump 160226 11:00:21  InnoDB: Page checksum 913642282 (32bi

Better Me的博客 1万+

以 Joule 驱动的生成式开发:把需求文档直接变成可运行的 SAP 应用

摘要:SAP BTP的AI助手Joule正在改变开发方式,支持从自然语言描述自动生成数据模型、服务、UI及测试代码。在SAP Business Application Studio中,Joule能根据业务需求生成结构化代码,并提供代码补全、重构、解释等功能。开发者需注意避免上传敏感数据,并对AI生成的代码进行人工审核。Joule特别针对ABAP开发进行了优化,提供符合SAP规范的代码建议,帮助迁移遗留系统。此外,它还能快速生成CAP项目原型,但所有AI生成内容都需经过严格测试验证。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 340

故障分析 | MySQL 设置 terminology_use_previous 参数导致数据库 Crash

作者:余振兴 爱可生 DBA 团队成员,热衷技术分享、编写技术文档。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 背景信息 由于安全因素,客户需要将 MySQL 升级到 8.0.26 版本,但由于 8.0.26 的一些术语的不兼容性变更,对于监控采集的工具/程序会出现异常,针对这个情况,MySQL 官方也提供了解决方案,那就是新增了一个参数terminology_use_previous,当将该参数设置为BEFORE_8_0_26时,可以保持 8.

ActionTech的博客 313

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

INSERT UPDATE导致MySQL Crash的场景解惑

技术社群的这篇文章《故障分析 | 一则 INSERT UPDATE 触发 MySQL Crash 的案例》给出一个和SQL语句执行相关的场景,问题排查过程包括了如何找到官方bug,很实用,值得学习参考。1故障现象某个业务 MySQL 实例(MySQL 5.7.20 社区版)发生 Crash,现需要对其具体原因进行分析。/mysql/mysql-5.7.20/bin/mysqld(my_print_...

bisal的专栏 198

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

科普文:软件架构数据库系列之【MySQL故障分析 | binlog flush 失败导致的 Crash】作者:xuty

这个问题目前在项目上很少碰到,这次也是出于好奇拿来学习探讨,下面总结下这个问题出现的场景:1.代码中存在较大事务,超过 binlog_cache_size,高并发下生成大量临时文件,占满 tmpdir。2.代码在事务执行过程中碰到 tmpdir 磁盘已满错误,未处理异常执行回滚,后续执行 Commit 导致。3.代码在事务执行过程中碰到 tmpdir 磁盘已满错误,未处理异常执行回滚,继续执行碰到嵌套事务,引发 Commit 导致。也许很多童鞋想到可以加大binlog_cache_size。

为无为,事无事,味无味。 1220

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

故障分析 | MySQL : slave_compressed_protocol 导致 crash

作者:胡呈清 爱可生 DBA 团队成员,擅长故障分析、性能优化,个人博客:https://www.jianshu.com/u/a95ec11f67a8,欢迎讨论。 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 现象 MySQL版本:8.0.18 create.sql:zabbix 初始化脚本,包含建表、插入数据语句,10M+大小 一个新客户,部署了一套我司的数据库管理平台,接管进来一主两从实例,其中一主一从在无锡机房,为半同步复制,另一个从库在北京.

ActionTech的博客 1951

MySQL故障:从Hang到Crash的深度解析

该故障本质是。

566

故障分析 | 命令行登录 MySQL 报 Segmentation fault 故障解决

作者:林浩DBA ,专注于 MySQL ,擅长问题分析解决。本文来源:原创投稿*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。前段时间遇到一个 mysql 客户端 crash 的问题,这个 mysql 客户端是自己源码编译产生的。为了解决这个问题,查阅了很多资料,涉及终端 ncurses 编程、进程的地址空间(堆和栈)、cmake、gcc 编译等,遇到不少“陷阱”,好在算是比较好的解决了这个问题。

ActionTech的博客 1101

MySQL 两个备机同时挂掉故障分析

两个备库同时crash?是否可修复?

postgres20的博客 655

MySQL主从延迟问题诊断与优化

本文系统讲解MySQL主从复制延迟的成因与解决方案,涵盖binlog格式、IO线程、SQL并行回放、GTID、relay log恢复等关键环节,提供五步诊断法和最佳实践配置,帮助精准定位并解决主从延迟问题。

weixin_42584586的博客 987

故障分析 | 崩溃恢复巨慢原因分析

作者:xuty 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。 一、现象 有个 MySQL 5.7开发库异常挂掉后,奔溃恢复一直处于如下位置,且持续了 2 小时左右才起来。非常疑惑这段时间 MySQL 到底做了什么事情?居然需要这么长时间。 虽说这里虚拟机的 IOPS 并不是很高,但也绝对不需要这么久吧?而且从日志输出来看,这块应该也不是在做真正的数据恢复,那么也可以排除是大事务回滚导致的耗时长,那么原因到底是啥呢? 值得注意的是,这台开发库上面有将近.

ActionTech的博客 452

mysql数据恢复慢_故障分析 | 崩溃恢复巨慢原因分析

一、现象有个 MySQL 5.7 开发库异常挂掉后,奔溃恢复一直处于如下位置,且持续了 2 小时左右才起来。非常疑惑这段时间 MySQL 到底做了什么事情?居然需要这么长时间。虽说这里虚拟机的 IOPS 并不是很高,但也绝对不需要这么久吧?而且从日志输出来看,这块应该也不是在做真正的数据恢复,那么也可以排除是大事务回滚导致的耗时长,那么原因到底是啥呢?值得注意的是,这台开发库上面有将近 1500 ...

weixin_35211615的博客 926

oracle+监听类型,Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断

故障原因:1.实例未注册到listener中,可通过lsnrctl status 查看2.oracle process达到上限无法建立新的连接。故障解决:手工注册数据库,alter system register;检查数据库用户连接分布情况,并show process 查看连接限制Select username,count(1) from v$session group by username o...

weixin_32630003的博客 649

oracle定时崩溃 共享,Oracle常见故障——Listener类:Hang、Crash及连接风暴的判断

故障原因:1.实例未注册到listener中,可通过lsnrctl status 查看2.oracle process达到上限无法建立新的连接。故障解决:手工注册数据库,alter system register;检查数据库用户连接分布情况,并show process 查看连接限制Select username,count(1) from v$session group by username o...

weixin_28941895的博客 436

crash-safe replication的解析及主从注意事项

先前碰到一个故障,于是引入了crash-safe replication,下面仔细描述; 故障描述: 从库(slave端)宕机,重启后,mysql同步发现有数据主键冲突; 故障分析: 从库宕机后,...

congshe1570的博客 224
上一篇: 第41期:MySQL 哈希分区表
下一篇: SQL审核 | 如何快速使用 SQLE 审核各种类型的数据库
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值