Пропадают файлы
#1
Отправлено 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
Отправлено 02 Февраль 2011 - 17:13
#3
Отправлено 02 Февраль 2011 - 17:33
В f_data_files файлы были (select * from f_data_files - были записи), по бэкапам же и определил, что файлы (записи в f_data_files) исчезли (бекап стал вдруг гораздо меньше). Т.е. записи в f_data12 - ссылки на файлы в f_data_files остались, а записей в самой f_data_files нет.
#4
Отправлено 02 Февраль 2011 - 17:39
Вообще сложно сказать в чем тут дело, если не выяснить обстоятельства при которых произошло исчезновение. У нас подобного вроде не наблюдалось.
#5
Отправлено 02 Февраль 2011 - 18:03
Я понимаю, что, возможно, обращаюсь к вам с таким вопросом впервые и один, тем не менее, хотелось бы разобраться.
#6
Отправлено 02 Февраль 2011 - 18:13
vadimruss (2.2.2011, 18:03) писал:
#7
Отправлено 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
Отправлено 03 Февраль 2011 - 11:18
#9
Отправлено 03 Февраль 2011 - 11:25
Разработчик (3.2.2011, 11:18) писал:
Действительно, возникает эта ситуация редко и при непонятных условиях. Буду думать о логах.
#10
Отправлено 03 Февраль 2011 - 11:34
#11
Отправлено 03 Февраль 2011 - 14:18
#12
Отправлено 08 Февраль 2011 - 08:37
на тот момент при восстановлении файлы не восстанавливались, и в новую версию я их добавлял запросами взятыми из бекапа. Все получилось.
Какое то время все работало, но при обсуждении очередных доработок в декабре мне пожаловались на то что файлы все равно пропадают. Заказчик забил на это и перестал хранить файлы в базе.
Я решил посмотреть, размер бекапа стал около 20mb, так как стоит хранение 10 дней то совсем старых уже небыло.
На тот момент когда я восстанавливал файлы в базе в ручную, размер бекапа был 150mb
заказчик утверждает что из бекапа ни разу не восстанавливали, и даже не лазили туда.
#13
Отправлено 08 Февраль 2011 - 13:20
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных