Mysql遠程數據庫同步

1. 服務配置說明:

服務器名稱

服務器地址

數據庫名稱

用戶名

密碼

端口

數據庫服務器A

121.xx.xx.xx

youjihui_zs

root

youjihui

3306

數據庫服務器B

120.yy.yy.yy

youjihui_cx

root

root

3309

 

2. 目標:

服務器A數據庫youjihui_zs中的數據表t_index和服務器B中數據庫youjihui_cx中數據表t_index_cx數據同步。

 

3.約束

如果直接採用federated的方式,即t_index建立federated引擎,映射到t_index_cx表。由於映射後,這兩個表的數據和操作是完全同步的,也就是說,在其中任何一個表上執行插入、更新和刪除操作,引擎會在另外一個表中執行同樣的操作。

由於t_index是正式數據庫的表,t_index_cx是查詢數據庫的表。如果在查詢數據庫中操作數據,引發正式庫的數據變化,是相當有風險的。

4.方案

  方案結構圖如下:


過程說明:

4.1. 查詢庫授權正式庫的操作權限

授權可以從ip121.xx.xx.xx的服務器A上,用root用戶密碼是root,訪問當前服務器Bmysql服務:

GRANT ALL PRIVILEGES ON *.* TO 'root'@'121.xx.xx.xx' IDENTIFIED BY 'root' WITH GRANT OPTION;

 

4.2. FEDERATED引擎

create table t_index_zs

(

  id VARCHAR(50) not null,

  mc VARCHAR(200),

  PRIMARY KEY(id)

)ENGINE=FEDERATED CONNECTION='mysql://root:[email protected]:3309/youjihui_cx/t_index_zs_map'

4.3. 觸發器2

-- INSERT 觸發器

DROP TRIGGER IF EXISTS tindex_insert_after_trigger;

CREATE TRIGGER tindex_insert_after_trigger

AFTER INSERT ON t_index_zs_map

FOR EACH ROW

BEGIN

  INSERT INTO t_index_cx(id,mc) VALUES(new.id,new.mc);

END;


-- UPDATE 觸發器

DROP TRIGGER IF  EXISTS tindex_update_after_trigger;

CREATE TRIGGER tindex_update_after_trigger

AFTER UPDATE ON t_index_zs_map

FOR EACH ROW

BEGIN

  UPDATE t_index_cx SET mc=new.mc WHERE id=new.id;

END;

 

-- DELETE 觸發器

DROP TRIGGER IF EXISTS tindex_delete_after_trigger;

CREATE TRIGGER tindex_delete_after_trigger

AFTER DELETE ON t_index_zs_map

FOR EACH ROW

BEGIN

   DELETE FROM t_index_cx where id=old.id;

END;

5.總結

 添加2張中間表和2個觸發器,避開正式表的直接操作,進而避免破壞正式表的數據。





發佈了29 篇原創文章 · 獲贊 6 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章