|
|
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Пример запроса: SELECT * INTO OUTFILE '/files/big_data.txt' FROM `big_table`; Есть процесс, который читает файлы из папки files и перекидывает их на другой сервер. Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу. Как можно исправить эту ошибку? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 00:08:35 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyКак можно исправить эту ошибку?Имхо, только дополнительной сигнализацией. Например, созданием флагового файла после окончания основного процесса. Копирующий процесс не должен начинать свою работу без наличия флагового файла. Причем оба процесса первым же действием должны удалять этот файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 01:47:23 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyЕсть процесс, который читает файлы из папки files и перекидывает их на другой сервер. Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу. Как можно исправить эту ошибку? Исправьте ошибку, "при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 08:48:54 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Artemeey, если процесс в линухе, попробуй такой вариант: if [ "`/usr/sbin/lsof ${output_file}`" ]; then scp ${output_file} ${v_jerdin_bir_jerovo} fi естественно, по времени надо отрегулировать. или условие в while поставить, и файл скопируется как только файл будет закрыт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 09:00:37 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
login_sqlruArtemeey, если процесс в линухе, попробуй такой вариант: if [ "`/usr/sbin/lsof ${output_file}`" ]; then scp ${output_file} ${v_jerdin_bir_jerovo} fi естественно, по времени надо отрегулировать. или условие в while поставить, и файл скопируется как только файл будет закрыт. упс, там ключ -z должен быть, а то сработает наоборот. if [ -z "`/usr/sbin/lsof ${output_file}`" ]; ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 11:35:41 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
login_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 12:48:50 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
miksoftlogin_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки? программер из меня никакой, и на исходный код mysql я не заглядывал, но обычно файл закрывает после записи данных. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 13:16:13 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
miksoftlogin_sqlruкак только файл будет закрыт.А есть гарантия, что файл не закрывается на середине выгрузки? Конечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:13:05 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Artemeeymiksoftпропущено... А есть гарантия, что файл не закрывается на середине выгрузки? Конечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его. Проверяя не процессы, а EOF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:15:56 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Artemeeymiksoftпропущено... А есть гарантия, что файл не закрывается на середине выгрузки? Конечно в любой момент MySql может упасть.Почему обязательно "упасть" ? Может там запись устроена так, что закрывает/открывает файл после каждой строки. Не представляю зачем так делать, но и гарантии обратного нет. По крайней мере, пока в исходники не посмотрите. Artemeey(MySql не завершил свою операцию в течение часа)А у вас есть этот час на ожидание? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:24:47 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyПроверяя не процессы, а EOF.Это как? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:24:59 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Я остановился на варианте с флагом в имени файла. Код: php 1. 2. 3. 4. Код: sql 1. Код: php 1. При чтении папки пропускаю имена файлов, которые начинаются на "_". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:28:38 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
miksoft, https://ru.wikipedia.org/wiki/EOF Полагаю, что если процесс не завершился, либо завершился с ошибкой, файл не будет иметь этого символа. Однако из-за сложности поиска и неуверенности, как именно MySql добавляет этот символ, этот вариант я отбросил. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:30:21 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyЯ остановился на варианте с флагом в имени файла.Тоже вариант. Вот только если вы можете вызвать rename в нужный момент, почему бы там не сделать сразу копирование куда нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:30:42 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
Artemeeymiksoft, https://ru.wikipedia.org/wiki/EOF Полагаю, что если процесс не завершился, либо завершился с ошибкой, файл не будет иметь этого символа. Однако из-за сложности поиска и неуверенности, как именно MySql добавляет этот символ, этот вариант я отбросил.Сильно сомневаюсь, что он вообще его добавляет. На практике употребления этого символа я не видел со времен DOS-а. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 17:32:54 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
miksoftArtemeeyпропущено... Конечно в любой момент MySql может упасть.Почему обязательно "упасть" ? Может там запись устроена так, что закрывает/открывает файл после каждой строки. Не представляю зачем так делать, но и гарантии обратного нет. По крайней мере, пока в исходники не посмотрите. Исходники смотреть не стал, но на рабочем сервере проверил (уговор дороже денег): файл не закрывает. таблица не очень большая около ~3Гб. и я не знаю таких хитрых приемов, чтоб файл закрывать во время записи данных. как минимум это не логично. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 20:03:36 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyКонечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его. Не легче ли узнать упал mysql или нет, чем "по дате создания файла можно смотреть, какой не был закрыт должны образом" и можно ваш скрипт полностью, честно не понял что там делает $name или же $filename_temp. разбираться в чужом коде не мой конек, ибо очень мало опыта. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.06.2015, 20:30:27 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
login_sqlruArtemeeyКонечно в любой момент MySql может упасть. Предполагаю, что вариант хороший, по дате создания файла можно смотреть, какой не был закрыт должны образом (MySql не завершил свою операцию в течение часа) и удалять его. Не легче ли узнать упал mysql или нет, чем "по дате создания файла можно смотреть, какой не был закрыт должны образом" и можно ваш скрипт полностью, честно не понял что там делает $name или же $filename_temp. разбираться в чужом коде не мой конек, ибо очень мало опыта. Файл пишется в "_file.txt"; Затем переименовывается в "file.txt" Раз в час (к примеру) файлы созданные более чем час назад и начинаются с подчеркивания удаляются (считаются не корректными в следствие остановки процесса экспорта по какой-то причине) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2015, 16:25:15 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
ArtemeeyПример запроса: SELECT * INTO OUTFILE '/files/big_data.txt' FROM `big_table`; Есть процесс, который читает файлы из папки files и перекидывает их на другой сервер. Вероятна ошибка, при которой процесс начнет читать файл из папки, не убедившись, что INTO OUTFILE завершил работу. Как можно исправить эту ошибку? в процессе открывать файл эксклюзивно. Или писать в один файл, а читать другой, после окончания записи переименовывать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2015, 22:06:25 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
я бы предложил решать задучу, не как довести до ума изначальную идею ТС, а как решить проблему... для начала надо её оссознать. итак, есть процес (не ТС процесс, а пускай будет - есть некое действие) - а именно селект инту файл - и это действие лепит в файл данные, и понятное дело что другие не должны этот файл трогать до окончания данного действия. ну в базе мускла можно вешать локи, и если некий процес хочет начать выгрузку в файл с именем ххх, он вешает в мускле лок с именем lock_file_xxx начинает выгрузку, после завершения снимает локк. другой процес, перед троганьем любого файла из папки файлс, сначала вешает лок с улсовием если его нету, и если у него получилось повесить лок, то забирает от туда файл, лок снимает. а то что вы..ну решите задачу, как не мешать процесу два делать первому выгрузку в файл... а дальше ведь не загорами следующая проблема...а как сделать так чтоб селект инту не портил файл который другой процес начал копировать, или только хочет. сдесь два независимых процесса, имеют общий ресурс - доступ к нему нужен - ответ очевиден, что-то, что ведёт себя как симафор. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2015, 20:25:42 |
|
||
|
INTO OUTFILE и блокировка файла
|
|||
|---|---|---|---|
|
#18+
хотя вариант с переименованием тоже годиться! ибо тогда мы разделяем ресурсы - получаем цепочку действий, первая стадия, вторая. ток предварительно удостовериться что переименуя, мы не затрём другой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2015, 21:17:22 |
|
||
|
|

start [/forum/topic.php?fid=47&msg=38992231&tid=1832898]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
40ms |
get topic data: |
7ms |
get forum data: |
2ms |
get page messages: |
37ms |
get tp. blocked users: |
1ms |
| others: | 229ms |
| total: | 341ms |

| 0 / 0 |
