一次業務跨庫遷移過程

      公司沒有專職dba,公司運維當中我對mysql日常操作有一定了解,因此主動請纓配合業務部門進行數據庫遷移。

一,業務背景

  1. 將現有業務數據庫B遷移到新服採購服務器上;
  2. 將該業務線的A數據庫中(100+表90G)表遷移到新數據庫實例B庫中;
  3. 部分業務表涉及到多個業務共同寫入(前期沒有提供接口)需要進行實時同步,方便後期改造。

二,遷移方案

  協同開發同學商量後,決定採用前期導入數據,並通過otter實時同步,然後切換業務的方式進行。具體如下:           
   1. 現有數據庫遷移到新服務器
        A,新服務器上啓動新數據庫,並採用mysql級聯複製:未來新的master掛載到現有數據庫的master進行
        數據同步,並在它下面掛載兩個slave進行數據同步,作爲未來的slave;
        B,切換時停止應用,確認主從同步狀態,修改業務數據庫地址配置爲新的地址,啓動應用;                    
   2. 跨庫遷移表,並實時同步  
        A,用mydumper(比mysqldump快,並能記錄binlog位置)導出A庫中遷移的表數據;並用myloader導入
        到B庫中;
        B,根據導出的binlog位置配置otter進行數據同步;
   3. 業務切換
        A,停止業務,停止otter,並刪除已完成同步的表配置(部分表需要長期)
        B,啓動otter,修改業務數據庫地址配置爲新的地址,啓動應用;
        C,後續業務改造,跨系統調用改爲接口(禁止直接寫表)方式,並最終停止otter;

三,遷移過程中的注意事項

  1.  遷移的表數量和名字反覆確認;
  2.  mysql級聯複製時候需要開啓 log_slave_updates;
  3.  otter配置存放的數據庫,需要忽略大小寫;同步源和目標數據庫需要字符集一致(utf-8);
  4.  myloader導入時候,需要開啓 -e選項,否則導入數據不會記錄binlog中;

四,mysqldump , mydumper/myloader速度比較

一次業務跨庫遷移過程

五,mydumper/myloader簡單使用說明

  • 賬號授權
    GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, REFERENCES, INDEX, ALTER, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, EVENT, TRIGGER ON *.* TO mydumper'@'192.168.1.%' identified by '123456';
  • 導出
    導出db_a庫中test1,test2表到/dumper/
    /usr/bin/mydumper -u mydumper -p 123456 -h 192.168.1.1 -P 3306 -B db_a -T  test1 test2 -t 8 -o /dumper/ &
  • 導入
    導入test1 test2 表到db_b庫
    /usr/bin/myloader -u root -p 123456 -S  /tmp/mysql.sock -t 8 -o -e -B db_b -d /dumper/ &
  • binlog信息
    /dumper/metadata
  • 注意事項
    1,如果需要記錄binlog日誌,開啓參數 -e
    2,如果需要drop 原有表,開啓參數 -o
    3, 如果目標庫存在 同名數據庫,移除 /dumper/db_a-schema-create.sql
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章