Một câu trả lời nhanh, không yêu cầu bạn chỉnh sửa bất kỳ tệp cấu hình nào (và hoạt động trên các hệ điều hành khác cũng như Windows), là chỉ cần tìm thư mục mà bạn được phép lưu vào sử dụng:
mysql> SHOW VARIABLES LIKE "secure_file_priv";
+------------------+-----------------------+
| Variable_name | Value |
+------------------+-----------------------+
| secure_file_priv | /var/lib/mysql-files/ |
+------------------+-----------------------+
1 row in set (0.06 sec)
Và sau đó đảm bảo rằng bạn sử dụng thư mục đó trong SELECT
của mình của câu lệnh INTO OUTFILE
mệnh đề:
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Câu trả lời ban đầu
Tôi đã gặp vấn đề tương tự kể từ khi nâng cấp từ MySQL 5.6.25 lên 5.6.26.
Trong trường hợp của tôi (trên Windows), khi xem dịch vụ Windows MySQL56 cho tôi thấy rằng tệp tùy chọn / cài đặt đang được sử dụng khi dịch vụ khởi động là C:\ ProgramData \ MySQL \ MySQL Server 5.6 \ my.ini
Trên linux, hai vị trí phổ biến nhất là /etc/my.cnf
hoặc /etc/mysql/my.cnf
.
Mở tệp này, tôi có thể thấy rằng secure-file-priv
tùy chọn đã được thêm trong [mysqld]
nhóm trong phiên bản MySQL Server mới này với giá trị mặc định:
secure-file-priv ="C:/ ProgramData / MySQL / MySQL Server 5.6 / Uploads"
Bạn có thể nhận xét điều này (nếu bạn đang ở trong môi trường phi sản xuất) hoặc thử nghiệm với việc thay đổi cài đặt (gần đây tôi đã phải đặt secure-file-priv =""
để vô hiệu hóa mặc định). Đừng quên khởi động lại dịch vụ sau khi thực hiện các thay đổi.
Ngoài ra, bạn có thể thử lưu đầu ra của mình vào thư mục được phép (vị trí có thể khác nhau tùy thuộc vào cài đặt của bạn):
SELECT *
FROM xxxx
WHERE XXX
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 5.6/Uploads/report.csv'
FIELDS TERMINATED BY '#'
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
Phổ biến hơn là có các giá trị phân tách bằng dấu phẩy bằng cách sử dụng FIELDS TERMINATED BY ','
. Xem ví dụ bên dưới (cũng hiển thị đường dẫn Linux):
SELECT *
FROM table
INTO OUTFILE '/var/lib/mysql-files/report.csv'
FIELDS TERMINATED BY ',' ENCLOSED BY '"'
ESCAPED BY ''
LINES TERMINATED BY '\n';