Próbuję wyprowadzić dane z tabeli MySQL do pliku, ale otrzymuję błędy uprawnień:
$ 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>
Jeśli dany katalog ma chmod do 777, to dlaczego użytkownik MySQL nie może zapisać pliku? Co ciekawe, nie mogę pisać do / tmp /.
EDYCJA: Wygląda na to, że użytkownik DB ma odpowiednie uprawnienia MySQL:
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
źródło
źródło
in
ma sensu, jeśli MySQL nie może uzyskać dostępudotanchoen
. Innymi słowy, pole depostu bezpieczeństwa w skarbcu bankowym może być szeroko otwarte, ale jeśli drzwi skarbca są zamknięte, nie dostaniesz się do pudełka. Twójgs
użytkownik musi również mieć mysqlFILE
przywilej rzeczywiście wykonania tego zapytania.SELECT
uprawnienia. Często przeglądam bazę danych jako ten użytkownik.FILE
uprawnienia opisane w dokumentach MySQL .Odpowiedzi:
Zgodnie z dokumentacją MySQL na temat SELECT ... INTO OUTFILE
Powinieneś
SELECT INTO OUTFILE
wypisać plik / var / lib / mysql w następujący sposóbOczywiście musisz upewnić się, że masz uprawnienia do PLIKU na gs @ localhost.
Istnieją dwa sposoby uzyskania tego pozwolenia
METODA nr 1
SPOSÓB 2
AKTUALIZACJA 2012-05-01 07:09 EDT
Aby nadać sobie uprawnienia do PLIKU, wykonaj następujące czynności:
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
źródło
SHOW GRANTS
. Wygląda na to, że użytkownik DB powinien mieć odpowiednie uprawnienia.GRANT ALL PRIVILEGES ON *.*
, podobnie jakRELOAD
iSHUTDOWN
. Jest tak, ponieważ są to globalne uprawnienia administracyjne.GRANT ALL
Przywilej masz to zags
jedyną bazą danych.Różne dystrybucje i systemy operacyjne nie wszystkie obsługują miejsc docelowych dla plików wyjściowych w taki sam sposób.
Na przykład podczas uruchamiania demona mysqld w systemie Linux, który korzysta z gniazda, OUTFILE czasami jest zapisywany w
/tmp
katalogu. Nie jest to wielka sprawa, po prostu użycie metody OUTFILE ma wady, a mianowicie radzenie sobie z uprawnieniami i ustalanie, gdzie poszedł plik.Ponieważ celem tego pytania nie jest konkretnie „Jak korzystać z pliku OUTFILE”, ale chcesz po prostu przechwycić niektóre dane MySQL do pliku, oto alternatywa, która nie wymaga od ciebie zmieniania uprawnień do PLIKU itp. .
Dane wyjściowe są domyślnie rozdzielane tabulatorami. W przypadku przecinków po prostu przeciągnij go
sed
lub coś przed zapisaniem go w pliku.źródło
Spędziłem godziny próbując zrozumieć sugestie na tej stronie i wielu innych stronach StackOverflow.
Bez względu na to, jak zmieniłem uprawnienia w MySql, nie mogłem nic zrobić.
Wróciłem do uprawnień, od których zacząłem.
Ostatecznie to, co zadziałało, było prostsze niż sugestie innych:
echo "select id, emailAddress FROM contacts" | mysql --user=myusername --password mydatabasename > /home/my_output_file.tsv
źródło
Jeśli chodzi o dwie metody przesyłania danych do CSV (powinien być rzeczywiście TSV) wspomniane powyżej, odkryłem, że jeśli w eksportowanych wpisach są puste wartości , istnieje ryzyko, że dane mogą zostać pomylone z powodu niewłaściwej alokacji dane do odpowiednich kolumn.
Z troską o integralność danych do odzyskiwania znalazłem tę stronę:
https://www.eversql.com/exporting-mysql-schema-structure-to-xml-using-mysql-clients/
Wspomniał, że ta
--xml
opcjamysqldump
pozwala na eksport danych do formatu XML, który można następnie przeanalizować za pomocą skryptu niestandardowego do dowolnego wymaganego formatu, w tym TSV.źródło