ps:windows下的mariadb版本10.1.9
问题1
mysql启动不了,不能初始化tc日志,导致数据库mariadb启动失败
[Note] Recovering after a crash using tc.log
[ERROR] Can't init tc log
[ERROR] Aborting
解决
FIX:
linux:rm /var/lib/mysql/tc.log
windows:删除mysq下的data文件夹中的tc.log
Then:
重启mysql服务:sudo service mysql start
原因
tc.log is the distributed transaction (XA) log coordinator, which is created by a fresh installation of MariaDB, not in Oracle MySQL.
tc_log是事务协调器日志,用于协调影响多个具有XA功能的存储引擎的事务。如果启用了两个或更多具有XA功能的存储引擎,则事务协调器日志必须可用
在咱们的程序中使用了分布式事务,数据库引擎是InnoDB,使用的是基于内存映射和文件的事务处理协调器日志,其主要目的之一是崩溃修复( crash recovery)
但如果服务器崩溃了,并且你更改了加载的支持XA的存储引擎的数量,也就是出现以下问题:
2018-11-30 23:08:49 140046048638848 [Note] Recovering after a crash using tc.log
2018-11-30 23:08:49 140046048638848 [ERROR] Recovery failed! You must enable exactly 3 storage engines that support two-phase commit protocol
2018-11-30 23:08:49 140046048638848 [ERROR] Crash recovery failed. Either correct the problem (if it's, for example, out of memory error) and restart, or delete tc log and start mysqld with --tc-heuristic-recover={commit|rollback}
2018-11-30 23:08:49 140046048638848 [ERROR] Can't init tc log
2018-11-30 23:08:49 140046048638848 [ERROR] Aborting
翻译:
2018-11-30 23:08:49 140046048638848 [注意]使用tc.log崩溃后恢复
2018-11-30 23:08:49 140046048638848 [ERROR]恢复失败! 您必须确切启用3个支持两阶段提交协议的存储引擎
2018-11-30 23:08:49 140046048638848 [错误]崩溃恢复失败。 纠正问题(例如,出现内存不足错误)并重新启动,或删除tc日志并使用--tc-heuristic-recover = {commit | rollback}启动mysqld
2018-11-30 23:08:49 140046048638848 [错误]无法初始化tc日志
2018-11-30 23:08:49 140046048638848 [ERROR]正在中止
查看mariadb数据库引擎
This is not a bullet-proof check, if one wants to fool it and get inconstent data, he can unload XA-capable engine and replace it with a different XA-capable engine. Or one can simply delete the tc-log file. This check is only designed to prevents user mistakes, not malicious actions.
大致意思说这是一个检查,用于防止用户错误,是故意这么做的,在恢复期间必须存在崩溃之前的所有具有XA功能的引擎,否则您将会有事务和数据不一致的风险。
解决办法就是:卸载支持XA的引擎并将其替换为其他支持XA的引擎。或者可以简单地删除tc-log文件
可能还会遇到同样的类似的其他问题:
基于内存映射和文件的事务协调器日志(tc.log)的标头已损坏
2018-09-19 4:29:31 0 [Note] Recovering after a crash using tc.log
2018-09-19 4:29:31 0 [ERROR] Bad magic header in tc log
2018-09-19 4:29:31 0 [ERROR] Crash recovery failed. Either correct the problem (if it's, for example, out of memory error) and restart, or delete tc log and start mysqld with --tc-heuristic-recover={commit|rollback}
2018-09-19 4:29:31 0 [ERROR] Can't init tc log
2018-09-19 4:29:31 0 [ERROR] Aborting
翻译:
2018-09-19 4:29:31 0 [注意]使用tc.log崩溃后恢复
2018-09-19 4:29:31 0 [错误] tc日志中的错误魔术头
2018-09-19 4:29:31 0 [错误]崩溃恢复失败。 纠正问题(例如,出现内存不足错误)并重新启动,或删除tc日志并使用--tc-heuristic-recover = {commit | rollback}启动mysqld
2018-09-19 4:29:31 0 [错误]无法初始化tc日志
2018-09-19 4:29:31 0 [错误]中止
问题2
mysql二进制日志文件出错导致mysql服务无法启动
mariadb日志
不能初始化tc日志,导致数据库mariadb启动失败
mysqld: File '.\mysql-bin.000370' not found (Errcode: 2)
141120 13:23:13 [ERROR] Failed to open log (file '.\mysql-bin.000370', errno 2)
141120 13:23:13 [ERROR] Could not open log file
141120 13:23:13 [ERROR] Can't init tc log
141120 13:23:13 [ERROR] Aborting
说明
查询得知Mysql Data文件夹生成的大量mysql-bin.xxxxx文件是叫做MySQL Binary Log。主要有以下两个作用:
1、数据恢复。
2、在主从server上提高复制的可靠性。
解决
进入mysql/data文件夹下手动删除mysql-bin.xxxxx相关的文件
进入mysql命令行运行RESET MASTER删除所有日志
rm /var/lib/mysql/mysql-bin.000370
Then:
sudo service mysql start
相关参考地址