我有一个数据库' 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文件不会覆盖当前的数据库
答案 0 :(得分:2)
将备份还原为新架构,因此您将拥有books
和old_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%';
那应该是它。之前采取新的备份,如果失败,你可以回去。