mysql的數據都存放在用戶指定好或默認位置的data文件夾下,默認的tmpdir也存放在data文件夾中,這里存放著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,正常啟動。
說一說MySQL 臨時目錄這個參數:
命令行參數格式:–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)
2014-07-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.