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

标签 sql sql-server mysql

我有一个数据库“书籍”,其中包含 100,000 多个项目。

所有包含“Dostoevsky”作者的项目均已删除。但是,我有一个 cronjob 制作的备份 SQL 文件。

我想将陀思妥耶夫斯基的那 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`;

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

编辑2

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

最佳答案

将备份恢复到新架构中,这样您将拥有 booksold_books。根据您创建备份的方式,无论其中是否有use books,您都需要重写或者直接导入它。

一旦您有两个彼此相邻的模式,请针对旧模式编写一个选择,以选择您想要重新导入到新模式中的所有行。您必须进行查询,使其与新架构完美匹配。沿着这个思路

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%';

应该就是这样。之前进行新的备份,这样如果失败,您可以返回。

关于sql - MySQL 将当前数据库与备份 SQL 文件合并,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37147269/

相关文章:

sql - SQLite 中的有效表名是什么?

sql-server - 如何调试 SQL Azure 服务器上的速度变慢?

sql - 优化 MySQL 查询以避免 "Using where; Using temporary; Using filesort"

java - SQL 查询仅返回 SELECT 语句中第一列的值

mysql - 具有多列子查询的SQL笛卡尔积,未知列问题

sql - 更新行为

java - Hibernate 中的 c3p0 中可能存在内存泄漏?

php - 如何使用下拉列表中的选定项目来填充 php 中的项目?

sql - 使用子查询而不是表名

sql-server - 如何找出是什么在影响我的 SQL Server?