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 设置大点使用其他方法。