MySQL临时目录浅谈

情景

MySQL数据目录/data/mysql所在的上层目录/data,磁盘空间不足导致MySQL启动失败,所以清理了/data目录下除了mysql子目录外的其他无用目录。重启发现还是失败。检查错误日志。看到如下错误:
/usr/local/mysql/bin/mysqld: Can't create/write to file '/data/tmp/ibbLmEoD' (Errcode: 13 - Permission denied)
原来是清理无用目录时不小心把MySQL配置文件中指定的tmpdir--->/data/tmp目录也给删除了,导致MySQL Server启动时的一些临时文件或表无法写入,从而启动失败。重建目录并赋予正确的权限后,重启MySQL Server,正常启动。

查看临时文件存储目录

show variables like '%tmp%';
mysql> show variables like '%tmp%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| default_tmp_storage_engine | InnoDB   |
| max_tmp_tables             | 32       |
| slave_load_tmpdir          | /tmp     |
| tmp_table_size             | 16777216 |
| tmpdir                     | /data/tmp|
+----------------------------+----------+
5 rows in set (0.00 sec)
临时目录参数:
命令行参数格式: --tmpdir=path
配置文件参格式: tmpdir=path

临时目录解析

临时目录用于存储临时文件或临时表。值可以是一个使用“:”(Unix)或“;”(Windows)分隔的路径列表,这些路径可被轮流使用,以便将负载分到不同磁盘。
若MySQL server是作为Slave的角色,则不能将该目录指向基于内存文件系统的目录或者当主机重启时会被清理掉的目录,因为Slave需要这些文件复制临时表或执行LOAD DATA INFILE操作,这些文件丢失会导致复制失败。
这意味着不能将slave的tmpdir设置为linux系统默认的/tmp目录。对于Slave可以使用另一配置项slave_load_tmpdir来设置其临时目录,这样Slave可以不使用通用选项tmpdir设置的临时目录。对于非Slave角色的MySQL server没此限制。
若临时目录不存在或权限不正确不仅会引起MySQL Server启动失败,还会导致其他可能使用到临时目录的MySQL实用程序运行异常。
很多MySQL相关程序会从MySQL Server的配置文件读取选项值,比如全备程序xtrabackup,下面这个错误就是因为MySQL Server配置文件中指定的临时目录不存在造成的。
xtrabackup_56: Can't create/write to file '/data/tmp/ibHbumcM' (Errcode: 2 - No such file or directory)
2015-11-23 16:04:42 7f1b25c607e0  InnoDB: Error: unable to create temporary file; errno: 2
xtrabackup: innodb_init(): Error occured.
innobackupex: Error: 
innobackupex: ibbackup failed at /usr/bin/innobackupex line 389.

0 个评论

要回复文章请先登录注册