mysql数据库合库数据库合并心得
要区分表的主键类型和有无外键
1、自增主键+ 外键相关表
2、uuid + 外键相关表
3、没有外键的自增表
4、没有外键的uuid表
5、没有外键的自增表无数据
6、没有外键的uuid表无数据
7、字典表
自增主键+ 外键相关表=增加偏移量自增主键,偏移量为基准表的最大id select max(id),换库读取的时候要重置偏移量,重新读取max(id)
数据合并原则:自增主键+偏移量合并,uuid直接合并,重复的uuid生成新值,自增主键记录下暂不插入
数据合并方法:选定某个数据库为主库,依据表主键类型分为四大类,读取其他库的表数据,按照表主键类型插入到新表中
新增四个方法:
读取自增主键+外键,
读取uuid主键+外键,
读取自增主键无外键,
读取非自增主键无外键
可以用方法去自动读取,代码读取各个库的数据,合并到主库的数据,如有重复记录下,并生成新的uuid
新增一个合并表数据的记录日志,记录合并异常的数据
表结构 tb_merge_database_record
CREATE TABLE tb_merge_database_record
(
tb_id
varchar(36) NOT NULL COMMENT ‘id’,
data_text
varchar(50) DEFAULT NULL COMMENT ‘数据库名’,
table_text
varchar(50) DEFAULT NULL COMMENT ‘表名名’,
filed_text
varchar(50) DEFAULT NULL COMMENT ‘字段名’,
filed_value
varchar(50) DEFAULT NULL COMMENT ‘字段值’,
fault_reason
varchar(256) DEFAULT NULL COMMENT ‘失败原因’,
update_at
datetime(3) DEFAULT CURRENT_TIMESTAMP(3) COMMENT ‘最后修改时间’,
update_at
datetime(3) DEFAULT CURRENT_TIMESTAMP(3) COMMENT ‘最后修改时间’,
PRIMARY KEY (tb_id
) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT=‘合并数据库错误记录表’;