Saya mencoba untuk mengeluarkan data dari tabel MySQL ke file tetapi mendapatkan kesalahan izin:
$ pwd
/home/dotancohen
$ mkdir in
$ chmod 777 in/
$ mysql -ugs -p
mysql> USE someDatabase;
mysql> SELECT * FROM data INTO OUTFILE '/home/dotancohen/in/data.csv';
ERROR 1045 (28000): Access denied for user 'gs'@'localhost' (using password: YES)
mysql>
Jika direktori yang dimaksud chmodded ke 777, lalu mengapa pengguna MySQL tidak bisa menulis file? Cukup menarik, saya tidak bisa menulis ke / tmp / baik.
EDIT: Sepertinya pengguna DB memiliki izin MySQL yang tepat:
mysql> show grants;
+----------------------------------------------------------------------------------+
| Grants for gs@localhost |
+----------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'gs'@'localhost' IDENTIFIED BY PASSWORD 'somePassword' |
| GRANT ALL PRIVILEGES ON `gs\_%`.* TO 'gs'@'localhost' |
+----------------------------------------------------------------------------------+
2 rows in set (0.01 sec)
mysql
linux
permissions
dotancohen
sumber
sumber
in
tidak ada gunanya jika MySQL tidak dapat mengaksesdotanchoen
. Dengan kata lain, safety depost box di brankas bank dapat dibiarkan terbuka lebar, tetapi jika pintu brankas bank terkunci, Anda tidak akan masuk ke dalam kotak.gs
Pengguna Anda juga harus memilikiFILE
hak istimewa mysql untuk benar-benar menjalankan kueri itu.SELECT
izin. Saya sering menelusuri basis data sebagai pengguna ini.FILE
hak istimewa seperti yang dijelaskan oleh dokumen MySQL .Jawaban:
Menurut Dokumentasi MySQL tentang SELECT ... INTO OUTFILE
Anda harus menampilkan
SELECT INTO OUTFILE
ke / var / lib / mysql sebagai berikutTentu saja, Anda perlu memastikan Anda memiliki izin FILE di gs @ localhost.
Ada dua cara untuk mendapatkan izin ini
METODE # 1
METODE # 2
UPDATE 2012-05-01 07:09 EDT
Untuk memberi Anda hak istimewa FILE, lakukan hal berikut:
service mysql restart --skip-networking --skip-grant-tables
mysql <hit enter>
UPDATE mysql.user SET File_priv = 'Y' WHERE user='gs' AND host='localhost';
exit
service mysql restart
sumber
SHOW GRANTS
. Sepertinya pengguna DB harus memiliki izin yang tepat.GRANT ALL PRIVILEGES ON *.*
, sepertiRELOAD
danSHUTDOWN
. Ini karena itu adalah hak administratif global. HakGRANT ALL
istimewa yang Anda miliki adalah hanya untukgs
basis data.Distribusi dan OS yang berbeda tidak semuanya menangani tujuan untuk OUTFILE.
Misalnya, ketika menjalankan daemon mysqld di Linux, yang menggunakan soket, OUTFILE terkadang ditulis ke
/tmp
direktori. Bukan masalah besar, hanya saja menggunakan pendekatan OUTFILE memiliki kekurangan, yaitu berurusan dengan izin dan menemukan ke mana file itu pergi.Karena tujuan dari pertanyaan ini tidak secara khusus "Cara menggunakan OUTFILE", tetapi Anda hanya ingin menangkap beberapa data MySQL ke dalam file, inilah alternatif yang tidak mengharuskan Anda untuk bermain-main dengan izin FILE, dll. .
Output dari ini dibatasi-tab secara default. Untuk koma, cukup kirim melalui pipa
sed
atau sesuatu sebelum menuliskannya ke dalam file.sumber
Saya menghabiskan waktu berjam-jam untuk mencoba memahami saran pada halaman ini dan banyak halaman lain dari StackOverflow.
Tidak peduli bagaimana saya mengubah izin di MySql, saya tidak bisa mendapatkan apa pun untuk bekerja.
Saya kembali ke izin yang saya mulai.
Pada akhirnya apa yang berhasil bagi saya lebih sederhana daripada saran orang lain:
echo "select id, emailAddress FROM contacts" | mysql --user=myusername --password mydatabasename > /home/my_output_file.tsv
sumber
Mengenai dua metode untuk menghasilkan data ke CSV (seharusnya memang TSV) yang disebutkan di atas, saya telah menemukan bahwa jika ada nilai kosong di entri yang Anda ekspor, ada risiko bahwa data dapat kacau karena kesalahan alokasi dari data ke kolom yang sesuai.
Dengan memperhatikan integritas data untuk pemulihan, saya menemukan situs web ini:
https://www.eversql.com/exporting-mysql-schema-structure-to-xml-using-mysql-clients/
Disebutkan bahwa
--xml
opsi dalammysqldump
memungkinkan mengekspor data ke dalam format XML yang kemudian dapat diuraikan oleh skrip kustom ke format apa pun yang diperlukan, termasuk TSV.sumber