使用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
所以設計數據庫一定要仔細斟酌,盡量設計好表之后,不要修改表名和字段名(修改后一定要單獨列出來修改語句)