ERROR 29 (HY000): File '/home/user/data.txt' not found (Errcode: 13)
Errcode 13 = Permission denied。MySQL 服務進程(通常以 mysql 用戶運行)無權讀取用戶目錄下的檔案。
# 查詢 MySQL 安全目錄
SHOW VARIABLES LIKE 'secure_file_priv';
-- 輸出通常為 /var/lib/mysql-files/ 或 NULL(不限制)
# 移動檔案
sudo cp /home/user/Downloads/data.txt /var/lib/mysql-files/
sudo chown mysql:mysql /var/lib/mysql-files/data.txt
sudo chmod 644 /var/lib/mysql-files/data.txt
LOAD DATA INFILE 'data.txt' INTO TABLE my_table
CHARACTER SET gbk
FIELDS TERMINATED BY '\t' ENCLOSED BY '' ESCAPED BY '\\'
LINES TERMINATED BY '\n'
(col1, col2, col3);
CHARACTER SET gbk:指定來源檔案編碼,MySQL 會自動轉換至表字符集FIELDS/LINES:精確匹配檔案格式SET SESSION bulk_insert_buffer_size = 256M;
SET SESSION myisam_sort_buffer_size = 256M;
SET GLOBAL key_buffer_size = 256M;
ALTER TABLE my_table DISABLE KEYS;
LOAD DATA INFILE ...;
ALTER TABLE my_table ENABLE KEYS;
實測效果:從 10 分鐘降至 3 分 55 秒。
SET SESSION innodb_flush_log_at_trx_commit = 2;(匯入期間暫犧牲持久性換速度)SET SESSION unique_checks=0; SET SESSION foreign_key_checks=0;COMMIT 一次(需腳本控制)-- 來源 GBK,目標表 utf8mb4
LOAD DATA INFILE 'data.txt' INTO TABLE target_table
CHARACTER SET gbk
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
LINES TERMINATED BY '\r\n'
IGNORE 1 LINES -- 跳過標題行
(col1, col2, col3);
FILE 權限:GRANT FILE ON *.* TO 'user'@'host';secure_file_priv 限制目錄時,檔案必須置於該目錄LOAD DATA LOCAL INFILE(客戶端讀檔傳輸),需客戶端與伺服器均啟用 local_infile=1