Dari halaman manual MySQL 5.5:
LOCAL hanya berfungsi jika server dan klien Anda telah dikonfigurasi untuk mengizinkannya. Misalnya, jika mysqld dimulai dengan --local-infile = 0, LOCAL tidak berfungsi. Lihat Bagian 6.1.6, “Masalah Keamanan dengan LOAD DATA LOCAL”.
Anda harus mengatur opsi:
local-infile=1
ke dalam entri [mysql] Anda dari file my.cnf atau panggil klien mysql dengan opsi --local-infile :
mysql --local-infile -uroot -pyourpwd yourdbname
Anda harus yakin bahwa parameter yang sama didefinisikan ke bagian [mysqld] Anda juga untuk mengaktifkan sisi server fitur "infile lokal".
Ini batasan keamanan.
my.cnf
jalannya ada/etc/mysql/my.cnf
di mesin saya (AWS EC2).apparmor="DENIED" operation="open" profile="/usr/sbin/mysqld" name="/var/www/myfile.csv" pid=19488 comm="mysqld" requested_mask="r" denied_mask="r" fsuid=106 ouid=33
. Solusinya sangat sederhana. Cukup perbarui/etc/apparmor.d/local/usr.sbin.mysqld
dan muat ulang layanan apparmor.File my.cnf Anda harus mengedit adalah /etc/mysql/my.cnf berkas. Hanya:
Kemudian tambahkan:
Header [mysqld] dan [mysql] sudah diberikan, cukup cari di dalam file dan tambahkan infile lokal di bawah masing-masing.
Ini berfungsi untuk saya di MySQL 5.5 pada Ubuntu 12.04 LTS.
sumber
Ubuntu 14.04.2 LTS not working
juga./mysql/my.cnf
tidak ada secara default. Cukup buat direktori dan file, dan tempelkan baris-baris ini ke dalam file./etc/mysql/conf.d/enable-local-infile.cnf
Juga jangan lupasudo service mysql restart
setelah melakukan perubahan konfigurasi sehingga itu berlaku.Ganti driver php5-mysql dengan driver asli
Di debian
sumber
Saya memecahkan masalah ini pada MySQL 8.0.11 dengan perintah terminal mysql:
Maksud saya saya login dulu dengan yang biasa:
Setelah itu Anda dapat melihat status dengan perintah:
Itu harus ON. Saya tidak akan menulis tentang keamanan yang dikeluarkan dengan memuat file lokal ke dalam basis data di sini.
sumber
SET GLOBAL local_infile = true;
berhasil. Versi MySQL saya adalah 8.0.12. Mungkin ini solusi terbaru. Terima kasih banyak.8.0.12 MySQL Community Server
di Windows.SET GLOBAL local_infile = true;
perintah tetapi saya masih mendapatkan kesalahan yang samaERROR 1148 (42000): The used command is not allowed with this MySQL version
tetapi koneksi ke mysql dengan --load-infile = 1 bekerjamysql --local-infile=1 -u root -p
jika rasa mysql di ubuntu TIDAK dalam keadaan apa pun berhasil dan Anda masih mendapatkan kesalahan 1148, Anda dapat menjalankan
load data infile
perintah melalui baris perintahbuka jendela terminal
Lari
mysql -u YOURUSERNAME -p --local-infile YOURDBNAME
Anda akan diminta untuk memasukkan kata sandi mysqluser
Anda akan menjalankan MySQLMonitor dan prompt perintah Anda akan
mysql>
jalankan
load data infile
perintah Anda (jangan lupa akhiri dengan titik koma;
)seperti ini:
sumber
Lihat gambar di bawah ...
Saya telah menambahkan
--local-infile=1
perintah mysql normalmysql -u root -p
Jadi total baris adalah:
sumber
SET GLOBAL ..
tidak. Apakah perintah 'sumber' (\. file.sql
) entah bagaimana memulai sesi baru atau mengatur ulang ini? Saya tidak mencoba meletakkan pengaturan dalam skrip mmy sql.Juga, untuk pembaca lain, jika Anda mencoba melakukan ini di Django DAN server Anda memungkinkan local_infile (Anda dapat memeriksa dengan mengetik SHOW VARIABLES melalui klien mysql) maka Anda dapat menambahkan ini ke file settings.py Anda (karena python MySQLdb tidak t secara default membaca file .my.cnf):
sumber
Anda harus berhati-hati bagaimana Anda membangun koneksi mysqli Anda. Penghargaan penuh untuk solusi ini diberikan kepada Jorge Albarenque, sumber
Untuk memperbaikinya saya harus:
Tangkapannya adalah bahwa dengan fungsi itu Anda dapat secara eksplisit mengaktifkan dukungan untuk LOAD DATA LOCAL INFILE. Misalnya (gaya prosedural):
atau berorientasi objek
sumber
jika file csv Anda terletak sama dengan db, Anda perlu menghapus LOCAL di LOAD DATA INFILE , atau Anda akan mendapatkan kesalahan
sumber
Cara lain adalah dengan menggunakan
mysqlimport
program klien.Anda memohonnya sebagai berikut:
Ini menghasilkan
LOAD DATA
pernyataan yang memuattableName.txt
ke dalamtableName
tabel.Ingatlah yang berikut:
mysqlimport
menentukan nama tabel dari file yang Anda berikan; menggunakan semua teks dari awal nama file hingga periode pertama sebagai nama tabel. Jadi, jika Anda ingin memuat beberapa file ke tabel yang sama Anda bisa membedakan mereka sukatableName.1.txt
,tableName.2.txt
, ..., dll, misalnya.sumber
Ini agak aneh bagi saya, dari satu hari ke hari berikutnya naskah yang sudah berfungsi sejak beberapa hari berhenti bekerja. Tidak ada versi yang lebih baru dari mysql atau segala bentuk peningkatan, tetapi saya mendapatkan kesalahan yang sama, jadi saya memberikan upaya terakhir ke file CSV dan perhatikan bahwa akhir baris menggunakan \ n alih-alih yang diharapkan (per skrip saya ) jadi saya menyimpannya dengan EOL yang tepat dan menjalankan skrip lagi tanpa masalah.
Saya pikir agak aneh bagi mysql untuk memberi tahu saya Perintah yang digunakan tidak diperbolehkan dengan versi MySQL ini karena alasannya sangat berbeda.
Perintah kerja saya terlihat seperti ini:
sumber
Saya menggunakan metode di bawah ini, yang tidak memerlukan perubahan konfigurasi , diuji pada mysql-5.5.51-winx64 dan 5.5.50-MariaDB:
masukkan 'load data ...' ke dalam file .sql (mis: LoadTableName.sql)
kemudian:
sumber
Dalam kasus jika Mysql 5.7 Anda dapat menggunakan "tampilkan variabel global seperti" local_infile ";" yang akan memberikan status infile lokal, Anda dapat menyalakannya menggunakan "set global local_infile = ON;".
sumber
Ok, sesuatu yang aneh sedang terjadi di sini. Untuk membuat ini bekerja, TIDAK perlu membuat perubahan konfigurasi di /etc/mysql/my.cnf. Yang perlu Anda lakukan adalah me-restart layanan mysql saat ini di terminal:
Lalu jika saya ingin "membuat ulang" bug, saya cukup restart layanan apache:
Yang kemudian bisa diperbaiki lagi dengan memasukkan perintah berikut:
Jadi, tampaknya apache2 sedang melakukan sesuatu untuk tidak mengizinkan fitur ini ketika dijalankan (yang kemudian dibalik / diperbaiki jika me-restart layanan mysql).
Berlaku dalam distribusi berbasis Debian.
Berlaku dalam distribusi berbasis RedHat
sumber
Bagi Anda yang mencari jawaban untuk membuat LOAD DATA
LOCAL
INFILE berfungsi seperti saya, ini mungkin berhasil. Yah itu berhasil untuk saya, jadi begini saja. Instalpercona
sebagai server mysql Anda dan klien dengan mengikuti langkah-langkah dari tautan. Kata sandi akan diminta selama instalasi, jadi berikan kata sandi yang akan Anda ingat dan gunakan nanti. Setelah penginstalan selesai, reboot sistem Anda dan uji apakah server aktif dan berjalan dengan membukaterminal
dan mengetikmysql -u root -p
, lalu kata sandi. Coba jalankan perintahLOAD DATA LOCAL INFILE
sekarang .. Semoga berhasil :)BTW I sedang mengerjakan Rails 2.3 dengan Ruby 1.9.3 di Ubuntu 12.04.
sumber
Semua: Jelas ini berfungsi seperti yang dirancang. Silakan lihat ref man baru tanggal 2019-7-23, Bagian 6.1.6, Masalah Keamanan dengan LOAD DATA LOCAL .
sumber
Tambahkan
local_infile
keduanyaclient
danmysqld
bagian.Diuji dalam MySQL 8.x baik di Windows dan Linux.
sumber
Saya menggunakan xampp v3.2.4 dan server mysql 8.0.20.
Saya menambahkan
local-infile=1
ke[mysql]
dan[mysqld]
dalam file "my.ini". File ini terletak di "C: \ xampp \ mysql \ bin \ my.ini".Kemudian saya memasukkan data dari file csv menggunakan kode berikut
LOAD DATA INFILE ...
. Penting untuk memindahkan LOKAL. Kalau tidak, itu tidak akan berhasil.Terima kasih atas semua saran di atas. Kombinasi akhirnya berhasil untuk saya.
sumber