Перейти к содержимому


Пропадают файлы


Сообщений в теме: 12

#1 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 02 Февраль 2011 - 12:32

Здравствуйте.
Обнаружилась следующая проблема - из базы исчезают файлы.
Итак, по порядку.

Использую "Клиентская база 1.6.3 WEB". Собственно она установлена на сервере под управлением ОС ASPLinux12 (apache, mysql). Не сразу, но была замечена следующая особенность, что из базы бесследно исчезают файлы.
Итак, если в базе, в какой-то таблице (например из категории "Общение", таблица "Сообщения") имеется поле "Прикреплённые файлы" и тип этого поля - "файл". При ближайшем рассмотрении выяснено, что в этом поле храниться не сам файл (т.к. формат поля в mysql - text), а ссылка на файл.

mysql> show columns from f_data12;
+----------+------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| user_id | int(11) | YES | | NULL | |
| add_time | datetime | YES | | NULL | |
| status | int(11) | YES | | NULL | |
| f127 | int(11) | YES | | NULL | |
| f129 | text | YES | | NULL | |
| f132 | datetime | YES | | NULL | |
| f134 | int(11) | YES | | NULL | |
| f153 | text | YES | | NULL | |
...
...
+----------+------------+------+-----+---------+----------------+


здесь f151 это именно такое поле. Итак, при добавлении файла в этом поле появляется ссылка, а сам файл будет храниться в другой таблице, а именно f_data_files.

mysql> show columns from f_data_files;
+----------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| table_id | int(11) | YES | | NULL | |
| field_id | int(11) | YES | | NULL | |
| line_id | int(11) | YES | | NULL | |
| name | varchar(255) | YES | | NULL | |
| type | varchar(255) | YES | | NULL | |
| size | varchar(255) | YES | | NULL | |
| content | longblob | YES | | NULL | |
+----------+--------------+------+-----+---------+----------------+
8 rows in set (0.01 sec)


Так вот, по причинам, которые я не могу понять, через некоторое время записи в таблице f_data_files исчезают, а записи в таблице f_data12 остаются, т.е. в таблице "Сообщения" (f_data12) остаются ссылки на исчезнувшие записи в таблице f_data_files.

Хотелось бы как то прояснить эту ситуацию.

Спасибо.

#2 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Февраль 2011 - 17:13

Вы не отследили после каких именно действий пропадают файлы? Например, после востановления из бэкапа? И были ли там вообще файлы ранее или они изначально не записались в f_data_files при добавлении?

#3 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 02 Февраль 2011 - 17:33

Нет, к сожалению, не отследил. Да и как отследить, если с базой работает большое количество людей. Можно, конечно, настроить log (который отслеживает все запросы) в mysql, но он за день будет огромен (т.е. речь будет идти о гигабайтах). Наверное, всё-таки, придётся. Да и пропадают они как то непонятно, может через несколько дней, может через несколько недель (такое наблюдалось у меня уже три раза, просто сначала я не придал этому значения). Для меня сейчас это стало принципиально в связи с созданием своих таблиц.

В f_data_files файлы были (select * from f_data_files - были записи), по бэкапам же и определил, что файлы (записи в f_data_files) исчезли (бекап стал вдруг гораздо меньше). Т.е. записи в f_data12 - ссылки на файлы в f_data_files остались, а записей в самой f_data_files нет.

#4 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Февраль 2011 - 17:39

Может эти файлы были удалены пользователями, но при этом остались ссылки?

Вообще сложно сказать в чем тут дело, если не выяснить обстоятельства при которых произошло исчезновение. У нас подобного вроде не наблюдалось.

#5 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 02 Февраль 2011 - 18:03

Ну, сами понимаете, что пользователь имеет доступ только к f_data12, а уж как там удаляются файлы из f_data_files мне не известно, могу только предпологать. Т.о. если б пользователь удалял файлы, то, по логике вещей, они должны были удалиться из f_data12 в первую очередь, но они там есть (ссылки на файлы).
Я понимаю, что, возможно, обращаюсь к вам с таким вопросом впервые и один, тем не менее, хотелось бы разобраться.

#6 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 02 Февраль 2011 - 18:13

Просмотр сообщенияvadimruss (2.2.2011, 18:03) писал:

если б пользователь удалял файлы, то, по логике вещей, они должны были удалиться из f_data12 в первую очередь, но они там есть
По логике вещей удаляться должны и файлы и ссылки на них. Я это к тому что возможно в результате какой-либо ошибки или сбоя ссылки не удаляются, поэтому и уточняю у Вас. Попробуйте удалить какой-либо загруженный файл из программы.

#7 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 03 Февраль 2011 - 11:12

Просмотр сообщенияРазработчик (2.2.2011, 18:13) писал:

По логике вещей удаляться должны и файлы и ссылки на них. Я это к тому что возможно в результате какой-либо ошибки или сбоя ссылки не удаляются, поэтому и уточняю у Вас. Попробуйте удалить какой-либо загруженный файл из программы.
Итак, перед добавлением файлов имеем:
mysql> select id,user_id,add_time,status,f127,f132,f134,f153 from f_data12;
...
...
| 39 |	  45 | 2010-10-14 09:56:47 |	  0 |   31 | 2010-10-14 09:56:00 |   45 | 30.09.2010.pdf
04.10.2010.pdf
05.10.2010.pdf
07.10.10.pdf
11.10.2010.pdf
13.10.2010.pdf
29.09.2010.pdf | 
| 40 |	  45 | 2010-10-20 13:06:02 |	  0 |   31 | 2010-10-20 13:06:00 |   45 | 15.10.2010.pdf
18.10.2010.pdf
19.10.2010.pdf					
...
...
видно, что ссылки на файлы есть.

mysql> select * from f_data_files;
Empty set (0.00 sec)
а записей о самих файлах нет.


Добавляю файл (в программе). После этого:
mysql> select id,user_id,add_time,status,f127,f132,f134,f153 from f_data12;
...
...
| 39 |	  45 | 2010-10-14 09:56:47 |	  0 |   31 | 2010-10-14 09:56:00 |   45 | 30.09.2010.pdf
04.10.2010.pdf
05.10.2010.pdf
07.10.10.pdf
11.10.2010.pdf
13.10.2010.pdf
29.09.2010.pdf | 
| 40 |	  45 | 2010-10-20 13:06:02 |	  0 |   31 | 2010-10-20 13:06:00 |   45 | 15.10.2010.pdf
18.10.2010.pdf
19.10.2010.pdf															   | 
...
...
| 43 |	   1 | 2011-02-03 10:58:08 |	  0 |   27 | 2011-02-03 10:58:00 |	1 | selinux.doc

запись с id=43 - о новом файле.

Далее:
mysql> select id,table_id,field_id,line_id,name,type,size from f_data_files;
+----+----------+----------+---------+-------------+--------------------+------+
| id | table_id | field_id | line_id | name		| type			   | size |
+----+----------+----------+---------+-------------+--------------------+------+
| 91 |	   12 |	  153 |	  43 | selinux.doc | application/msword |	  | 
+----+----------+----------+---------+-------------+--------------------+------+
1 row in set (0.00 sec)
т.е. в таблице f_data_files появилась запись о файле (поле content не показываю).


Удаляю файл. Затем:
mysql> select id,user_id,add_time,status,f127,f132,f134,f153 from f_data12;
...
...
| 39 |	  45 | 2010-10-14 09:56:47 |	  0 |   31 | 2010-10-14 09:56:00 |   45 | 30.09.2010.pdf
04.10.2010.pdf
05.10.2010.pdf
07.10.10.pdf
11.10.2010.pdf
13.10.2010.pdf
29.09.2010.pdf | 
| 40 |	  45 | 2010-10-20 13:06:02 |	  0 |   31 | 2010-10-20 13:06:00 |   45 | 15.10.2010.pdf
18.10.2010.pdf
19.10.2010.pdf															   | 
...
...
| 43 |	   1 | 2011-02-03 10:58:08 |	  0 |   27 | 2011-02-03 10:58:00 |	1 |
в записи с id=43 ссылка на файл исчезла.

Проверяю в f_data_files:
mysql> select * from f_data_files;
Empty set (0.02 sec)

Т.о. всё удаляется нормально.

#8 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Февраль 2011 - 11:18

Тогда возможны 2 варианта: либо это здесь непричем, либо ошибка возникает не всегда, а периодически или при определенных условиях. Попробуйте (если это реально) опросить сотрудников на предмет того удалялись какие либо из этих файлов или нет. Если такой опрос невозможен или не даст результатов, то скорее всего выяснить причину можно будет только через отслеживание логов.

#9 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 03 Февраль 2011 - 11:25

Просмотр сообщенияРазработчик (3.2.2011, 11:18) писал:

Тогда возможны 2 варианта: либо это здесь непричем, либо ошибка возникает не всегда, а периодически или при определенных условиях. Попробуйте (если это реально) опросить сотрудников на предмет того удалялись какие либо из этих файлов или нет. Если такой опрос невозможен или не даст результатов, то скорее всего выяснить причину можно будет только через отслеживание логов.
Сотрудников я опросил - не удаляли.
Действительно, возникает эта ситуация редко и при непонятных условиях. Буду думать о логах.

#10 CbCoder

    Активный участник

  • Программист ООО "КБ"
  • PipPipPip
  • 8 759 сообщений
  • Пол:Мужчина
  • Город:Казань

Отправлено 03 Февраль 2011 - 11:34

Есть еще вариант что файлы пропали при востановлении базы из бэкапа (если такое восстановление имело место). Попробуйте создать бэкап на рабочей базе и затем восстановите его (лучше на другой копии программы в целях безопасности). Затем проверьте содержимое f_data_files.

#11 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 03 Февраль 2011 - 14:18

Из бЭкапа база не восстанавливалась, так что этот вариант отпадает.

#12 DarkNight

    Активный участник

  • Пользователи
  • PipPipPip
  • 181 сообщений

Отправлено 08 Февраль 2011 - 08:37

в общем то была такая проблема с бекапом, в какой-то версии 1.6.х из бекапа не восстанавливались файлы. Тогда я вам писал об этом. При переходе на новую версию 1.9.0 .
на тот момент при восстановлении файлы не восстанавливались, и в новую версию я их добавлял запросами взятыми из бекапа. Все получилось.

Какое то время все работало, но при обсуждении очередных доработок в декабре мне пожаловались на то что файлы все равно пропадают. Заказчик забил на это и перестал хранить файлы в базе.

Я решил посмотреть, размер бекапа стал около 20mb, так как стоит хранение 10 дней то совсем старых уже небыло.

На тот момент когда я восстанавливал файлы в базе в ручную, размер бекапа был 150mb

заказчик утверждает что из бекапа ни разу не восстанавливали, и даже не лазили туда.

#13 vadimruss

    Участник

  • Пользователи
  • PipPip
  • 24 сообщений

Отправлено 08 Февраль 2011 - 13:20

Хм ... оказывается такая проблема есть не только у меня!





Количество пользователей, читающих эту тему: 2

0 пользователей, 2 гостей, 0 анонимных