2012-05-24 32 views
10

Tôi có một tập lệnh PHP gọi số LOAD DATA INFILE của MySQL để tải dữ liệu từ tệp CSV. Tuy nhiên, trên máy chủ sản xuất, tôi đã kết thúc với lỗi sau:LOAD DATA ĐỊA PHƯƠNG INFILE cho lỗi Lỗi lệnh được sử dụng không được phép với phiên bản MySQL này

Access denied for user ... (using password: yes)

Cách giải quyết nhanh, tôi đã đổi lệnh thành LOAD DATA LOCAL INFILE hoạt động. Tuy nhiên, lệnh cùng một thất bại trên máy chủ của khách hàng với thông điệp này:

The used command is not allowed with this MySQL version

Tôi giả định này có cái gì để làm với các biến server: local_infile = off như mô tả here.

Vui lòng đề xuất giải pháp thay thế không liên quan đến thay đổi cài đặt máy chủ. Lưu ý rằng tiện ích phpMyAdmin được cài đặt trên cùng một máy chủ xuất hiện để chấp nhận tệp CSV mặc dù tôi không chắc chắn nó sử dụng LOAD DATA (LOCAL) INFILE.

+0

không phải lệnh này là sự cho phép của người dùng mà bạn đang sử dụng. – jcho360

+0

Cùng một người dùng có thể chạy truy vấn 'INSERT' nhưng không phải' LOAD DATA INFILE' (truy cập bị từ chối) hoặc 'LOAD DATA LOCAL INFILE' (lệnh được sử dụng không được phép). –

Trả lời

39

Ran vào vấn đề tương tự như rễ và ném cho tôi một khoảnh khắc

có thể là một vấn đề với các thiết lập máy chủ của bạn thiết lập với biên dịch

để kiểm tra đăng nhập để an ủi với cùng một người dùng và cố gắng tải dữ liệu của bạn lệnh

nếu bạn nhận được lỗi tương tự, hãy thử đóng giao diện điều khiển và chạy

mysql -u USER -p --local-infile=1 DATABASE 

tại thử chạy lệnh tải dữ liệu một lần nữa

nếu nó hoạt động thì bạn sẽ cần phải khởi động lại mysqld với tùy chọn dòng lệnh hoặc cài đặt lại với tùy chọn cấu hình tham khảo

(tài liệu tham khảo dành cho 5.0 nhưng làm việc cho tôi với 5.5):

http://dev.mysql.com/doc/refman/5.0/en/load-data-local.html

http://dev.mysql.com/doc/refman/5.0/en/mysql-command-options.html#option_mysql_local-infile

+3

"mysql -u USER -p --local-infile = 1 DATABASE". Lệnh này đã thực hiện tất cả các thủ thuật. Cảm ơn. –

+0

chào đón của bạn, mặc dù nó sạch hơn cho người khác để cảm ơn thông qua câu trả lời rất hữu ích – Alvin

+0

, chạy vào vấn đề đó bản thân mình – Rickyfox

0

hãy xem danh sách cho phép này, bạn có thể thêm chúng riêng biệt, IE. bạn có thể chèn nhưng không cập nhật, hoặc bạn có thể xóa nhưng không chọn, vv ...

ALL [PRIVILEGES] Grant all privileges at specified access level except GRANT OPTION 
ALTER Enable use of ALTER TABLE 
ALTER ROUTINE Enable stored routines to be altered or dropped 
CREATE Enable database and table creation 
CREATE ROUTINE Enable stored routine creation 
CREATE TEMPORARY TABLES  Enable use of CREATE TEMPORARY TABLE 
CREATE USER  Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES 
CREATE VIEW  Enable views to be created or altered 
DELETE Enable use of DELETE 
DROP Enable databases, tables, and views to be dropped 
EVENT Enable use of events for the Event Scheduler 
EXECUTE  Enable the user to execute stored routines 
FILE Enable the user to cause the server to read or write files 
GRANT OPTION Enable privileges to be granted to or removed from other accounts 
INDEX Enable indexes to be created or dropped 
INSERT Enable use of INSERT 
LOCK TABLES  Enable use of LOCK TABLES on tables for which you have the SELECT privilege 
PROCESS  Enable the user to see all processes with SHOW PROCESSLIST 
REFERENCES Not implemented 
RELOAD Enable use of FLUSH operations 
REPLICATION CLIENT Enable the user to ask where master or slave servers are 
REPLICATION SLAVE Enable replication slaves to read binary log events from the master 
SELECT Enable use of SELECT 
SHOW DATABASES Enable SHOW DATABASES to show all databases 
SHOW VIEW Enable use of SHOW CREATE VIEW 
SHUTDOWN Enable use of mysqladmin shutdown 
SUPER Enable use of other administrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, and mysqladmin debug command 
TRIGGER  Enable trigger operations 
UPDATE Enable use of UPDATE 
USAGE Synonym for “no privileges” 

Tôi nghĩ rằng bạn có permision để chọn, xóa, chèn, cập nhật, nhưng không có để làm công cụ khác,

sử dụng lệnh này:

SHOW GRANTS 

anh ấy sẽ cho bạn biết bạn có thể làm gì, trong trường hợp của tôi.

jcho360> show grants; 
+-------------------------------------------------------+ 
| Grants for [email protected]       | 
+-------------------------------------------------------+ 
| GRANT ALL PRIVILEGES ON *.* TO 'jbolivar'@'localhost' | 
+-------------------------------------------------------+ 
1 row in set (0.00 sec) 
2

tôi đã Traing một giải pháp cho khoảng một 1 giờ, cuối cùng tôi phát hiện ra rằng tôi cần kết nối với cơ sở dữ liệu như thế này $ dbh = mysql_connect ($ server, $ dbuser, $ dbpass, false, 128);

Việc vượt qua 128 trong tham số cờ là khóa.

Xem http://www.php.net/manual/en/mysql.constants.php#mysql.client-flags để đọc thêm về các cờ.

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