Details
-
Bug
-
Status: Closed (View Workflow)
-
Major
-
Resolution: Incomplete
-
10.4.24
-
Debian 9
Description
After server soft reboot, MySQL Server 10.4.24 cant start
I tried to start with all innodb_force_recovery modes from 1 to 6, one by one. But nothing recovered. In mode 6 mysqld hangs, and mysql -p hangs after password.
Please help to start mysql with some data losses, because data isnt very critical in a part, but critical in overall. And I have no backups because database is very large 1,4Tb
22-07-22 18:12:56 0 [Note] InnoDB: Using Linux native AIO
22-07-22 18:12:56 0 [Note] InnoDB: Mutexes and rw_locks use GCC atomic builtins
22-07-22 18:12:56 0 [Note] InnoDB: Uses event mutexes
22-07-22 18:12:56 0 [Note] InnoDB: Compressed tables use zlib 1.2.8
22-07-22 18:12:56 0 [Note] InnoDB: Number of pools: 1
22-07-22 18:12:56 0 [Note] InnoDB: Using SSE2 crc32 instructions
22-07-22 18:12:56 0 [Note] InnoDB: Initializing buffer pool, total size = 512M, instances = 1, chunk size = 128M
22-07-22 18:12:56 0 [Note] InnoDB: Completed initialization of buffer pool
22-07-22 18:12:56 0 [Note] InnoDB: If the mysqld execution user is authorized, page cleaner thread priority can be changed. See the man page of setpriority()
22-07-22 18:12:56 0 [Note] InnoDB: Starting crash recovery from checkpoint LSN=8117163271706
22-07-22 18:12:56 0 [Note] InnoDB: Starting final batch to recover 11069 pages from redo log.
22-07-22 18:12:56 0x7f3319fff700 InnoDB: Assertion failure in file /home/buildbot/buildbot/build/mariadb-10.4.25/storage/innobase/page/page0cur.cc line 1154
noDB: We intentionally generate a memory trap.
noDB: Submit a detailed bug report to https://jira.mariadb.org/
noDB: If you get repeated assertion failures or crashes, even
noDB: immediately after the mysqld startup, there may be
noDB: corruption in the InnoDB tablespace. Please refer to
noDB: https://mariadb.com/kb/en/library/innodb-recovery-modes/
noDB: about forcing recovery.
0722 18:12:56 [ERROR] mysqld got signal 6 ;
is could be because you hit a bug. It is also possible that this binary
one of the libraries it was linked against is corrupt, improperly built,
misconfigured. This error can also be caused by malfunctioning hardware.
report this bug, see https://mariadb.com/kb/en/reporting-bugs
will try our best to scrape up some info that will hopefully help
agnose the problem, but since we have already crashed,
mething is definitely wrong and this may fail.
rver version: 10.4.25-MariaDB-1:10.4.25+maria~stretch
y_buffer_size=536870912
ad_buffer_size=131072
x_used_connections=0
x_threads=122
read_count=0
is possible that mysqld could use up to
y_buffer_size + (read_buffer_size + sort_buffer_size)*max_threads = 6789305 K bytes of memory
pe that's ok; if not, decrease some variables in the equation.
read pointer: 0x0
tempting backtrace. You can use the following information to find out
ere mysqld died. If you see no messages after this, something went
rribly wrong...
ack_bottom = 0x0 thread_stack 0x80000
dr2line: 'mysqld': Нет такого файла
sqld(my_print_stacktrace+0x2e)[0x56082302ec5e]
sqld(handle_fatal_signal+0x3af)[0x560822a731af]
ib/x86_64-linux-gnu/libpthread.so.0(+0x110e0)[0x7f3380eef0e0]
ib/x86_64-linux-gnu/libc.so.6(gsignal+0xcf)[0x7f33802e7fff]
ib/x86_64-linux-gnu/libc.so.6(abort+0x16a)[0x7f33802e942a]
dr2line: 'mysqld': Нет такого файла
sqld(+0x59541d)[0x56082278f41d]
sqld(+0xbd1fa3)[0x560822dcbfa3]
sqld(+0xbaf48c)[0x560822da948c]
sqld(+0xbb044f)[0x560822daa44f]
sqld(+0x591220)[0x56082278b220]
sqld(+0xce2848)[0x560822edc848]
sqld(+0xd4ccc1)[0x560822f46cc1]
sqld(+0xc5e158)[0x560822e58158]
ib/x86_64-linux-gnu/libpthread.so.0(+0x74a4)[0x7f3380ee54a4]
ib/x86_64-linux-gnu/libc.so.6(clone+0x3f)[0x7f338039dd0f]
e manual page at https://mariadb.com/kb/en/how-to-produce-a-full-stack-trace-for-mysqld/ contains
formation that should help you find out what is causing the crash.
iting a core file...
rking directory at /var/lib/mysql
source Limits:
tal signal 11 while backtracing
Attachments
Issue Links
- relates to
-
MDEV-12353 Efficient InnoDB redo log record format
-
- Closed
-
-
MDEV-21724 Optimize page_cur_insert_rec_low() redo logging
-
- Closed
-
Kirill Gromov, thank you for the full stack trace.
MariaDB Server 10.6 replaced InnoDB’s earlier homebrew synchronization primitives with plain mutex, condition variable, and a homebrew shared/update/exclusive lock (
MDEV-24142).The sync_array is something that I removed in
MDEV-21452. InnoDB used to have some extra bookkeeping of all mutex or rw-lock waits, so that it could implement a watchdog against hangs (the infamous long semaphore wait messages). AfterMDEV-21452, there only is a watchdog for one specific mutex or rw-lock, dict_sys.mutex which was later merged to dict_sys.latch.The crash could theoretically occur due to some bug in the sync_array. I am not keen to debug that, especially since we know that the database is corrupted in the first place.
The stack trace also tells me that this crash occurs while constructing an earlier version of a record. With the following commands, you should know the name of the table, which I suppose you may already know:
frame 13
print prebuilt.table.name
print prebuilt.trx.mysql_thd.query_string
I previously suggested that the DB_TRX_ID (identifying the last transaction that modified the record) and DB_ROLL_PTR (pointing to an undo log record of the transaction identified by DB_TRX_ID if it was not committed and purged yet) in the index page may be inconsistent with the undo log page, because one of those pages is missing some updates, for example, if crash recovery was unable to apply redo log because of some corruption of the log.
Your best bet to extract some data from the database (or this table) would be to execute the following before trying to SELECT any data:
If that fails, you could try to start up the database with innodb_force_recovery=5 so that all undo logs will be ignored. The end result is the same: all transactions will be executed at the READ UNCOMMITTED isolation level.
Once you have rescued all data (and verified its consistency), you should discard the database and create a new one from the SQL dump.