MYSQL/MardiaDB 'recycle bin'

标签 mysql backup mariadb restore recycle

我正在使用 MardiaDB,我想知道是否有一种方法可以在我的服务器上安装“回收站”,如果有人删除了表或任何内容,它就会转移到回收站并很容易恢复。

不是谈论安装东西来恢复它和所有这些东西,而是乱七八糟地存储它的“保存位置”(我有足够的空间),直到我决定删除它或只是将其保留在那里 24 小时。

有什么想法吗?

最佳答案

不存在这样的功能。 http://bugs.mysql.com接受“功能请求”。

这样的功能必然涉及MySQL;它不能完全在操作系统的文件系统中完成。这是因为正在运行的 mysql 将 FS 不知道的信息缓存在 RAM 中。并且因为有关表/db/proc/trigger/etc 的信息并不完全位于单个文件中。相反,额外的信息存在于其他更通用的文件中。

使用 MyISAM,您的目标在 fs 中部分可能实现。 MyISAM 表由 3 个文件组成:.frm.MYD'、.MYI`。在 fs 可以将 3 个文件移动到其他地方之前,MySQL 仍然需要刷新一些东西来忘记它知道该表。 MyISAM 即将消失;所以根本就不要考虑使用那个“引擎”。

在 InnoDB 中,表由一个 .ibd 文件(如果使用 file_per_table)加上一个 .frm 文件以及公共(public) 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视为刷新回收站。

关于MYSQL/MardiaDB 'recycle bin',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48270308/

相关文章:

mysql - 如何关联 mysql 日志中的时间?

mysql - SQL - 显示分组值从一组到另一组的变化(取决于时间)

mysql - 读到行尾

mysql - SQL 错误说 CO​​UNT 中的列不存在

sql-server - 保存和恢复数据库状态的功能

android - Python:解压android备份?

mysql - 如何返回连接表中所有不匹配的行,如果匹配则检查条件?

mysql - 缩小在 mysql 中的日期添加的行

mysql - 是否可以自动将 mysql 数据库备份到 dropbox?

mysql - 获取连接的前 3 项