文章分析與介紹關於在使用MySQL中提示“Can’t create/write to file xxx (Errcode: 13)”錯誤問題的原因與處理方法。
最近碰到一個 MySQL不能創建臨時文件的錯誤,解決過程中學到一些知識,這裡分享一下,希望對碰到類似問題的同學有所幫助~
關於MySQL臨時文件:
1、MySQL使用環境變量TMPDIR的值作為保存臨時文件的目錄的路徑名。如果未設置TMPDIR,MySQL將 使用系統的默認值,通常為/tmp、/var/tmp或/usr/tmp。
2、MySQL會以隱含方式創建所有的臨時文件。這樣,就能確保中止mysqld時 會刪除所有臨時文件。
3、 進行排序時(ORDER BY或GROUP BY),MySQL通 常會使用1個或多個臨時文件。
4、對於某些SELECT查 詢,MySQL還會創建臨時SQL表。 它們不是隱含表,並具有SQL_*形 式的名稱。
分析問題:
如果某些查詢遇 到”Can’t create/write to file xxx (Errcode: 13)“類型的錯誤,它意味著MySQL不能為臨時 目錄下的結果集創建臨時 文件。
Google查詢得知以下三種情況可能會導致此問題:
①、%TMPDIR% 文件夾權限不夠。
②、%TMPDIR% 文件夾的磁盤滿了,文件寫不 進去了,清空 TEMP 文件夾;
③、第三方限制(如殺毒軟件的限制)
解決方法:
方法一、在my.inip配置文件中查找”[mysqld]“,在其下添加一行:
tmpdir=%你想指定的MySQL臨時文件目錄(例如 D:temp)%
方法二、如果機器上裝了殺毒軟件,可以嘗試排除對臨時文件的掃描。
360殺毒(已測試過):
設置—>>>白名單設置—>>>添加目錄—>>>%TMPDIR%–>>> 確定。
麥咖啡(網上信息,未親自測試 過):
打開McAfee VirusScan控制台->按訪問掃描程序->屬性->所有進程->檢測項->排除項->添加%TMPDIR%,排除時間選擇讀取時寫入時。
資源:
Can’t create/write to file …解決方法—-hi.baidu.com/%D3%B2%BA%BA%D6%DD%B3%A4/blog/item/42166e9bccbb97bfc9eaf4ca.html
A.4.4. MySQL將臨時文件儲存在哪裡—dev.mysql.com/doc/refman/5.1/zh/problems.html#temporary-files
A.2.12. 無法創建文件/寫入文件—dev.mysql.com/doc/refman/5.1/zh/problems.html#cannot-create
MySQL更多問題—dev.mysql.com/doc/refman/5.1/zh/problems.html
修改方法
下面介紹兩種MySQL修復表的方法。
1. myisamchk
使用myisamchk必須暫時停止MySQL 服務器。例如,我們要檢修blog數據庫。執行以下操作:
# service mysql stop (停止MySQL)
# myisamchk -r /datawhere/blog/*MYI
# service mysql start myisamchk 會自動檢查並修復數據表中的索引錯誤。
2. mysqlcheck
使用mysqlcheck無需停止MySQL,可以進行熱修復。操作步驟如下:(檢修 blog庫)
# mysqlcheck -r -uroot -p blog
注意,無論是 myisamchk還是mysqlcheck,一般情況下不要使用-f強制修復,-f參數會在遇到一般修復無法成功的時候刪除
部分出錯數據以嘗試修復。所以,不到萬不得已不要使用-f。
如果你怕使用命令有問題,可以使用phpmyadmin直接進行修復哦