虚拟机 centos7.9 x86_64 glibc2.17 mysql-5.7.34社区版
报错如下
2023-10-18 [ERROR] [FATAL] InnoDB: fsync() returned EIO, aborting.
2023-10-18 InnoDB: Assertion failure in thread xxxx in file ut0ut.cc line 921
堆栈信息如下(已处理无关信息)
my_print_stacktrace
handle_fatal_signal
/lib64/libpthread.so.0
/lib64/libc.so.6
print_timestamp
os_file_flush_func
fil_flush
log_write_up_to
ha_flush_logs
MYSQL_BIN_LOG
ha_commit_trans
trans_commit_stmt
mysql_execute_command
mysql_parse
dispatch_command
do_command
handle_connection
pfs_spawn_thread
/lib64/libpthread.so.0
/lib64/libc.so.6
通过堆栈信息基本上确认为磁盘问题.
1. mysql_execute_command(commit) 用户commit
2. ha_flush_logs
3. log_write_up_to(lsn,flush_to_disk) 刷日志
4. fil_flush OS刷盘,可能写cache. Flushes to disk possible writes cached by the OS
5. os_file_flush_func --> os_file_fsync_posix --> fsync(file) 失败,进入如下处理逻辑(抛出fetal和EIO,并返回打印堆栈信息)
case EIO:
ib::fatal()
<< "fsync() returned EIO, aborting.";
break;
查看dmesg日志发现磁盘相关的报错:
blk_update_request: I/0 error, dev xxx, sector xxxx
Unknown completion status
也印证了磁盘有问题, 而这块盘恰好就是 mysql使用的磁盘.
该报错为磁盘问题, 并非mysql问题, 故直接启动mysqld即可, mysql会自动处理未提交的事务的.
建议修复下该磁盘, 或者换一块盘. 不然后面可能还会出现该错误.
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。