首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

mysqlimport Error 13 解決實錄:--local 參數決定讀取端(客戶端 vs 服務端)

     編輯:MySQL 資料庫相關知識

使用 mysqlimport 導入數據時遇到 Error 13: Can't get stat of '/usr/local/mysql/data/backup/chen.sql' (Errcode: 2),明明文件存在且權限正常。根因在於 mysqlimport 預設在服務端尋找文件,需加 --local 指定從客戶端讀取。

錯誤現場

root@zhou:/usr/local/mysql# mysqlimport -uroot -p123 -h127.0.0.1 -P3306 test backup/chen.sql
mysqlimport: Error: 13, Can't get stat of '/usr/local/mysql/data/backup/chen.sql' (Errcode: 2), when using table: chen

檢查權限無誤:

root@zhou:/usr/local/mysql# perror 13
OS error code 13: Permission denied
root@zhou:/usr/local/mysql# ll backup/
drwxr-xr-x  2 mysql mysql 4096 Jan 10 17:30 backup/

同機器用 LOAD DATA INFILE 卻成功:

mysql> LOAD DATA INFILE '/usr/local/mysql/backup/chen.sql' INTO TABLE chen;
Query OK, 6 rows affected

根因分析:mysqlimport vs LOAD DATA INFILE 的文件路徑語義差異

命令默認讀取端路徑解析位置需權限
mysqlimport (無 --local)服務端服務端數據目錄下MySQL 進程讀權限
mysqlimport --local客戶端客戶端本地路徑客戶端用戶讀權限
LOAD DATA INFILE服務端服務端數據目錄下MySQL 進程讀權限 + secure_file_priv
LOAD DATA LOCAL INFILE客戶端客戶端本地路徑客戶端用戶讀權限 + local_infile=1

解決方案:加上 --local 參數

root@zhou:/usr/local/mysql# mysqlimport -uroot -p123 -h127.0.0.1 -P3306 test backup/chen.sql --local
test.chen: Records: 6  Deleted: 0  Skipped: 0  Warnings: 0

即時成功,導入 6 條記錄。

深度補充:secure_file_priv 與 local_infile 兩大開關

  • secure_file_priv:限制 LOAD DATA INFILE / SELECT ... INTO OUTFILE 的服務端讀寫目錄。
    SHOW VARIABLES LIKE 'secure_file_priv'; 若為 NULL 則禁用,若為 /var/lib/mysql-files/ 則限定該目錄。
  • local_infile:控制是否允許 LOAD DATA LOCAL INFILE / mysqlimport --local。
    服務端:SET GLOBAL local_infile=1; 或啟動參數 --local-infile=1。
    客戶端:mysql --local-infile=1。

最佳實踐建議

  1. 跨機器導入必加 --local——文件在客戶端,不在服務端。
  2. 大文件導入優先用 LOAD DATA LOCAL INFILE——支援並行、緩衝、錯誤處理更靈活。
  3. 生產環境謹慎開啟 local_infile——評估安全風險,用畢即關。
  4. 腳本化導入時記錄 mysqlimport 返回碼——非 0 即失敗,便於自動化巡檢。

一個 --local 參數,揭示了客戶端/服務端架構下文件操作的本質差異。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved