mysql—不同服務器之間的表同步


原文鏈接:這里

0.前言

前面幾篇文章,分別說了同一個服務器同一個數據庫的觸發器同步

同一個服務器,不同數據庫之間通過觸發器同步。

這篇文章,我們介紹一下,不同服務器之間的數據同步。

兩個不同服務器上的數據庫的兩個表要做同步,本來想做主從的,最后由於種種原因放棄了,於是考慮是用FEDERATED做兩個表的同步。

1.安裝及開啟服務

很多博文上說,直接找到mysql的配置文件,在mysql的配置文件中加入federated,然后重啟mysql服務就行。但是,實際上,如果你沒有這個的話,第一步應該先安裝。

我們執行

 show ENGINES

如果沒有下面這一行,我們就要執行安裝指令。

在mysql命令行執行安裝指令:

install plugin federated soname ‘ha_federated.so’;

然后重啟mysql服務,再次執行show ENGINES 就能看到了。

2.格式及例子
ENGINE=FEDERATED CONNECTION = 'mysql://user:password@ip:port/databaseName/tableName'

比如下面這樣:

CREATE TABLE `user2` (
`id` varchar(255) NOT NULL COMMENT 'id',
`code` varchar(255) DEFAULT NULL COMMENT '代碼',
PRIMARY KEY (`id`),
UNIQUE KEY `upk_user_id` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=9 DEFAULT CHARSET=utf8 COMMENT='用戶表'
ENGINE=FEDERATED CONNECTION='mysql://root:pwd#102021@123.172.123.123:3306/myapp/user';

經過測試, 如果語句測試通過,那么我在主表user2中添加一條信息,在myapp數據庫中的user表中則會自動同步一條數據。

反之也成立。

3.一些問題

實際操作中遇到一些問題,比如,數據庫連接密碼中有’@’符號,報錯:

Can’t create federated table. The data source connection string ‘mysql://root:pwd@2192432@123.123.123.123:3306/test’ is not in the correct format

請參考這篇文章解決。

另外,實際操作中遇到,在別的服務器上在執行創建命令時,表創建成功,但是沒有字段,而且一直在讀秒,這基本就是失敗了,暫時沒找到原因,猜想是權限或者是數據版本差別太大的原因。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM