2015-07-12 36 views
0

我有遠程主機(centos6)與MariaDB的(10.0.17-MariaDB的日誌 - MariaDB的服務器)作爲主:MariaDB的(MySQL的)站後複製了下來後

server-id = 1 
log-bin=mysql-bin 
binlog_do_db = mydatabase 

和地方(win8的。 1)用MariaDB的(10.0.16-MariaDB的日誌 - mariadb.org二進制分佈)作爲從屬:

server-id = 2 

作爲初始過程我傾倒遠程主機上的數據庫,其導入本地主機上,然後執行SHOW MASTER STATUS,獲取文件名和偏移量並運行:

CHANGE MASTER TO MASTER_HOST='$host', MASTER_USER='$user', MASTER_PORT = $port, MASTER_PASSWORD='$pass', MASTER_LOG_FILE='$fname', MASTER_LOG_POS=$pos 
STOP SLAVE 
START SLAVE 

複製開始。我在桌面上做的每件事都反映給奴隸。

但是,如果奴隸下降,它沒有任何變化(主人作出),而奴隸離線反映到奴隸!所以看起來我的奴隸應該永遠在線,但它是一臺筆記本電腦! 然而,從設備啓動後,實時複製仍然有效 - 它不記錄離線的所有更改,但是如果我在從設備聯機並啓動時更改了主設備上的數據庫,則所有更改都會完全反映到從設備。當然,我知道複製是基於聲明的,所以我沒有獲得數據差異,但獲得了指令。但我認爲師父記得它發送了什麼,什麼沒有發送。所以在下一個操作中,它只發送所有未交付的更改。我錯了嗎?

我的複製場景:主服務器與客戶端(移動設備)進行交互並且他們更改數據庫。我時不時地啓動我的筆記本電腦,開始複製,獲取更新的數據庫並做一些大量分析(對於我的2核廉價服務器來說太難了)。 也許有更好的方法?有沒有辦法像ICQ messenger一樣獲得「離線更改」? :) 現在我只能看到一個解決方案 - 完整的數據庫轉儲,但它不方便,花費太多時間和大量負載主。

回答

0

當奴隸沒有連接到主人,主人正在寫入其binlog(s)。奴隸已經記得從這些二進制文件中讀出的地方。當從站重新連接時,它會檢測到「停止的位置」,將主站二進制日誌中的更改複製到從站中繼日誌中並執行它們。這個「追趕」過程需要一點時間,多長時間取決於很多因素。

在從站上執行SHOW SLAVE STATUS;以驗證它已連接並正在運行(「是」)。

通常情況下,從設備的版本應該沒有比法師更舊。 (如果有10.0.17之間的任何爭論VS 16.在沒有更改日誌爲10.0.17跳出我,我懷疑。)

是否使用「平行復制」?請參閱bug fixed in 10.0.18

+0

不,它是1個主 - 1個從屬複製。昨天我發現並不是所有的日誌操作都被執行。例如,數據處理涉及創建臨時表,寫入,讀取和刪除。複製後,從屬設備上有臨時表。但是今天我沒有看到臨時表,所以看起來複制不是實時的,實際上需要很多時間。但是有沒有辦法知道複製是完整的並且是最新的?現在我的主人在24小時內更新一次,更新過程大約需要5分鐘。所以我認爲在至少10分鐘後兩個基地應該是相等的?但不是。 – Tertium

+0

我想我明白了:如果Seconds_Behind_Master == 0我們已經完成了。順便說一下,使用基於行的複製效果會更好 – Tertium