Экспорт (резервное копирование) и усечение (удаление) таблицы одновременно (то есть атомарный)?
Я принимаю форум с "золотом форума". Люди обменивают это много, дарят это, награждают людей этим, чтобы "поблагодарить" или "как" должности или повысить репутацию.
Тем не менее, я обеспокоен тем, что может быть какая-то уязвимость, которая позволяет людям взламывать золото в своей учетной записи на форуме, поэтому я добавил регистрацию в КАЖДОЙ транзакции с золотом на форуме.
Это работает хорошо. Я могу выполнить суммированные запросы, чтобы убедиться, что неизвестные источники не вводят форумное золото в систему, и обеспечить учет всего золотого форума, присужденного пользователям.
Тем не менее, он полностью взорвался. Всего за пару дней у меня в таблице более 100000 записей. Я также получил письмо от своего веб-хоста о медленном предупреждении о запросе mySQL, которое представляет собой простой SELECT из этой таблицы с одной записью, без объединений, упорядочивания, функций типа date_add() или чего-либо еще даже.
Поэтому я хочу полностью экспортировать И очистить таблицу с журналами. Теперь я обычно создаю резервную копию остальной части своей базы данных с помощью функции экспорта в phpmyadmin. Однако эта таблица очень активна, от 10 до 50 новых строк добавляются каждую секунду, но я хочу сохранить целостность и точность моих вычислений, не теряя записей.
Есть ли "атомарный" способ экспорта и удаления всех записей без промежуточных транзакций?
1 ответ
Итак, я только что закончил
- создание новой таблицы TEMP,
- выбрать все из таблицы журнала,
- вставив его в новую таблицу TEMP,
- затем удалив из LOG все, где существует такая же запись в таблице TEMP
- экспорт таблицы TEMP
- выполнение глобальной замены INSERT INTO `temp` на INSERT INTO `log`