2014-02-19 55 views
0

我需要從主機到從機進行工作的mysql複製。 (已經嘗試過)製作新的MYSQL複製

數據庫非常大(超過100GB),並且需要幾個小時才能爲新的從站做好準備。

數據庫有MyIsam和innoDB引擎,並且都正在編寫 我認爲我唯一的選擇是將數據文件從主服務器複製到新的從服務器上? (或者創建一個數據庫轉儲,我將在後面的第二回合主題中提到)

在此之前,我必須運行所有使用數據庫的服務,併爲表寫入鎖定數據,或者我應該關閉整個數據庫?

將數據目錄同步到新的複製服務器後,我啓動它,並且帶有表的數據庫在那裏。我得到了改變bin.log到007324和位置驅除掉0

錯誤1第一個錯誤:

1402 13 4時52分07秒[錯誤]知道了致命錯誤1236:「找不到第一個日誌當從二進制日誌讀取數據時,從主設備讀取二進制日誌索引文件中的文件名' 140213 4:52:07 [注意]從設備I/O線程退出,讀取日誌'bin-log.007323',位置46774422

之後,我從數據庫中得到了新的問題,這個錯誤從每個表中都出來了。

錯誤2:

錯誤 '文件不正確的信息:' 在查詢./database/table.frm'。默認數據庫:'數據庫'。

似乎出了點問題。

第二輪!

在這個場景之後,我開始認爲這可以在沒有長時間服務的情況下完成。

主數據庫已被配置,並且對另一個從屬設備正常工作。

所以我做了一些谷歌搜索,這就是我想出的。

製作讀鎖,以表:

FLUSH TABLES WITH READ LOCK; 

以轉儲:

mysqldump --skip-lock-tables --single-transaction --flush-logs --master-data=2 -A > dbdump.sql 

包裝和移動: gzip的(pigz)的所述DBDUMP和移動它之後到從服務器找到MASTER_LOG_FILE和轉儲中的MASTER_LOG_POS。

之後,我不認爲我想導入dbdump.sql,因爲它超過100GB和 將需要時間。所以我認爲SOURCE可以作爲選擇。

在從服務器:

CREATE DATABASE dbdump; 
    USE dbdump; 
    SOURCE dbdump.db; 

    CHANGE MASTER TO MASTER_HOST='x.x.x.x',MASTER_USER='replication',MASTER_PASSWORD='slavepass', 
    MASTER_LOG_FILE='mysql-bin.000001',MASTER_LOG_POS=X; 

    start slave; 

SHOW SLAVE STATUS \G 

我沒有測試過這個呢,我是對的東西?

--bp

回答

1

要認識到,發出命令SOURCE是相同的運行從殼轉儲SQL的進口。無論如何,這將需要很長時間。除此之外,你有正確的步驟 - 刷新主表的讀取鎖定,使master的數據庫轉儲,確保你注意master binlog座標,在slave上導入轉儲,設置binlog座標,開始複製。除非你真的知道你在做什麼(特別是對於INNODB表格),否則不要使用原始二進制文件。

如果您有多個大表(即不只是一個大表),您可以考慮按表(或表組)對轉儲/導入進行並行處理,以加快速度。實際上有工具可以幫助你做到這一點。

你可以使用原始的二進制文件,但它不適合心靈的暈眩。在過去,我使用rsync來差分更新主從服務器之間的原始二進制文件(在執行此操作之前,您仍然必須使用具有讀鎖定的flush table並收集master binlog座標)。對於MyISAM表,這實際上工作得很好。對於InnoDB來說,它可能更棘手。我更喜歡使用該選項來設置InnoDB,以便爲每個表寫入索引和數據文件。您需要rsync ibdata *文件。你會從slave刪除ib_logfile *文件。

這整個事情是一個高線的行爲,所以我不會訴諸這樣做,除非你沒有其他可行的選擇。在考慮嘗試二進制文件同步之前,絕對需要傳統的SQL轉儲,並且每次直到您非常自在地確定您知道自己在做什麼爲止。