最近测试使用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
转载于:https://blog.51cto.com/cau99/351120