Экспорт MySQL в внешний файл и перезапись

Я заинтересован в экспорте оператора выбора mysql в файл на общем ресурсе samba. Все работает нормально, пока я не пытаюсь обновить файл. Например, у меня есть экспорт mysql в исходный файл peachtree.csv, и когда данные изменяются, я хочу, чтобы он перезаписал старый файл новыми данными, однако я получаю сообщение об ошибке: ОШИБКА 1086 (HY000): Файл '/srv/samba /share/peachtree.csv уже существует. Есть ли опция или переключатель, который я могу указать в инструкции, чтобы принудительно перезаписать существующий файл?

SELECT * FROM peachtree,
INTO OUTFILE '/srv/samba/share/peachtree.csv'
FIELDS TERMINATED BY ','
ENCLOSED BY '"'
LINES TERMINATED BY '\n';

person Colin Inskeep    schedule 18.01.2013    source источник
comment
Нет. Его нельзя перезаписать. Ответ здесь указывает на документы. stackoverflow.com/questions/960627/.   -  person Erik Nedwidek    schedule 18.01.2013


Ответы (2)


Тебе нельзя. Это функция безопасности. В противном случае вы можете выбрать такие файлы, как /etc/password или /etc/shells.

Из руководства:

Форма SELECT ... INTO OUTFILE 'имя_файла' оператора SELECT записывает выбранные строки в файл. Файл создается на хосте сервера, поэтому для использования этого синтаксиса у вас должна быть привилегия FILE. имя_файла не может быть существующим файлом, что, помимо прочего, предотвращает уничтожение таких файлов, как /etc/passwd и таблиц базы данных.

http://dev.mysql.com/doc/refman/5.0/en/select.html

person 123    schedule 04.07.2013

В этом решении используется динамический SQL и запись в файловую систему Windows.

Select Now() Into @Now;                                              # get DateTime
Set @Now = Replace(@Now, ':', '-');                                  # format DateTime for the filesystem

# set Destination filename using formatted DateTime
Set @FilNam = Concat("'", 'd:/Folder/qrySelectToFile ', @Now, '.TXT', "'");
#Select @FilNam;                                                     # debug

# build query to execute, one clause at a time, for encoding purposes
Set @Sel     =  'Select * From vewViewName Into OutFile '    ; # Select From Into
Set @FldsTrm = ' Fields Terminated By ","'                         ; # Fields Terminated
Set @FldsEnc = Concat(" Enclosed By '", Char(34 Using utf8), "'")  ; #        Enclosed. 'Using' clause is to avoid a blob of 34 spaces.
Set @LinsTrm = " Lines Terminated By '\\r\\n'"                     ; # Lines  Terminated
Set @Qry = Concat(@Sel, @FilNam, @FldsTrm, @FldsEnc, @LinsTrm, ';'); # all together now

Prepare            Stmt From @Qry;                                   # Prepare
Execute            Stmt          ;                                   # Execute
Deallocate Prepare Stmt          ;                                   # Done

Другие ответы на MySQL INTO OUTFILE переопределяют существующий файл?

person Bilbo    schedule 02.07.2019