使用Navicat 进行MySql数据库同步功能
作者:胡德安
准备:
打开Navicat管理工具(比如Navicat Premium 15管理工具)
两个数据库第一个是源数据库A和要被同步的目标数据库B
1、鼠标左键选中源数据库A
2、左键点击菜单里的工具,然后在弹出的列表里选择《结构同步》
如下图所示:
3、在弹出的界面里在目标哪里连接选择被同步的数据库连接地址和数据库选择被同步数据库的数据库名称
4、然后点击比对
如下图所示
5、点击比对后会弹出对话框,正在比对数据库,慢慢等待即可(如下图所示)
6、比对结束后,会弹出界面,总共有四个
(1)要修改的对象
(2)要创建的对象
(3)要删除的对象
(4)没有操作(如下图所示)
7、选择确定要同步的对象后,点击上图页面的部署,会弹出下面的页面,大致看看部署的脚本,然后点击运行。(一般先选择要创建的对象,进行同步,同步完成后再选择要删除的对象或要修改对象的进行具体分析后进行同步,具体原因在最后的重点注意里提到)
8、会弹出如下页面,慢慢等待即可
9、最终执行完的页面应该是(如下图所示)
10、到此数据库同步功能结束、点击关闭即可
重点注意:第六步里同步功能的要修改的对象这里,比如所下图的要修改对象的bed表,我把源数据库的SubHosp字段改成SubHospSubHosp或者其他名称的字段比如我的名字hudean,点击同步后:我们看看DDL比对
源数据库的DDL
CREATE TABLE `sinodb`.`bed` (
`Id` char(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'UUID()' COMMENT ' 主键',
`WardCode` char(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '病区代码',
`BedNum` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '床号',
`CreateTime` datetime NOT NULL DEFAULT '1900-01-01 00:00:00' COMMENT '创建时间',
`SubHospSubHosp` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0001' COMMENT '院区代码',
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
目标数据库的DDL
CREATE TABLE `test123`.`bed` (
`Id` char(36) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'UUID()' COMMENT ' 主键',
`WardCode` char(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '病区代码',
`BedNum` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '床号',
`CreateTime` datetime NOT NULL DEFAULT '1900-01-01 00:00:00' COMMENT '创建时间',
`SubHosp` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0001' COMMENT '院区代码',
PRIMARY KEY (`Id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;
然后看看部署脚本:
ALTER TABLE `test123`.`bed` DROP COLUMN `SubHosp`;
ALTER TABLE `test123`.`bed` ADD COLUMN `SubHospSubHosp` varchar(8) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '0001' COMMENT '院区代码' AFTER `CreateTime`;
这里明显看出是先删除SubHosp字段再添加SubHospSubHosp字段,所以对要修改对象这里的每个表都应该看看,修改表字段名称的,一般要我们手动执行修改表字段名称的sql语句:ALTER TABLE 表名 CHANGE 旧字段名 新字段名 新数据类型;
要删除的对象:同理我把源数据库的Bed表的表名改成beds后会产生要创建的对象Beds和要删除的对象Bed
所以设计数据库一定要仔细斟酌,尽量设计好表之后,不要修改表名和字段名(修改后一定要单独列出来修改语句)