› MySQL 5.5 Community Server
› MySQL 5.6 Community Server
› Percona Configuration Wizard
› XtraBackup 搭建主从复制
Great Sites on MySQL
› Percona
› MySQL Performance Blog
› Severalnines
推荐管理工具
› Sequel Pro
› phpMyAdmin
推荐书目
› MySQL Cookbook
MySQL 相关项目
› MariaDB
› Drizzle
参考文档
› http://mysql-python.sourceforge.net/MySQLdb.html
ranzige
V2EX  ›  MySQL

现有数据库数据丢失,求插入备份数据库中数据方法 !

  •  
  •   ranzige · Apr 9, 2016 · 3874 views
    This topic created in 3838 days ago, the information mentioned may be changed or developed.
    有一个 mysql 数据库 A , 4 月 2 号左右被管理员误删除了一些老数据。这个数据库有一个备份已经恢复成数据库 B ,但是 B 中数据只截至 3 月 27 日的。也就是说, A 中丢失的大部分数据在 B 中可以找到。
    我现在需要把现在数据库中误删除的数据从 3 月 27 日的库中恢复出来(包括标识自增字段还维持旧库的)。我想到的语句是这样:
    insert into a.table
    select * from a.table
    where not exists(select * from b.table where b.table.id=a.table.id)

    那么问题来了:怎样把 B 中的原标识列 ID 也插入?这样写对不对?还是有更好的方法 ?
    6 replies  •  2016-04-10 13:53:18 +08:00
    qianmeng
        1
    qianmeng  
       Apr 10, 2016 via Android
    分割一下。

    对单表来说,建立一个新表,先导入删除日期之前的,再导入删除日期之后的,标识应该不会乱
    ranzige
        2
    ranzige  
    OP
       Apr 10, 2016 via iPhone
    @qianmeng 问题是之前的标识也不是连续的。比如备份中的标识是 1 2 4 6 这样。而现在库中是 1 6 ,少了 2 和 4 。因为各表间 id 有关联,所以 id 列必须正确。
    ms sql 中可以通过启用标识列插入的方式修改 id 。 mysql 中不能吗?
    qianmeng
        3
    qianmeng  
       Apr 10, 2016 via Android
    @ranzige 你可能还没试过,只要不重复,只要后面的比前面的大,标识是可以原样复制过去的
    ranzige
        4
    ranzige  
    OP
       Apr 10, 2016
    @qianmeng 哦哦,就是说,之前删除的 2 和 4 ,那么再插入时, 2 和 4 的值会自己过去,是吧?
    vidon
        5
    vidon  
       Apr 10, 2016 via Android
    把 B 改成 A ?
    qianmeng
        6
    qianmeng  
       Apr 10, 2016 via Android
    @ranzige 我自己导入是这样的,不放心的话可以先测试测试
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   998 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 20:00 · PVG 04:00 · LAX 13:00 · JFK 16:00
    ♥ Do have faith in what you're doing.