【问题标题】:How to restore differential mysql dump如何恢复差异mysql转储
【发布时间】:2016-06-28 10:36:08
【问题描述】:

我有一个名为“Testing”的数据库。现在我必须从具有旧+新数据的新转储文件中恢复数据到“测试”数据库。我只想将新数据恢复到数据库(不复制旧数据)。

尝试备份表的一部分然后恢复它(How to use mysqldump for a portion of a table?),但没有成功,因为我的表中没有像 ID 这样的列(行计数的主键)

我的表结构是这样的,

 A              | B          | C       | D     | E       |
+---------------+------------+---------+-------+---------+
| 1432550740000 |     111004 | 10000   |     2 | 9690001 |
| 1432550790000 |     123001 | 10000   |     2 | 9690001 |
| 1432550340000 |   44440215 | 10000   |     2 | 9690001 |
| 1432550450000 |  125400054 | 10000   |     2 | 9690001 |
| 1432551444000 |   43459067 | 10000   |     2 | 9690001 |
+---------------+------------+---------+-------+---------+

有人可以指导我吗?

【问题讨论】:

  • 您如何决定要备份哪些数据?您不需要 id 字段来编写查询,任何提供预期结果集的有效 sql 都应该可以解决问题(如果您可以使用 SELECT .. INTO OUTFILE ..)。
  • @Philipp 我将根据 Old table 的行数来决定。例如,如果旧表包含 X 行意味着,新转储将有 X+Y 行。我想恢复 Y 行。
  • 啊,现在创建只包含新数据的转储已经太晚了?

标签: mysql sql


【解决方案1】:

您可以通过创建一个新表(与旧表相同的结构)来绕道,然后将新旧数据的数据转储到该表中。

然后,您可以从其他表中已存在的新数据中删除行。 (理想情况下,您的数据中有一些东西可以识别您的新值,但如果您自己编写查询,它也可以使用限制)

DELETE FROM newTable WHERE `identifier` IN (SELECT `identifier` FROM oldTable);
DELETE FROM newTable LIMIT 12; -- deletes first 12 entries

现在新表中只有新数据。然后您可以截断旧表并将新数据插入旧表中。

TRUNCATE oldTable;
INSERT INTO oldTable SELECT * FROM newTable;

然后你可以截断、清空或删除新表,你不再需要它了。

【讨论】:

  • 1.根据标识符删除数据:这将只提供新的数据表..如果我至少有一个唯一列,它很有用:/(我的没有唯一列)..... 2 .deleting using limit:deleting old table count records from new table听起来不错。但我不能用这个作为解决方案,为什么因为如果旧表数据也改变了意味着我可以使用这个删除新数据(有机会)......最后我得到了解决方案,如果我使用同一数据库中的新转储文件恢复数据“测试”来自旧表本身的 X+Y 记录(不重复)......非常感谢您的指导。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-06-07
  • 1970-01-01
  • 2017-01-22
  • 1970-01-01
  • 2018-03-16
  • 1970-01-01
相关资源
最近更新 更多