300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > mysql中大数据表alter增加字段报错:1034 Incorrect key file for table 'table_name'; try to repair it...

mysql中大数据表alter增加字段报错:1034 Incorrect key file for table 'table_name'; try to repair it...

时间:2021-04-27 20:15:31

相关推荐

mysql中大数据表alter增加字段报错:1034 Incorrect key file for table 'table_name'; try to repair it...

mysql中大数据表alter增加字段报错:"1034 Incorrect key file for table 'table_name'; try to repair it"

现象描述: mysql中大数据表执行alter增加字段时,/tmp的目录爆满,并且报错"1034 Incorrect key file for table 'table_name'; try to repair it"。

故障分析

1、查询MySQL官网得知:

*“ALTER TABLE运行时会对原表进行临时复制,在副本上进行更改,然后删除原表,再对新表进行重命名。在执行ALTER TABLE时,其它用户可以阅读原表,但是对表的更新和修改的操作将被延迟,直到新表生成为止。新表生成后,这些更新和修改信息会自动转移到新表上。

2、通过分析可知在执行sql的时候,创建临时表进行排序的时候,/tmp的空间不足。

当事务开始时,它将缓冲区语句分配一个binlog_cache_size大小的缓冲区(我这里设置的是32768bytes)。 如果一个语句大于此,线程将打开一个临时文件来存储事务(默认是存放在/tmp/目录下)。当线程结束时,临时文件会自动被删除。上面就是因为事务里面的临时文件超过缓存区大小时,被放到/tmp目录下了,但是这个临时文件实在太大了,导致磁盘空间不足告警了。

MYSQL使用tmpdir情况: 1、执行计划file sort 文件名字MY开头lsof|grep delete如:/tmp/MYdRH1GW (deleted)2、大事物binary log缓存 文件名字ML开头lsof|grep delete如:/tmp/MLq9INFu (deleted)3、压缩的tempory table CREATE TEMPORARY TABLE tmp_table1(id int) ROW_FORMAT=COMPRESSED ;ls /tmp/如:#sql6b82_6_7.frm#sql6b82_6_7.ibd4、online DDL 涉及排序比如add keyalter table testsort add key(id);lsof|grep delete如:/tmp/ibCxlYQg (deleted)/tmp/ib51nvZ1 (deleted)设置 innodb_tmpdir可以将这类文件放到指定的目录

故障处理

1、无法扩展/tmp的大小,所以就修改mysql中tmpdir的位置,由于该参数是只读参数,只能在f中修改,重启生效

2、创建临时目录,并且修改权限

chmod 777 /data/tmp #必须修改权限,让启动mysql的账户是可读写的. 此处是在root下创建,也可以切换到mysql用户下,然后创建目录,这样默认mysql就有读写权限了.

3、修改f

tmpdir = /data/tmp

4、重启mysql实例

5、查看tmpdir变量值

备注:tmpdir变量已经修改生效了,后续执行SQL过程中生成的临时文件都会存储在这个目录下了.

6、重新执行sql语句,执行成功

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。