Я пытаюсь вывести данные из таблицы MySQL в файл, но получаю ошибки разрешения:
$ 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>
Если соответствующий каталог chmodded 777, то почему пользователь MySQL не может записать файл? Интересно, что я тоже не могу писать в / tmp /.
РЕДАКТИРОВАТЬ: похоже, пользователь БД имеет соответствующие разрешения 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
источник
источник
in
бессмысленно, если MySQL не может получить доступdotanchoen
. Другими словами, ящик безопасного депо в банковском хранилище можно оставить широко открытым, но если дверь банковского хранилища закрыта, вы не попадете в ящик. Вашgs
пользователь также должен иметьFILE
привилегию mysql для фактического выполнения этого запроса.SELECT
разрешения. Я часто просматриваю базу данных как этот пользователь.FILE
привилегия, как описано в MySQL docs .Ответы:
Согласно документации MySQL на SELECT ... INUT OUTFILE
Вы должны вывести
SELECT INTO OUTFILE
to / var / lib / mysql следующим образомКонечно, вам нужно убедиться, что у вас есть разрешение FILE на gs @ localhost.
Есть два способа получить это разрешение
МЕТОД №1
МЕТОД № 2
ОБНОВЛЕНИЕ 2012-05-01 07:09 ПО ВОСТОЧНОМУ ВРЕМЕНИ
Чтобы дать себе привилегию FILE, сделайте следующее:
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
источник
SHOW GRANTS
. Похоже, пользователь БД должен иметь соответствующие разрешения.GRANT ALL PRIVILEGES ON *.*
, какRELOAD
иSHUTDOWN
. Это так, потому что это глобальные административные привилегии. УGRANT ALL
вас есть привилегия только дляgs
базы данных.Различные дистрибутивы и операционные системы не все обрабатывают назначения для OUTFILE одинаково.
Например, при запуске демона mysqld в Linux, который использует сокет, OUTFILE иногда записывается в
/tmp
каталог. Ничего страшного, просто использование подхода OUTFILE имеет недостатки, а именно, имеет дело с разрешениями и поиском того, куда файл пошел.Поскольку целью этого вопроса является не «Как использовать OUTFILE», а просто собирать некоторые данные MySQL в файл, вот альтернатива, которая не требует, чтобы вы вертелись с разрешениями FILE и т. Д. ,
Выходные данные по умолчанию разделены табуляцией. Для запятых, просто передайте это
sed
или что-то перед записью в файл.источник
Я часами пытался понять предложения на этой и многих других страницах StackOverflow.
Независимо от того, как я изменил разрешения в MySql, я ничего не мог заставить работать.
Я вернулся к разрешениям, с которых начал.
В конечном счете, то, что работало для меня, было проще, чем предложения других:
echo "select id, emailAddress FROM contacts" | mysql --user=myusername --password mydatabasename > /home/my_output_file.tsv
источник
Что касается двух методов вывода данных в CSV (должен быть действительно TSV), упомянутых выше, я обнаружил, что если в экспортируемых записях есть пустые значения , существует риск того, что данные могут быть испорчены из-за неправильного выделения данные в соответствующие столбцы.
С заботой о целостности данных для восстановления, я нашел этот сайт:
https://www.eversql.com/exporting-mysql-schema-structure-to-xml-using-mysql-clients/
Он упомянул, что
--xml
опцияmysqldump
позволяет экспортировать данные в формат XML, который затем может быть проанализирован с помощью специального скрипта в любой необходимый формат, включая TSV.источник