现象
数据库执行ddl时报错:[HY000][1878] Temporary file write failure.
原因
创建临时表的时候,因为临时空间不够,导致临时文件写入失败
解决
MySQL官方文档中的说明
1.查看临时空间路径
SHOW VARIABLES LIKE 'tmpdir'
我的是默认路径,根据官方文档及网友们提供的思路,修改临时空间即可。
2.查看要修改表的数据大小
如果已经修改过临时空间,那么可以尝试扩展临时空间大小,这个我没有尝试
SELECT
table_name AS `Table`,
round(((data_length + index_length) / 1024 / 1024), 2) `Size in MB`
FROM information_schema.TABLES
WHERE table_schema = '库名' and TABLE_NAME='表名';
3.修改临时空间路径
mkdir -p /data/tmp
chown -R mysql:mysql /data/tmp
chmod a+w /data/tmp
修改MySQL配置
vim /etc/my.cnf
把tmpdir设置到 /data/tmp
tmpdir=/data/tmp
修改完成后,需要重启mysql服务
service mysqld restart
参考资料
记一次 Mysql DDL 错误 [Temporary file write failure]
mysql 修改大表字段,报错ERROR 1878 (HY000): Temporary file write failure. 用pt-online-schema-change
【MySQL】ERROR 1878 (HY000): Temporary file write failure.
mysql ERROR 1878 (HY000): Temporary file write failure错误
MySQL官方文档——15.12.3 Online DDL Space Requirements
MySQL官方文档——tmpdir
MySQL官方文档——8.4.4 MySQL中内部临时表的使用