磁盘满导致maraid10崩溃,启动报错:Can‘t init tc log

问题描述

今天周一,开发一早在测试库导库,复现BUG问题,导了几次发现maraidb(版本10.3.8)突然崩溃,使用命令启动,启动失败
查看err.log提示硬盘空间满

image.png
使用df -h,发现mysql的磁盘确实满了,使用空间为0,需要删除binlog文件

处理步骤

1. 手动删除binlog

找到binlog.index,只删除日期最久的,保留最后几个时间近的,或者删除其他文件,腾出空间,使mysql能正常启动image.png

全部删除

rm -f master1-bin.00000*

删除指定binlog

例如删除1-10的binlog文件

rm -f master1-bin{000001..000010}

再次启动,还是报错,提示

[ERROR] Found 1 prepared transactions! It means that mysqld was not shut down 
properly last time and critical recovery information (last binlog or tc.log file) 
was manually deleted after a crash. 
You have to start mysqld with --tc-heuristic-recover switch to commit or 
rollback pending transactions.

大意是:mariadb因为非法关闭,并且用于恢复错误信息的binlog或者tc.log被手动删除,必须使用参数 --TC-Heuristic-Recover 启动mySQLD,才能提交或回滚挂起的事务。

编辑my.cnf,增加配置文件:

tc-heuristic-recover=rollback

再次启动

systemctl start mariadb

然后在mysql.cnf里注释掉:**tc-heuristic-recover=rollback****,
同时删除掉mysql目录里的:**ib_logfile0ib_logfile1tc.log ( 如果mysql目录里没有可以忽略掉)
image.png
image.png
再次启动成功;如果提示:Can't init tc log
说明你没有开启binlog日志,一定要开启,不然启动不起来!

2023-05-22  9:47:02 0 [Note] Recovering after a crash using tc.log
2023-05-22  9:47:02 0 [ERROR] Can't init tc log
2023-05-22  9:47:02 0 [ERROR] Aborting
2. 关于tclog

tclog全称为:transaction coordinator log,事务协调日志,多用于XA存储引擎,事务协调器主要有如下两种:

  1. 基于bin-log的事务协调器日志
  2. 基于Memory-mapped(内存映射文件的事务)协调器日志

如果在服务器上启用了binlog,则服务器将使用基于binlog的事务协调器日志;
如果没有开启binglog,它将使用基于内存映射文件的事务协调器日志,即tclog
实际上有些情况下,比如mariadb突然崩溃,则强制使用tc事务协调器,虽然你的存储引擎是innodb,不得不说这个bug也确实挺坑人。
好在mariadb在10.4.3中去掉了对xa存储引擎的支持,不在使用tc事务协调器日志了。
详细tc介绍请参考官方文档:https://mariadb.com/kb/en/transaction-coordinator-log-overview/

3. 使用mysql删除binlog

如果要进一步释放磁盘空间,可以再次进行binlog的删除,则可以进行如下操作,如果在手动删除里进行了完全的binlog清理,这一步可以忽略掉
登录mysql,执行删除binlog命令

mysql> purge binary logs to 'mysql-bin.000010'; # 删除000010之前的所有binlog日志

mysql> purge binary logs before '2023-05-21 23:59:59'; # 删除2023-05-11 23:59:59之前的所有binlog日志

或者更改binlog保存天数,然后在刷新log,是修改的新天数生效
在my.cnf里添加,永久生效

expire_logs_days = 3 # 更改binlog保存天数

然后在mysql执行

flash logs;

临时修改,重启mariadb则恢复原由设置

# 查看当前保存天数
show variables like 'expire_logs_days';

# 配置保存天数为3天
SET expire_logs_days=3

# 生效参数
flash logs;
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值