首页 > mysql ERROR 1878 (HY000): Temporary file write failure

mysql ERROR 1878 (HY000): Temporary file write failure

我在给message表增加字段时报错。
使用的SQL

ALTER TABLE message ADD COLUMN syncid int(10) NOT NULL DEFAULT 0;

MYSQL报错如下:

ERROR 1878 (HY000): Temporary file write failure.

以下是message表的信息:
表类型:InnoDB
行数:15786772
索引长度:1006.89 MB
数据长度:11.25 GB

已经排除了磁盘空间不够的问题。
服务器64G内存还有50%以上的剩余。
服务器操作系统 CentOS 64位。
MySQL Ver 14.14 Distrib 5.6.15, for Linux (x86_64) using EditLine wrapper

附加一部分到出现报错时候的strace日志。

2014-08-26 17:18:29 39108 [ERROR] InnoDB: Could not find a valid tablespace file for 'cfm/#sql-ib1445'. See http://dev.mysql.com/doc/refman/5.6/en/innodb-troubleshooting-datadict.html for how to resolve the issue.
2014-08-26 17:18:29 39108 [ERROR] InnoDB: Tablespace open failed for '"cfm"."#sql-ib1445"', ignored.
2014-08-26 17:18:29 39108 [Note] InnoDB: 128 rollback segment(s) are active.
2014-08-26 17:18:30 39108 [Note] InnoDB: Waiting for purge to start
2014-08-26 17:18:30 39108 [Note] InnoDB: 5.6.15 started; log sequence number 919641462089
2014-08-26 17:18:30 39108 [Note] Server hostname (bind-address): '0.0.0.0'; port: 3306
2014-08-26 17:18:30 39108 [Note]   - '0.0.0.0' resolves to '0.0.0.0';
2014-08-26 17:18:30 39108 [Note] Server socket created on IP: '0.0.0.0'.
2014-08-26 17:18:30 39108 [Note] Event Scheduler: Loaded 0 events
2014-08-26 17:18:30 39108 [Note] /usr/local/mysql/bin/mysqld: ready for connections.
Version: '5.6.15'  socket: '/var/lib/mysql/mysql.sock'  port: 3306  Source distribution
2014-08-26 17:22:36 7f99b0686700 InnoDB: Error: Write to file (merge) failed at offset 7486832640.
InnoDB: 1048576 bytes should have been written, only 663552 were written.
InnoDB: Operating system error number 0.
InnoDB: Check that your OS and file system support files of this size.
InnoDB: Check also that the disk is not full or a disk quota exceeded.
InnoDB: Error number 0 means 'Success'.
InnoDB: Some operating system error numbers are described at
InnoDB: http://dev.mysql.com/doc/refman/5.6/en/operating-system-error-codes.html

已解决问题了,原因是mysql的tmpdir分区的剩余空间大小没有message大。
mysql在alert table时需要的临时空间要比该表才行。

【热门文章】
【热门文章】