Tôi đang chạy MySQL trên máy tính Ubuntu của tôi. Tôi đã kiểm tra /etc/mysql/my.cnf
tập tin, nó cho thấy cơ sở dữ liệu của tôi thư mục tạm thời:LOAD DATA INFILE không hoạt động
...
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
...
Vì nó cho thấy, thư mục tạm thời máy chủ MySQL của tôi là /tmp
.
Tôi có một tập tin students.dat
, nội dung của tập tin này là như sau:
...
30 kate name
31 John name
32 Bill name
33 Job name
...
tôi sao chép các tập tin students.dat
trên để /tmp
thư mục. Sau đó, tôi chạy lệnh sau để tải dữ liệu từ students.dat
tập tin vào sinh viên bảng trong cơ sở dữ liệu của tôi:
LOAD DATA INFILE '/tmp/students.dat'
INTO TABLE school_db.students
FIELDS TERMINATED BY '\t'
LINES TERMINATED BY '\n'
(student_id, name, attribute)
Nhưng tôi nhận được thông báo lỗi trong MySQL console:
ERROR 29 (HY000): File '/tmp/students.dat' not found (Errcode: 13)
Tại sao mysql không thể tìm thấystudents.dat
tệp mặc dù tệp nằm trong thư mục tạm thời mysql?
P.S.
Các sinh viên bảng là như sau (đã có 4 bản ghi trong bảng trước khi chạy truy vấn LOAD DATA INFILE...
):
mysql> describe students;
+-------------------+--------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------------+--------------+------+-----+---------+-------+
| student_id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | MUL | NULL | |
| attribute | varchar(12) | YES | MUL | NULL | |
| teacher_id | int(11) | YES | | NULL | |
+-------------------+--------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
'LOCAL INFILE' là giải pháp thay thế. Một giải pháp để sử dụng nó như là có thể thay đổi quyền sở hữu tệp thành 'mysql'. Ngoài ra, tôi có hai cài đặt của cùng một máy chủ và máy khách MySQL, và một cài đặt hỗ trợ 'LOAD DATA INFILE' thông thường. Chỉ có sự khác biệt là '/ var/lib/mysql' của MySQL nằm trên một phân vùng khác từ'/tmp/' –