1. 程式人生 > >讓天下沒有難用的資料庫 » 遷移到RDS

讓天下沒有難用的資料庫 » 遷移到RDS

在使用者的日常遷移中常常採用以下的方法來完成遷移(以MYSQL為例):

  1. 將使用者資料庫變為只讀;
  2. 全量dump MySQL成文字;
  3. 將MySQL資料遠端load到RDS;
  4. 將使用者的資料庫連線地址改為RDS提供的連線地址;

該方案比較簡單,易於維持資料一致性,但當用戶的資料量達到一個數量級別後(假設以50G資料為標準),邏輯遷移的速度已經明顯的不能滿足使用者的要求,影響了所有使用者的寫入,並且時間過長。

那麼如何能夠做到對客戶應用的透明,實現線上遷移喃?常用的手段可以通過日誌同步的方法:

  1.  全量dump某個時間點之前的資料,並記錄全量dump完成後資料庫日誌的位置;
  2. 將全量的備份load到RDS;
  3. 從剛才全量完成dump後的日誌開始,通過解析日誌為可執行的sql,遠端load到RDS;
  4. 通過不斷的應用log,使得RDS慢慢追上使用者資料庫;;
  5. 將使用者的資料庫設定為只讀,繼續apply日誌到RDS,直到完全同步;
  6. 切使用者應用到RDS,完成切換;

有了原理,就有了很行的方法,RDS開發了一種mysql的線上遷移工具,首先通過mydumper完成一次全量的備份,然後記錄使用者資料庫binlog的位置,然後在通過rds的連線地址,使用myloader將備份資料load到RDS中,整個過程可以使用併發dump和load的方式完成;完成全量後,在通過mysqlbinlog將使用者在全量備份後的日誌位置開始進行binlog檔案的解析,解析成為被資料庫執行的語句,接著在遠端連線到RDS,將這些資料load到RDS資料庫中,這樣一步步將RDS資料庫追趕上使用者資料庫,用於可以將binlog的解析放在中間伺服器上,對使用者的資料庫的影響會降低許多;