Saya belajar MySQL dan mencoba menggunakan LOAD DATA
klausa. Ketika saya menggunakannya seperti di bawah ini:
LOAD DATA INFILE "text.txt" INTO table mytable;
Saya mendapat kesalahan berikut:
Server MySQL berjalan dengan opsi --secure-file-priv sehingga tidak dapat menjalankan pernyataan ini
Bagaimana cara mengatasi kesalahan ini?
Saya telah memeriksa pertanyaan lain pada pesan kesalahan yang sama , tetapi masih tidak dapat menemukan solusi.
Saya menggunakan MySQL 5.6
mysqldump --tab
, seolah-olah itu tidak cukup sulit untuk mendapatkan data Anda sendiri dari mysql.LOAD DATA LOCAL INFILE ...
Jawaban:
Ini berfungsi sebagaimana dimaksud. Server MySQL Anda telah dimulai dengan opsi --secure-file-priv yang pada dasarnya membatasi direktori mana Anda dapat memuat file
LOAD DATA INFILE
.Anda dapat menggunakan
SHOW VARIABLES LIKE "secure_file_priv";
untuk melihat direktori yang telah dikonfigurasi.Anda memiliki dua opsi:
secure-file-priv
.secure-file-priv
. Ini harus dihapus dari startup dan tidak dapat dimodifikasi secara dinamis. Untuk melakukan ini, periksa parameter memulai MySQL Anda (tergantung pada platform) dan my.ini.sumber
--secure-file-priv
sendiri.SHOW VARIABLES LIKE "secure_file_priv";
Saya memiliki masalah yang sama. Saya akhirnya dipecahkan menggunakan
LOCAL
opsi dalam perintahLOAD DATA LOCAL INFILE "text.txt" INTO TABLE mytable;
Anda dapat menemukan info lebih lanjut di sini http://dev.mysql.com/doc/refman/5.7/en/load-data.html
sumber
C:\ProgramData\MySQL\MySQL Server 5.7\Uploads
, 2. menonaktifkansecure_file_priv
dimy.ini
dan restart mysql 3. satu ini! Terima kasih :)--local-infile
bendera saat berjalanmysql
. stackoverflow.com/questions/10762239/...The used command is not allowed with this MySQL version
dari MySQL 8.0Pada Ubuntu 14 dan Mysql 5.5.53 pengaturan ini tampaknya diaktifkan secara default. Untuk menonaktifkannya, Anda perlu menambahkan
secure-file-priv = ""
file my.cnf Anda di bawah grup konfigurasi mysqld. misalnya:-sumber
# secure-file-priv = ~
itu masih memiliki kesalahan karena nilainya menunjukkan bahwaNULL
melakukannya dengan cara ini menyelesaikan masalah ketika Anda ingin memilih direktori mana yang dapat Anda ekspor ke server, dll.Saya sedang mengerjakan MySQL5.7.11 di Debian, perintah yang berhasil bagi saya untuk melihat direktori adalah:
sumber
SHOW VARIABLES LIKE "secure_file_priv";
saya mendapatkanERROR 1146 (42S02): Table 'performance_schema.session_variables' doesn't exist
yang juga dilemparkan dalam keadaan lain dan saya akhirnya harus berurusan dengan. TheSELECT @@global.secure_file_priv;
perintah meskipun menghasilkan hasil yang diharapkan.Inilah yang bekerja untuk saya di Windows 7 untuk menonaktifkan
secure-file-priv
(Opsi # 2 dari jawaban vhu ):services.msc
.C:\ProgramData\MySQL\MySQL Server 5.6
(ProgramData
adalah folder tersembunyi dalam kasus saya).my.ini
file di Notepad.secure-file-priv=""
services.msc
.sumber
Jika file tersebut lokal untuk mesin Anda gunakan LOCAL dalam perintah Anda
sumber
@ vhu
Saya melakukan
SHOW VARIABLES LIKE "secure_file_priv";
dan itu kembaliC:\ProgramData\MySQL\MySQL Server 8.0\Uploads\
sehingga ketika saya menghubungkannya, itu masih tidak berhasil.Ketika saya pergi ke file my.ini secara langsung saya menemukan bahwa path diformat sedikit berbeda:
C:/ProgramData/MySQL/MySQL Server 8.0/Uploads
Lalu ketika saya menjalankannya dengan itu, itu berhasil. Satu-satunya perbedaan adalah arah tebasan.
sumber
Saya memiliki masalah yang sama dengan 'secure-file-priv'. Mengomentari file .ini tidak berfungsi dan tidak juga memindahkan file dalam direktori yang ditentukan oleh 'secure-file-priv'.
Akhirnya, seperti yang disarankan dbc, membuat 'secure-file-priv' sama dengan string kosong berfungsi. Jadi kalau ada yang buntu setelah mencoba jawaban di atas, semoga melakukan ini akan membantu.
sumber
Hal yang berhasil bagi saya:
secure-file-priv
.Untuk menemukan jenis itu:
local_infile = 1
.Lakukan pengetikan:
Jika Anda mendapatkan:
Kemudian atur menjadi satu ketikan:
sumber
Utas ini telah dilihat sebanyak 522 kali pada saat posting ini. Jujur ketika MySQL menjadi ibu kami yang tidak masuk akal ? Upaya keamanan yang menghabiskan waktu - yang benar-benar hanya berfungsi untuk membelenggu kita!
Setelah banyak pencarian dan banyak upaya semuanya gagal.
Solusi saya:
sumber
Saya membuat skrip impor NodeJS jika Anda menjalankan nodeJS dan data Anda dalam bentuk berikut (penawaran ganda + koma dan \ n baris baru)
Yang ini dikonfigurasi untuk berjalan di http: // localhost: 5000 / import .
Saya pergi baris demi baris dan membuat string kueri
server.js
ImportRoutes.js
db.js adalah file konfigurasi
Penafian: Ini bukan solusi yang sempurna - Saya hanya mempostingnya untuk para dev yang berada di bawah timeline dan memiliki banyak data untuk diimpor dan menghadapi masalah konyol ini. Saya kehilangan banyak waktu dalam hal ini dan saya berharap untuk menyediakan dev lain pada waktu yang hilang.
sumber
Saya punya banyak masalah dengan ini. Saya mengubah my.cnf dan segala macam hal gila yang coba ditunjukkan versi lain dari masalah ini.
Apa yang berhasil untuk saya:
Kesalahan yang saya dapatkan
The MySQL server is running with the --secure-file-priv option so it cannot execute this statement
Saya dapat memperbaikinya dengan membuka /usr/local/mysql/support-files/mysql.server dan mengubah baris berikut:
untuk
sumber
Jika Anda menjalankan pada Ubuntu, Anda mungkin juga perlu mengkonfigurasi Apparmor untuk memungkinkan MySQL untuk menulis ke folder Anda, misalnya inilah konfigurasi saya:
Tambahkan baris ini ke file /etc/apparmor.d/usr.sbin.mysqld:
Kemudian tambahkan 2 baris config ini ke bagian /etc/mysql/my.cnf:
Inilah SQL saya:
Ini berhasil untuk saya. Semoga berhasil!
sumber
Untuk versi mysql 8.0 Anda dapat melakukan ini:
Ini bekerja untuk saya di Mac High Sierra
sumber
Saya punya masalah ini di windows 10. "--secure-file-priv di MySQL" Untuk menyelesaikan ini saya lakukan hal berikut.
Server mulai seperti yang diharapkan.
sumber
MySQL menggunakan variabel sistem ini untuk mengontrol di mana Anda dapat mengimpor file Anda
Jadi masalahnya adalah bagaimana mengubah variabel sistem seperti
secure_file_priv
.mysqld
sudo mysqld_safe --secure_file_priv=""
sekarang Anda mungkin melihat seperti ini:
sumber
Di macOS Catalina, saya mengikuti langkah-langkah ini untuk mengatur
secure_file_priv
1.Hentikan layanan MySQL
2. Mulai kembali penugasan MYSQL --secure_file_priv variabel sistem
Catatan: Menambahkan nilai kosong perbaiki masalah untuk saya, dan MYSQL akan mengekspor data ke direktori / usr / local / mysql / data / YOUR_DB_TABLE / EXPORT_FILE
Terima kasih
sumber
Tanpa mengubah file konfigurasi apa pun ..
secure_file_priv
menggunakan perintah diposting oleh @vhu:SHOW VARIABLES LIKE "secure_file_priv"
.select * from table into outfile 'secure_file_priv_PATH/OUTPUT-FILE' ... rest of your query
ini bekerja untuk saya di mysql-shell di ubuntu 18,04 LTS mysql 5.7.29
sumber