现象
数据库执行ddl时报错:[HY000][1878] Temporary file write failure.
原因
临时目录所在磁盘空间不足,参考相关文档:
MySQL存储临时文件的位置
MySQL系统变量tmpdir
InnoDB参数innodb_tmpdir
解决
查看磁盘空间
执行 df -h
,确认临时目录 /tmp
所在磁盘空间不足。
方案一:清理磁盘
分析空间占用
执行 du --max-depth=1 -h /
,逐步找到占用最大的文件,发现是 /home/redis/2/appendonly.aof
占用非常大。
重写Redis AOF文件
执行 ./redis-cli -h 127.0.0.1 -p 6380 bgrewriteaof
,执行完毕后AOF文件大小就减小了很多。
方案二:修改临时目录路径
确认MySQL配置文件
执行 ps -ef
,查看相关进程
修改MySQL配置文件
创建新临时目录 mkdir -p /data/tmp
修改目录属主 chown -R mysql:mysql /data/tmp
修改目录权限 chmod a+w /data/tmp
修改MySQL配置文件 vim /home/imoosso_87/my.cnf
,在[mysqld]下增加 tmpdir
重启数据库
/home/imoosso_87/bin/mysqladmin -u devops -p --socket=/tmp/mysqlimoosso_87.sock1 shutdown
/bin/sh /home/imoosso_87/bin/mysqld_safe --defaults-file=/home/imoosso_87/my.cnf --datadir=/data/imoosso_87 --pid-file=/data/imoosso_87/192-168-11-163.pid >/dev/null 2&>1 &
参考文章
【已解决】Temporary file write failure
MySQL系列:mysql的3种启动、停止方式
Mysql配置文件my.cnf配置及配置参数详解