Не удается найти файл, созданный outfile в MySQL
Я использую следующий запрос для создания файла CSV
SELECT email INTO OUTFILE "mydata.csv"
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY "\n"
FROM users;
Но я не могу найти файл mydata.csv в любом месте, когда я просматриваю filezilla.
Любая идея, где этот файл сохраняется?
Запрос выполняется без ошибок! Любая помощь?
Ответы
Ответ 1
MySQL может записывать файл в свой собственный каталог данных, например /var/lib/mysql/<databasename>
. Чтобы указать путь, используйте полный путь.
Однако он должен быть каталогом, доступным для записи из учетной записи пользователя, на которой запущен демон сервера MySQL. По этой причине я часто использую /tmp
:
Укажите путь, который вы хотите записать, как в:
INTO OUTFILE '/tmp/mydata.csv'
Обратите внимание, что MySQL будет записывать файл на сервере MySQL, а не на клиентскую машину. Поэтому удаленные подключения будут создавать выходные файлы на удаленном сервере. См. Также SELECT INTO OUTFILE local? для получения более подробной информации и обходных путей.
Systemd и Linux
Заметка о записи на /tmp
в системе Linux под управлением systemd
:
Спустя несколько лет после первоначальной публикации я обнаружил, что не могу найти файл, записанный на /tmp
через
...INTO OUTFILE '/tmp/outfile.csv'
на сервере MariaDB 5.5 под управлением Fedora Linux с systemd
. Вместо того, чтобы записывать файл непосредственно в /tmp/outfile.csv
, как указано, этот каталог и файл были созданы под каталогом systemd в /tmp
:
/tmp/systemd-mariadb.service-XXXXXXX/tmp/outfile.csv
В то время как сам файл outfile.csv
и подкаталог tmp/
были созданы для записи на весь мир, сам каталог службы systemd имеет 700 разрешений и принадлежит к корневому ресурсу, требуя sudo
доступа к извлечению файла внутри него.
Вместо того, чтобы указывать абсолютный путь в MariaDB как /tmp/outfile.csv
и указывая его относительно как outfile.csv
, файл был написан как ожидалось в каталоге данных MariaDB для текущей выбранной базы данных.
Ответ 2
Я подозреваю, что вы ищете файл на своей клиентской машине.
SELECT .. INTO OUTFILE
записывает файл на серверную машину.
Ответ 3
Только для примера:
Я выполнил ниже запрос в MySQL Workbench, и я нашел файл в
SELECT * FROM `db`.`table` INTO OUTFILE 'file.csv' FIELDS TERMINATED BY ',';
D:\WAMP\Bin\MySQL\mysql5.6.17\Data\DB\file.csv
Вы можете использовать приведенный ниже пример, чтобы указать путь к файлу:
SELECT * FROM `db`.`table` INTO OUTFILE 'C:\\file.csv' FIELDS TERMINATED BY ',';
Ответ 4
Я нашел файлы INTO OUTFILE, созданные с помощью следующей команды
select name from users into outfile "name.csv"
в следующем месте
C:\ProgramData\MySQL\MySQL Server 5.6\data\name.csv
Это, вероятно, местоположение по умолчанию, так как я никогда ничего не менял.
Ответ 5
В случае, если кто-либо из OS X имеет эту проблему, mysql
, установленный с homebrew, имеет выход по умолчанию, расположенный в /usr/local/var/mysql/database-name/
Ответ 6
Вы находите файл в C:\wamp\bin\mysql\mysql5.5.24\data
, но имя будет UsersNamecarro.txt
, если вы дали следующий select * from carro where id_cor<4 INTO OUTFILE 'C:\Users\Name\carro.txt';
Итак, просто напишите .....OUTFILE 'C:\carro.txt'
, чтобы получить файл с именем carro.txt
в папке data
Ответ 7
+1 to @michael-berkowski, и мне нужен был ответ для окон (как он заявил)
MariaDB каталог данных
если быть точным, мой был в папке данных для базы данных с именем "mydatabase"
C:\Program Files\MariaDB 10.3\data\mydatabase