MySQL nhập tệp csv ERROR 13 (HY000): Không thể lấy số liệu của /path/file.csv (Errcode: 2)


16

Tôi là người mới bắt đầu tuyệt đối với MySQL (5.5.34) / Linux (Ubuntu 12.04 LTS) `

Tôi đã tạo ra một cơ sở dữ liệu đơn giản với một bảng. Khi cố gắng nhập dữ liệu vào nó thông qua tệp 'data_test.csv, thông báo lỗi 13 xuất hiện.

Xuất phát từ Terminal sau:

mysql> source /home/g/stockrecdb/load_test.sql;
Database changed
ERROR 13 (HY000): Can't get stat of '/home/stockrecdb/data_test.csv' (Errcode: 2)
mysql> 

Lưu ý: nếu sử dụng LOCAL trong LOAD DATA LOCAL INFILE sẽ xuất hiện lỗi: ERROR 1148 (42000): Lệnh được sử dụng không được phép với phiên bản MySQL này

Câu trả lời:


26

Tôi hy vọng bạn đang sử dụng LOAD DATA INFILE.

Hãy thử sử dụng LOAD DATA LOCAL INFILEthay vì LOAD DATA INFILE.

Vấn đề khác có thể là vấn đề này, vui lòng truy cập các liên kết sau: MySQL LOAD DATA.

Khi bạn đăng nhập vào MySQL, hãy làm như dưới đây,

abdul@xmpp3:~/Desktop/Jiva$ mysql -uroot -p --local-infile
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 257
Server version: 5.5.29-0ubuntu0.12.04.1-log (Ubuntu)

Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use mydb;


mysql> LOAD DATA LOCAL INFILE '/home/abdul/Desktop/STATISTIC_T.csv' INTO TABLE STATISTIC_T  FIELDS TERMINATED BY '|' ENCLOSED BY '"' LINES TERMINATED BY '\n'  IGNORE 1 LINES;

Bây giờ tải CSV của bạn bằng cách sử dụng LOAD DATA LOCAL INFILE, chúng tôi cần sử dụng --local-infiletrước khi chúng tôi tải CSVvào vesrsions MySQL mới, vì lý do bảo mật.


3

Mặc dù câu trả lời trên đã giải quyết được vấn đề cho OP, tôi cảm thấy mình nên đóng góp về cách tôi giải quyết vấn đề tương tự. Lỗi 13 là do quyền truy cập tệp không chính xác hoặc không đủ. Trong trường hợp của tôi, điều này đã giảm xuống SELinux. Nếu bạn đang sử dụng SELinux, có thể tìm thấy cách khắc phục để thêm đường dẫn tệp dữ liệu của bạn vào các thư mục được phép cho MySQL trong câu trả lời này: /programming//a/3971632/1449160


2

MySQL yêu cầu tệp CSV phải nằm trong một thư mục mà nó có thể truy cập.

Di chuyển tệp của bạn từ "/ home / stockrecdb /" sang "/ tmp" cũng có thể giải quyết vấn đề.


1

Tôi đã có thông báo lỗi chính xác Error 13 (HY000)này đã được giải quyết bằng cách sử dụng LOCALtùy chọn được đề xuất bởi Abdul Manaf. Tuy nhiên, tôi đã bị kẹt với tệp CSV có kích thước 101GB. Trong khi cố gắng nhập tệp CSV này, hệ thống đã báo cáo Cảnh báo không gian đĩa THẤP và tác vụ nhập chưa hoàn tất. Thật khó chịu, tiện ích đĩa Gui thậm chí df -hlệnh cho thấy thư mục gốc của tôi còn hơn 85GB dung lượng đĩa.

Sau đó tôi biết rằng LOCALtùy chọn sao chép tệp CSV vào một vị trí tạm thời trong thư mục gốc /. Sau đó, nó đọc từ tập tin tạm thời. Do tệp CSV 101GB của tôi lớn hơn dung lượng trống còn lại trong thư mục gốc của tôi / Tôi đã thấy cảnh báo đĩa thấp, tuy nhiên, điều này không được phát hiện trong nhiều GUI và các công cụ dựa trên lệnh ngoại trừ trình giám sát hệ thống mà tôi nhận ra sau này. Vì tôi đang làm việc trên cơ sở dữ liệu MySQL hơn 300 GB, tôi đã phải chuyển thư mục dữ liệu MySQL sang một đĩa bên trong khác và tôi đang nhập CSV từ một đĩa cứng ngoài. Sao chép tệp CSV 101GB vào thư mục dữ liệu MySQL trong đĩa bên trong cho phép tôi chạy LOAD DATA INFILElệnh mà không có bất kỳ thông báo lỗi nào.

Vì vậy, hãy lưu ý đến LOCALtùy chọn cho các tệp CSV lớn hơn dung lượng trống của thư mục gốc của bạn. Tùy chọn ĐỊA PHƯƠNG cũng không phải là một ý tưởng tốt cho độ bền của SSD.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.