在已经恢复但较旧的 MySQL 数据库上恢复是不好的做法吗?

分享于2022年07月17日 linux mysql restore 问答
【问题标题】:在已经恢复但较旧的 MySQL 数据库上恢复是不好的做法吗?(Is it bad practise to restore at already restored but older MySQL databases?)
【发布时间】:2022-01-23 20:46:57
【问题描述】:

我在 2 周前恢复了数据库(带有标志 --all-databases)时遇到了一种情况,但现在我需要几个数据库中的更新数据,所以我的问题是我可以只使用 mysqldump < newbackup 和已经安装的数据库或者我需要删除所有数据?请为我提供恢复新实例的最简单或最快的方法。 在 sqldump 我有类似 CREATE DATABASE /*!32312 IF NOT EXISTS*/

的句子


【解决方案1】:

默认情况下,您的转储文件将包含 DROP TABLE CREATE TABLE 语句,因此所有存在的表和其中的数据将首先被删除。然后将恢复您的转储中存在的表。

请注意,这甚至可能意味着表本身可能没有相同的列和索引。它们将按照您的转储文件中的定义重新创建。删除表后,自创建转储以来所做的任何更改都将丢失。

不会触及当前数据库中存在但不在转储文件中的任何表。也就是说,如果您在创建转储文件后创建了另一个表,则转储文件中没有 DROP & CREATE。因此,恢复转储不会对较新的表执行任何操作。如果较新的表引用已恢复表中的数据,这可能会导致一些不一致。

转储文件中可能缺少 DROP TABLE CREATE TABLE 语句。 mysqldump 有一些选项可以使转储省略这些语句(请参阅文档或 mysqldump --help )。但默认情况下,这些语句是存在的。