У меня есть несколько DDBB на InnoDB (MySQL 5.5.7. -FreeBSD). В течение 5 лет у меня нет никаких проблем. Я понимаю периодически проверять таблицы, оптимизировать, ...Через 5 лет несколько строк исчезли из таблицы mySQL innoDB
Загадоренно таблица одного из БД потеряла 20 строк из 70 (УДАЛИТЬ!). Эти строки были вставлены несколько лет назад. Никаких отношений между ними (случайные идентификаторы). Это очень маленький стол.
Я не нашел причину после нескольких часов исследований (и Google). Я восстановил информацию через последнюю резервную копию.
Я проверил:
WEB APP:
1) Приложение не имеет ВЕЬЕТЕ, только ВЫБРАТЬ или UPDATE.
2) Нет УДАЛИТЬСЯ НА КАСКАДЕ, без внешнего ключа.
2) Защищенный SQL INJECT.
3) Нет таблиц управления приложениями (как phpMysqlAdmin).
4) В моем журнале приложений нет попыток атаки или доступа в течение этих часов.
MYSQL:
1) Все проверки строк были сделаны непосредственно в консоли тузда без использования APP.
2) mysqlcheck: нет ошибки в затронутой таблице.
3) Mysqldump: нет дампа исчезающих строк, только оставшиеся строки.
4) Журнал ошибок: зарегистрированная ошибка отсутствует.
5) Файл table.idb не содержит потерянных записей, только оставшиеся строки.
6) Пользователь mysql доступен только локально (по IP).
SERVER:
1) Любой имеет доступ к серверу.
2) На HDD или на контроллере не было ошибок.
3) Я не вижу инцидентов в системных журналах.
Видимо, все правильно. Я не знаю, что произошло.
Я думаю, что из двух вариантов:
1) ошибка в MySQL 5.5.7 ???
2) В те часы, когда записи были потеряны, я делал импорт (по разной базе данных) миллионов INSERT и DELETE. Я не думаю, что этот интенсивный процесс повредил (без следа) другую таблицу в другой базе данных.
Я беспокоюсь, если это произойдет снова!
Спасибо!
ОБНОВЛЕНИЕ 1 @pala_ рекомендовал мне проконсультироваться с бункером (я не смотрел!).
В бункерном журнале 20 запросов со знаменитым DELETE!
Я вставить бен-журнал:
(...)
BEGIN
/*!*/;
# at 83069675
# at 83069772
# at 83070746
# at 83071672
# at 83072677
#150505 12:29:18 server id 168291 end_log_pos 83069772 Table_map: `affected_database`.`affected_table` mapped to number 583255
#150505 12:29:18 server id 168291 end_log_pos 83070746 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83071672 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83072677 Delete_rows: table id 583255
#150505 12:29:18 server id 168291 end_log_pos 83073123 Delete_rows: table id 583255 flags: STMT_END_F
### DELETE FROM affected_database.affected_table
### WHERE
### @1=xxxxxxx
### @2=xxxxxxxx
### @3=xxxxxxxxxx
### @4=xxxxxxxxx
### @5=xxxxxxxxx
### @6=xxxxxxxxx
### @7=xxxxxxxxxx
### @8=xxxxxxxxx
### @9=xxxxxxxxxx
### @10=xxxxxxxxxxxx
### @11=xxxxxxxxxxx
### @12=xxxxxxxxxxx
### @13=xxxxxxxxxxx
### @14=xxxxxxxxxxx
### @15=xxxxxxxxxxx
### @16=xxxxxxxxxxx
### @17=xxxxxxxxxxx
### @18=xxxxxxxxxxx
### @19=xxxxxxxxxxx
### @20=xxxxxxxxxxx
### @21=xxxxxxxxxxx
### @22=xxxxxxxxxxx
### @23=xxxxxxxxxxx
### @24=xxxxxxxxxxx
### DELETE FROM affected_database.affected_table
### WHERE
(...) x20
Как это работать?
Благодаря
sql-server - это другая база данных для mysql - не помещайте ее, если она вам не нужна. у вас есть двоичный журнал включен? если это так, проверьте, чтобы увидеть, действительно ли строки были удалены с помощью запроса. –
Вы быстро! Я редактировал, чтобы удалить тег, поскольку я видел ссылку на Microsoft SQL Server. Спасибо! – BeAsT
помните, что оператор REPLACE INTO может удалять строки при конфликтующих с новыми значениями [replace-into-think-two] (http://code.openark.org/blog/mysql/replace-into-think-twice). Могли бы вы укажите структуру таблицы (если таковая имеется). – houssam