2017-04-07 122 views
3

我們正在使用Percona 5.7.16-10服務器。我想用XtraDB集羣擴展當前的解決方案。與此同時,我創建了其他機器並啓動了集羣(運行於5.7.17-11-57 Percona XtraDB集羣版本),並在那裏進行了一些測試(一切似乎都正常)。現在我想從正在運行的服務器中轉儲當前數據庫並將其插入到羣集中。停止羣集沒有問題(因爲它用於測試)。但是,當我按照慣例創建mysqldump時,由於pcx_strict_mode(信息here) - 強制執行Percona-XtraDB-Cluster prohibits use of LOCK TABLE/FLUSH TABLE <table> WITH READ LOCK with pxc_strict_mode = ENFORCING,因此我無法將其插入羣集,因爲mysqldump會創建包含禁止表鎖的腳本。所以我測試了幾個更多的選項,比如MASTER,它不應該檢查這個規則,但是它沒有幫助,因爲來自轉儲的插入查詢被卡住了而且什麼也沒有發生。將數據庫恢復到新羣集

是否有任何mysqldump選項可以避免表鎖定查詢,還是必須通過XtraBackup以某種方式將其還原,並將XtraBackup用於當前運行的服務器?

我讀過幾個主題here,但沒有與任何具有相同問題的人匹配。每個人都在解決如何從一些失敗恢復羣集,而不是從頭開始。

對於任何有關mysqldump的建議或將舊數據庫「插入」羣集的正確方法,我都會很高興。

回答

2

如果你能記下你目前的機器,如果你是從頭開始構建集羣的話,我認爲這些(上mysqldump)將避免strict_mode,可能還有一些其他打嗝:

--skip_add_locks --skip-lock-tables 

不要使用

--single-transaction --lock-all-tables 

這也可能是明智的讓裝入數據集羣的第一個節點,然後添加其他節點上,L讓他們使用SST加載自己。

如果您需要保持當前服務器處於活動狀態,那麼我們需要討論如何使其成爲主服務器,並將新羣集中的一個節點作爲從服務器。另外XtraBackup可能更適合。但現在,鎖和單一交易將是必要的。因此,將該strict_mode設置爲DISABLED似乎是正確的,因爲正在構建羣集,並且尚未生效。

(警告:我沒有經驗,執行你的任務;如果別人提供一個更令人信服的答案,跟他們一起走)

+0

謝謝!不知道我最後一次嘗試過程中發生了什麼,但按照你的設想,將strict_mode設置爲DISABLED,爲第二次嘗試工作(我之前一定犯過一些錯誤)。對於一些未來的讀者,我做了常規轉儲--single-transaction on,然後用DISABLED模式重新啓動羣集並恢復數據庫(僅僅因爲我正在抽取一些實時數據進行測試)。 只要它可用,我會給你賞金,謝謝! – Radim