MySQL 主从断开后遇到的问题

今天MySQL从库无缘无故挂了,去查看日志看到以下错误

2023-01-31 08:43:29 24837 [ERROR] InnoDB: space header page consists of zero bytes in tablespace ./temp/table_temp.ibd (table temp/table_temp)

注意: 以下表是MySQL的临时表。

直接启动MySQL会报错,我就把MySQL的data/temp目录里table_temp.frm,table_temp.ibd 文件移到其他地方,然后启动成功了,我再移回去。

然后用HeidiSQL程序清空表又提示表不存在。

mysql> TRUNCATE TABLE temp.table_temp;
ERROR 1146 (42S02): Table 'temp.table_temp' doesn't exist

在服务器上用 show tables; 查看表是存在的。

然后我看MySQL的data目录里table_temp.frm,table_temp.ibd 文件都在呀,试试drop命令看能不能删除;

mysql> drop table temp.table_temp;
Query OK, 0 rows affected (0.02 sec)

也能删除,然后试试create table 创建表,出现了以下错误;

ERROR 1813 (HY000): Tablespace for table 'temp.table_temp' exists. Please DISCARD the tablespace before IMPORT.

这就很奇怪了,我都删除表里,怎么还不能创建?

show tables; 查看表是不存在的,只能看MySQL的data目录里,好家伙table_temp.ibd 文件还在,删除它,就可以创建表了。

还有一种情况是MySQL的data目录里没有table_temp.frm,table_temp.ibd 文件,但是创建表提示存在,就只能改存储引擎了。比如把 innodb 改成 MyISAM。

可以预防上面的错误发生,比如优化sql语句、检查内存使用情况、MYSQL 配置文件中的 sort_buffer_size 、read_rnd_buffer_size、read_buffer_size 设置大点使用其他方法。

发表回复 0

Your email address will not be published. Required fields are marked *