Я использую MardiaDB, и мне интересно, есть ли способ установки "корзины" на моем сервере, где, если кто-то удалил таблицу или что-то, что переместится в корзину и восстановить ее, просто.
Не говоря о установке вещей, чтобы восстановить его и все это, но мутно "сохранить место", где он хранится (у меня больше места достаточно), пока я не решит удалить его или просто держать его там в течение 24 часов.
Какие-нибудь мысли?
Такой функции нет. http://bugs.mysql.com принимает "запросы функций".
Такая функция обязательно будет включать MySQL; он не может быть полностью выполнен в файловой системе ОС. Это связано с тем, что запущенная mysql кэширует информацию в ОЗУ, о которой FS не знает. И поскольку информация о таблице /db/proc/trigger/etc не находится полностью в одном файле. Вместо этого дополнительная информация существует в других, более общих файлах.
С MyISAM ваша цель была частично возможной в fs. Таблица MyISAM состояла из 3 файлов: .frm
, .MYD',
.MYI'. Тем не менее, MySQL должен был бы сбросить что-то, чтобы забыть, что он знает о таблице, прежде чем fs может перемещать 3 файла где-то в другом месте. MyISAM уходит; поэтому даже не думайте об использовании этого "двигателя".
В InnoDB таблица состоит из файла .ibd
(если используется file_per_table) плюс файл .frm
, а также некоторая информация в ibdata1
файле ibdata1
. Если таблица PARTITIONed
, макет более сложный.
В версии 8.0 большая часть предыдущего абзаца станет неправильной - происходит существенное изменение.
"Транзакции" - это способ отмены записи в таблицу...
BEGIN;
INSERT/UPDATE/DELETE/etc...
if ( change-mind )
then ROLLBACK;
else COMMIT;
Эффективно, журнал отмены действует как корзина, но только на уровне записи, и только до тех пор, пока вы не выполните COMMIT
.
MySQL 8.0 добавит возможность иметь инструкции DDL (например, DROP TABLE
) в транзакции. Но, опять же, это только до COMMIT
.
Подумайте о том, что COMMIT
выполняет промывку корзины.