如何合并 MySQL 备份文件 (*.sql)

Jac*_*ack 5 mysql mysqldump mysql-workbench restore

我们有多个格式MySQL的数据库备份文件,*.SQL我们希望使用这些文件来恢复数据库。但是,由于 sql 文件包含"DROP TABLE"定义,因此运行一个脚本会导致删除由前一个脚本创建的数据。除了这些 sql 文件之外,我们还有一些其他的备份文件夹,其中包含*.FRM*.MYD文件。在所有两种情况下,我认为这些备份是DifferentialIncremental我们必须合并/组合所有这些。如果是这样,我们如何在不丢失数据的情况下组合它们?由于我没有经验MySQL,如果可能的话,你能解释一下使用的方法MySQL Workbench吗?提前致谢。

来自 sql 文件之一的一些行:

DROP TABLE IF EXISTS `BLACKLIST`;
    CREATE TABLE `BLACKLIST` (
      `ID` int(11) NOT NULL auto_increment,
      `NAME` varchar(30) NOT NULL,
      `SURNAME` varchar(30) NOT NULL,
      PRIMARY KEY  (`ID`),
      UNIQUE KEY `BLACKLISTINDEX` (`NAME`,`SURNAME`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
Run Code Online (Sandbox Code Playgroud)

O. *_*nes 3

.SQL 文件是文本。您可以在文本编辑器中打开它们。然后,找到并删除DROP TABLEandCREATE TABLE语句。最后,使用工作台或任何其他客户端运行其余的 INSERT 语句。

关于差异备份和增量备份,您必须以正确的顺序还原 SQL 文件才能获得您希望的结果。这意味着您必须根据您拥有的文件非常仔细地计算出该顺序。Oracle 等商业 RDMS 拥有精心设计的增量备份和差异备份方案,以及恢复方案。MySQL 没有这样的东西,所以无论你拥有什么,要么是自行开发的,要么是基于某种第三方软件包的。

如果这是我的项目,我会创建数据库和所有备份文件、.frm 文件和其他内容的牺牲副本。然后我会尝试以正确的顺序恢复内容。

一旦我确信我的副本是正确的,我就会对整个内容进行 SQL 备份。我实际上创建了两个备份项:一个仅包含 CREATE TABLE 语句,另一个仅包含数据。工作台可以做到这一点。

然后恢复该干净备份以创建新的生产数据库。

工作台无法帮助您处理 FRM 和 MYD 文件。要使用它们,您需要弄清楚如何将它们放在服务器文件系统中的正确位置,并重新启动正在查看它们的 MySQL 服务器。将这些文件视为备份是一项粗略且危险的工作。如果你成功地恢复了它们,请将你的成就想象成一头会说话的驴子。它表现不佳并不奇怪,它能发挥作用才是奇迹。

展望未来:普通的 SQL 备份文件不应包含数据定义语言,例如 DROP TABLE 或 CREATE 表语句。您可以创建仅包含这些语句而不包含数据的单独文件,并在需要时保留它们。