2012-09-14 32 views
6

Tôi gặp lỗi khi sử dụng dữ liệu tải để chèn truy vấn.MySQL: Tải dữ liệu infile

"load data infile '/home/bharathi/out.txt' into table Summary" 

Tệp này có sẵn tại vị trí. Nhưng mysql ném lỗi dưới đây. ERROR 29 (HY000): File '/home/bharathi/out.txt' không tìm thấy (Errcode: 13)

show variables like 'data%'; 
+---------------+-----------------+ 
| Variable_name | Value   | 
+---------------+-----------------+ 
| datadir  | /var/lib/mysql/ | 
+---------------+-----------------+ 

Dir Dữ liệu được trỏ đến thư mục gốc được cấp quyền. Tôi không thể thay đổi biến này vì nó chỉ đọc.

Tôi làm cách nào để thực hiện thao tác tải dữ liệu tải?

Tôi đã thử thay đổi quyền đối với tệp, tải dữ liệu cục bộ. Nó sẽ không hoạt động.

+0

Trên đó hệ thống (máy chủ hoặc máy khách) là tệp nào? – eggyal

+0

Máy chủ và Máy khách hoặc cùng một máy. – kannanrbk

Trả lời

11

Như ghi nhận dưới LOAD DATA INFILE Syntax:

Vì lý do an ninh, khi đọc các file văn bản nằm trên máy chủ, các tập tin phải hoặc là nằm trong thư mục cơ sở dữ liệu hoặc có thể đọc được bởi tất cả. Ngoài ra, để sử dụng LOAD DATA INFILE trên các tệp máy chủ, bạn phải có đặc quyền FILE. Xem Section 6.2.1, “Privileges Provided by MySQL”. Đối với các hoạt động tải không LOCAL, nếu biến hệ thống secure_file_priv được đặt thành tên thư mục không phải là rỗng, tệp cần tải phải nằm trong thư mục đó.

Bạn nên do đó một trong hai:

  • Đảm bảo rằng người sử dụng MySQL của bạn có đặc quyền FILE và, giả định rằng biến secure_file_priv hệ thống không được thiết lập:

    • làm cho các tập tin có thể đọc được bởi tất cả; hoặc

    • di chuyển tệp vào thư mục cơ sở dữ liệu.

  • Hoặc nếu không, sử dụng từ khóa LOCAL có file đọc bởi khách hàng của bạn và chuyển đến máy chủ. Tuy nhiên, lưu ý rằng:

    LOCAL chỉ hoạt động nếu máy chủ và khách hàng của bạn đã được định cấu hình để cho phép. Ví dụ: nếu mysqld được bắt đầu với --local-infile=0, LOCAL không hoạt động. Xem Section 6.1.6, “Security Issues with LOAD DATA LOCAL.

+0

Đánh bại tôi theo giây ... +1 – fancyPants

8

Các giải pháp mà thực sự làm việc cho tôi là:

sudo chown mysql:mysql /path/to/the/file/to/be/read.csv 

Thêm nó để tham khảo trong tương lai.

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