2011-12-12 31 views
7

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) 

Trả lời

10

Có một cái nhìn tại bưu thứ sáu từ file not found error. Có vẻ như nếu bạn chỉ định LOAD DATA LOCAL INFILE nên làm việc (Họ thêm LOCAL từ khóa)

+0

'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/' –

2

ERROR 29 (HY000): File '/tmp/file_name' not found (Errcode: 13)

Lỗi này xảy ra chủ yếu khi chúng tôi cố gắng để tải tập tin dữ liệu từ bất kỳ vị trí cho bất kỳ bảng trong cơ sở dữ liệu mysql.

Chỉ cần thay đổi chủ sở hữu của tệp.

1) Kiểm tra quyền của tập tin với lệnh này: ls -lhrt <filename>

2) Sau đó thay đổi sở hữu: chown mysql.mysql <filename>

3) Bây giờ thử LOAD DATA INFILE lệnh. Nó sẽ hoạt động.

Các vấn đề liên quan