新老数据库表同步问题

背景:开发中遇到一个问题,接过来一个项目,有俩 DDL,然后发现了问题,最后一个是最新建表语句,但是没有插入语句,第一个有插入语句但是不是最新的建表语句


解决思路:

如果有多个表,手动复制粘贴 INSERT 语句不仅慢,而且因为新老表结构(字段数量)不一样,很容易报错。

这里有一个最快、最稳妥 的"移花接木"方案。你需要创建两个临时数据库来做中转。

请按以下步骤操作(假设你使用的是 Navicat 或类似的数据库工具,IDEA 自带的 Database 工具也可以):


第一步:准备两个数据库

为了不弄乱,我们在本地 MySQL 里新建两个库:

  1. db_old (旧库):用来装 eladmin.sql(有数据,但结构老)。
  2. db_new (新库):用来装 admin-boot...202409.sql(结构最新,但没数据)。

第二步:分别导入 SQL

  1. db_old 里运行 eladmin.sql
    • 结果:表都有数据,但字段可能缺胳膊少腿。
  2. db_new 里运行 admin-boot...202409.sql
    • 结果:表结构是最完美的,但里面是空的。

第三步:数据传输 (核心操作)

现在的任务就是:把 db_old 里的数据,灌入 db_new 的壳子里。

  1. 打开 Navicat,点击顶部菜单的 工具 (Tools) -> 数据传输 (Data Transfer)
  2. 源 (Source) :选择 db_old
  3. 目标 (Target) :选择 db_new
  4. 关键设置 (非常重要):
    • 在"选项"里,取消勾选"创建表" (Create Tables)。(我们不要它覆盖新结构)
    • 勾选"插入数据" (Insert Data)。
    • 处理模式:选择"追加" (Append) 或 "替换" (Replace)。
  5. 点击开始。
    • 原理 :Navicat 会尝试按字段名匹配。
    • 如果 db_new 多了个字段(比如 new_col),它会填默认值(NULL)。
    • 如果 db_new 少了个字段(比如 old_col),它会自动丢弃旧数据里的这个字段。
    • 这样就完美解决了结构不一致的问题。
方法 B:如果你只用 IDEA
  1. 在 IDEA 右侧 Database 面板,连接上 db_old
  2. 按住 Shift 选中所有表 -> 右键 -> Export Data to File (导出数据到文件)。
  3. Extractor (导出格式) 选择:SQL - Insert
  4. 导出到一个文件 all_data.sql
  5. 打开这个 all_data.sql,尝试在 db_new 里运行。
    • 缺点 :如果 INSERT 语句里指定了列名还好;如果没指定列名且列数对不上,会报错,你可能需要手动删减几个报错表的语句。

第四步:收尾

  1. 传输完成后,你的 db_new 现在就是 "新结构 + 旧数据" 的完全体了。
  2. 回到你的 Spring Boot 项目配置文件 (application.yml)。
  3. 把数据库连接地址改成连接 db_new
  4. 启动后端,这下应该既不报错,又有数据了。

⚠️ 重点检查对象

数据导过去后,重点看下这几个表,只要它们没问题,系统就能跑:

  1. sys_user (用户)
  2. sys_role (角色)
  3. sys_menu (菜单 - 这个最重要,结构变了菜单可能加载不出来)
  4. sys_users_roles (关联表)

如果 sys_menu 报错,建议直接在 db_new 里手动清空 sys_menu,然后找一份最新的 ELAdmin 菜单 SQL 重新导入(因为菜单结构变化往往最大)。

相关推荐
AC赳赳老秦几秒前
代码生成超越 GPT-4:DeepSeek-V4 编程任务实战与 2026 开发者效率提升指南
数据库·数据仓库·人工智能·科技·rabbitmq·memcache·deepseek
啦啦啦_999914 分钟前
Redis-2-queryFormat()方法
数据库·redis·缓存
玄同7651 小时前
SQLite + LLM:大模型应用落地的轻量级数据存储方案
jvm·数据库·人工智能·python·语言模型·sqlite·知识图谱
吾日三省吾码1 小时前
别只会“加索引”了!这 3 个 PostgreSQL 反常识优化,能把性能和成本一起打下来
数据库·postgresql
chian-ocean1 小时前
百万级图文检索实战:`ops-transformer` + 向量数据库构建语义搜索引擎
数据库·搜索引擎·transformer
小Tomkk1 小时前
数据库 变更和版本控制管理工具 --Bytebase 安装部署(linux 安装篇)
linux·运维·数据库·ci/cd·bytebase
qq_12498707532 小时前
基于JavaWeb的大学生房屋租赁系统(源码+论文+部署+安装)
java·数据库·人工智能·spring boot·计算机视觉·毕业设计·计算机毕业设计
倒流时光三十年2 小时前
SpringBoot 数据库同步 Elasticsearch 性能优化
数据库·spring boot·elasticsearch
码农小卡拉3 小时前
深入解析Spring Boot文件加载顺序与加载方式
java·数据库·spring boot
怣503 小时前
MySQL多表连接:全外连接、交叉连接与结果集合并详解
数据库·sql