【问题标题】:MYSQL/MardiaDB 'recycle bin'MYSQL/MariaDB '回收站'
【发布时间】:2018-06-24 12:22:59
【问题描述】:

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

不是在谈论安装东西以恢复它和所有这些东西,而是在我决定删除它或将其保留 24 小时之前,将其存储在一个“保存位置”(我有足够的空间)。

有什么想法吗?

【问题讨论】:

    标签: mysql backup mariadb restore recycle


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 你知道任何基于 Linux 的扩展可以做这样的事情吗?
    • 在 Linux 中不可能。见我的补充。
    • 我给了你我的“回答”一票。糟糕的是..我的意思是它会解决很多问题,我猜mysql可以集成一个选项来设置最大尺寸回收站(如果它变得更大,那么最大尺寸只是删除最旧的信息)或类似的东西.但是我又一次对他们的代码一无所知。
    • @SwAt.Be - 我添加了更多内容 - 也许你想要的一点点在“交易”中?
    • 所以如果我是对的,您需要禁用自动提交,然后才能使用事务? dev.mysql.com/doc/refman/5.7/en/commit.html
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-28
    • 2019-03-01
    相关资源
    最近更新 更多