您好,登錄后才能下訂單哦!
本篇內容介紹了“怎么解決MySQL中InnoDB: Failing assertion: format != 0錯誤”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
1、MySQL版本5.7.19,OS是MAC OSX在刪除表空間時,出現如下錯誤
[root@localhost][(none)]> drop tablespace ts1; ERROR 2013 (HY000): Lost connection to MySQL server during query
2、查看error.log日志,看樣子有點像是BUG
2018-04-09 16:00:21 0x700007f04000 InnoDB: Assertion failure in thread 123145435496448 in file ha_innodb.cc line 20927 InnoDB: Failing assertion: format != 0 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. 08:00:21 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=8388608 read_buffer_size=16777216 max_used_connections=1 max_threads=512 thread_count=2 connection_count=1 It is possible that mysqld could use up to key_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 25180932 K bytes of memory Hope that's ok; if not, decrease some variables in the equation. Thread pointer: 0x7f86b59eda00 Attempting backtrace. You can use the following information to find out where mysqld died. If you see no messages after this, something went terribly wrong... stack_bottom = 700007f03e90 thread_stack 0x40000 0 mysqld 0x000000010385b12a my_print_stacktrace + 58 1 mysqld 0x00000001037b7e30 handle_fatal_signal + 688 2 libsystem_platform.dylib 0x00007fff7ab81f5a _sigtramp + 26 3 mysqld 0x0000000104175c4b _ZZN10binary_log4Uuid9to_stringEPKhPcE11byte_to_hex + 78811 4 libsystem_c.dylib 0x00007fff7a9ac312 abort + 127 5 mysqld 0x0000000103ab1471 _Z23ut_dbg_assertion_failedPKcS0_m + 161 6 mysqld 0x0000000103970147 _Z11ib_senderrfP3THD14ib_log_level_tjz + 359 7 mysqld 0x0000000103982b27 _Z7ib_errfP3THD14ib_log_level_tjPKcz + 199 8 mysqld 0x0000000103984f9c _ZL25innobase_alter_tablespaceP10handlertonP3THDP19st_alter_tablespace + 1260 9 mysqld 0x00000001037353e4 _Z22mysql_alter_tablespaceP3THDP19st_alter_tablespace + 228 10 mysqld 0x00000001036c6920 _Z21mysql_execute_commandP3THDb + 12816 11 mysqld 0x00000001036c2d28 _Z11mysql_parseP3THDP12Parser_state + 872 12 mysqld 0x00000001036c1b98 _Z16dispatch_commandP3THDPK8COM_DATA19enum_server_command + 4728 13 mysqld 0x00000001036c2789 _Z10do_commandP3THD + 505 14 mysqld 0x000000010379ba44 handle_connection + 436 15 mysqld 0x0000000103b11756 pfs_spawn_thread + 310 16 libsystem_pthread.dylib 0x00007fff7ab8b6c1 _pthread_body + 340 17 libsystem_pthread.dylib 0x00007fff7ab8b56d _pthread_body + 0 18 libsystem_pthread.dylib 0x00007fff7ab8ac5d thread_start + 13 Trying to get some variables. Some pointers may be invalid and cause the dump to abort. Query (7f86b589dc30): drop tablespace ts1 Connection ID (thread ID): 4 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.
3、查看ha_innodb.cc源碼的20927行
/******************************************************************//** Use this when the args are passed to the format string from errmsg-utf8.txt directly as is. Push a warning message to the client, it is a wrapper around: void push_warning_printf( THD *thd, Sql_condition::enum_condition_level level, uint code, const char *format, ...); */ void ib_senderrf( /*========*/ THD* thd, /*!< in/out: session */ ib_log_level_t level, /*!< in: warning level */ ib_uint32_t code, /*!< MySQL error code */ ...) /*!< Args */ { va_list args; char* str = NULL; const char* format = innobase_get_err_msg(code); /* If the caller wants to push a message to the client then the caller must pass a valid session handle. */ ut_a(thd != 0); /* The error code must exist in the errmsg-utf8.txt file. */ ut_a(format != 0); va_start(args, code); #ifdef _WIN32 int size = _vscprintf(format, args) + 1; if (size > 0) { str = static_cast<char*>(malloc(size)); } if (str == NULL) { va_end(args); return; /* Watch for Out-Of-Memory */ } str[size - 1] = 0x0; vsnprintf(str, size, format, args); #elif HAVE_VASPRINTF int ret; ret = vasprintf(&str, format, args); if (ret < 0) { va_end(args); return; /* Watch for Out-Of-Memory */ } #else /* Use a fixed length string. */ str = static_cast<char*>(malloc(BUFSIZ)); if (str == NULL) { va_end(args); return; /* Watch for Out-Of-Memory */ } my_vsnprintf(str, BUFSIZ, format, args); #endif /* _WIN32 */ Sql_condition::enum_severity_level l; l = Sql_condition::SL_NOTE; switch (level) { case IB_LOG_LEVEL_INFO: break; case IB_LOG_LEVEL_WARN: l = Sql_condition::SL_WARNING; break; case IB_LOG_LEVEL_ERROR: /* We can't use push_warning_printf(), it is a hard error. */ my_printf_error(code, "%s", MYF(0), str); break; case IB_LOG_LEVEL_FATAL: l = Sql_condition::SEVERITY_END; break; } if (level != IB_LOG_LEVEL_ERROR) { push_warning_printf(thd, l, code, "InnoDB: %s", str); } va_end(args); free(str); if (level == IB_LOG_LEVEL_FATAL) { ut_error; } }
“怎么解決MySQL中InnoDB: Failing assertion: format != 0錯誤”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。