最近测试使用tmpfs文件系统作为tmpdir选项存放临时文件的位置,具体步骤网上有很多,但是遇到了一个小bug。
MySQL的相关参数:
default-storage-engine = INNODB
innodb_flush_method=O_DIRECT
tmpdir = /tmp/mysqltmp

/tmp/mysqltmp目录为tmpfs。
使用以下语句创建Innodb类型的临时表:
SQL> create temporary table tmpdemo(a int) engine=innodb;
查看error日志有如下警告:
InnoDB: Failed to set O_DIRECT on file /tmp/mysqltmp/#sqla61_62b9_0.ibd: CREATE: Invalid argument, continuing anyway
InnoDB: O_DIRECT is known to result in 'Invalid argument' on Linux on tmpfs, see MySQL Bug#26662
虽然报错,但通过上面的信息可以看出并未影响正常的数据操作,实际情况也是如此,那么如何避免这种error呢?
1.创建memory或myisam的临时表代替innodb;
2.修改innodb_flush_method为非O_DIRECT,如O_DSYNC、fdatasync;
参考:
http://bugs.mysql.com/bug.php?id=26662
http://bugs.mysql.com/bug.php?id=45671