MySQL将当前数据库与备份SQL文件合并

时间:2016-05-10 19:25:14

标签: mysql sql sql-server mysqldump

我有一个数据库' books'含有100,000件物品。

所有包含"陀思妥耶夫斯基"因为作者被删除了。但是,我有一个我的cronjob制作的备份SQL文件。

我想将Dostoyevsky的20,000件物品放入SQL文件的数据库中。

注意:自备份cronjob运行以来,数据库发生了巨大变化。因此,我必须找到一种方法来不从当前数据库中删除任何内容,并从旧数据库中添加具有该特征的所有项目(而不仅仅是启动旧数据库)。

我不知道第一步是什么。 mysqldump似乎没有这种能力,我遇到了一些麻烦"导入" SQL文件而不覆盖当前的数据库。

编辑1

我做了sudo grep "books" backup.sql

然后又回来了:

INSERT INTO `db` VALUES ('localhost','books','selector','Y','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N','N');
-- Current Database: `books`
CREATE DATABASE /*!32312 IF NOT EXISTS*/ `books` /*!40100 DEFAULT CHARACTER SET latin1 */;
USE `books`;

我应该将带有书籍的所有行替换为old_books吗?

编辑2

sed -i -- 's/books/old_books/g' *backup.sql*致力于使sql文件不会覆盖当前的数据库

1 个答案:

答案 0 :(得分:2)

将备份还原为新架构,因此您将拥有booksold_books。根据您创建备份的方式,如果备份中有use books,您需要重写,或者只需导入备份。

一旦你有两个模式彼此相邻,就用旧模式编写一个select,选择你想要重新导入到新模式中的所有行。您必须进行查询才能完全匹配新架构。沿着这个

的路线
select title, author, 'invented value only found in new schema' from old_books.books where auther like '%dostojevski%';

然后,当该查询准确提供您想要的内容时,请将其更改为insert into ... select,如此

insert into books.books
select title, author, 'invented value only found in new schema' from old_books.books where auther like '%dostojevski%';

那应该是它。之前采取新的备份,如果失败,你可以回去。