Cara menggunakan mysql secure_file_priv

File Comma Separated Values ​​[CSV] adalah cara untuk mentransfer data antar aplikasi. Basis data seperti MySQL dan perangkat lunak spreadsheet seperti Excel mendukung impor dan ekspor melalui CSV, sehingga Anda dapat menggunakan file CSV untuk bertukar data di antara keduanya.

File CSV adalah teks biasa, sehingga secara alami ringan dan mudah diekspor dari MySQL.

Dari server basis data

Jika Anda memiliki akses ke server yang menjalankan MySQL, Anda dapat mengekspor pilihan dengan INTO OUTFILE memesan.

SELECT id, column1, column2 FROM table
INTO OUTFILE '/tmp/mysqlfiles/table.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY 'n'

Ini akan menampilkan file CSV ke: /tmp/mysqlfiles/table.csv, atau di mana pun Anda mengonfigurasinya. Anda perlu memastikan bahwa pengguna yang menjalankan MySQL [biasanya mysql atau root] memiliki kepemilikan dan akses tulis ke direktori.

Anda juga harus memastikan bahwa secure_file_priv pengaturan memberikan akses MySQL ke folder itu. Ini memblokir akses baca dan tulis kueri SQL secara default. Ini adalah hal yang baik; jika kode Anda rentan terhadap injeksi SQL, calon penyerang hanya dapat mengakses MySQL dan bukan sistem file lainnya.

Anda dapat memasukkan folder tertentu ke daftar putih dengan mengedit file konfigurasi MySQL Anda [biasanya ditemukan di /etc/my.cnf] untuk memasukkan:

[mysqld]
secure-file-priv = "/tmp/mysqlfiles"

Mengizinkan MySQL untuk membaca dan menulis ke /tmp/mysqlfiles/ [apa yang perlu Anda buat] mkdir]. Setelah MySQL dapat mengekspor file, Anda harus dapat menjalankan kueri dan menjalankan file CSV.

Dengan ENCLOSED BY pengaturan, koma diloloskan dengan benar, misalnya:

"3","Escape, this","also, this"

Yang dapat Anda gunakan dan impor langsung ke program spreadsheet atau perangkat lunak lainnya.

Perhatikan bahwa file CSV yang diekspor tidak akan berisi tajuk kolom apa pun, tetapi kolom akan berada dalam urutan yang sama dengan SELECT pernyataan. Nilai nol juga diekspor sebagai N, yang merupakan perilaku yang diharapkan, tetapi jika Anda ingin mengubahnya, Anda dapat mengubah pilihan dengan berjalan mundur ifnull[field, ""] di sekitar ladang Anda di SELECT pernyataan.

Dari baris perintah MySQL

Jika Anda hanya memiliki akses baris perintah ke instans MySQL dan tidak ada akses ke server itu sendiri [seperti ketika tidak dikontrol oleh Anda, dalam kasus Amazon RDS], masalahnya sedikit lebih rumit. Sementara Anda dapat menggunakan FIELDS TERMINATED BY ',' di server untuk menghasilkan daftar yang dipisahkan koma, MySQL CLI dibatasi dengan tab secara default.

Cukup masukkan kueri dari baris perintah dan kirimkan ke file:

mysql -u root -e "select * from database;" > output.tsv

Karena keluaran MySQL dibatasi tab, ini disebut file TSV, untuk “nilai yang dipisahkan tab”, dan dapat berfungsi sebagai pengganti file CSV Anda di beberapa program, seperti impor spreadsheet. Tapi itu bukan file CSV dan mengubahnya menjadi file itu rumit.

Anda cukup mengganti setiap tab dengan koma, yang akan berfungsi, tetapi akan gagal jika ada koma dalam data input. Jika Anda 100% yakin tidak ada koma di file TSV Anda [periksa dengan grep], Anda dapat mengganti tab dengan sed:

sed "s/t/,/g" output.tsv > output.csv

Tetapi jika Anda memiliki koma di data Anda, Anda perlu menggunakan regex yang lebih panjang:

sed "s/'/'/;s/t/","/g;s/^/"/;s/$/"/;s/n//g" output.tsv > output.csv

Ini akan dengan benar keluar dari bidang yang dikutip, yang akan menyelesaikan masalah koma.

Catatan: karakter tab t tidak standar. Di macOS dan BSD itu tidak tersedia, menyebabkan kekacauan dari setiap “t” kecil yang menyebabkan sed masukkan koma yang salah. Untuk memperbaikinya, gunakan karakter tab literal alih-alih t:

sed "s/  /,/g" output.tsv > output.csv

Jika data input Anda berisi tab, Anda kurang beruntung dan harus membuat file CSV sendiri dengan bahasa skrip.

Lakukan secara manual dengan bahasa pemrograman asli

MySQL [dan sebagian besar database] dirancang untuk digunakan, jadi Anda mungkin sudah memiliki semacam bahasa pemrograman yang terkait dengan MySQL. Sebagian besar bahasa juga dapat menulis ke disk, sehingga Anda dapat membuat skrip keluaran CSV Anda sendiri dengan membaca bidang langsung dari database, menghapusnya dengan benar, dan menulis file yang dipisahkan koma.

Contoh di Python.

Bài mới nhất

Chủ Đề