天天看點

MySQL表結構同步

   現在全身心投入到MySQL中。

     項目要求:将開發環境中的資料庫的修改同步至線上環境。

     開發者給出的解決辦法是:利用像Python 中的South架構,自動将開發環境的變更同步至生産環境。這個對于DBA來說是無法承受的(除非是建立資料庫結果類似的語句)。資料庫變更在生産環境執行,必須事先經過評估。對業務的影響降到最低,這個就設計到了重新設計索引,或者采用線上修改工具之類的。本文暫時先不讨論,下面給出表同步的解決辦法。

     以前的做法是通過navicate的工具将一個一個的資料庫進行對比或者自己寫腳本Mysqldump 隻dump 表結構,利用diff 挨個對比,在資料庫執行個體量少的情況下,可以接受。總之個人認為 不符合運維自動化的理念。

     描述資訊:

      1、該工具不會修改資料庫,至會搜集在不同資料庫之間的差異并生成SQL腳本。

      2、生成的SQL語句,會自動添加after,first 等關鍵字

      3、對于重命名的表或者字段,該工具生成先删除在重建的SQL語句

      4、對于MySQL的分區功能暫不支援。

     下載下傳并安裝:

     安裝條件:

     安裝:

     基本文法:

     source或者target的格式是:

     最終生成檔案的格式是:<database>[_<tag>].YYYYMMDD.(patch|revert)[_<version>].sql,有一個日志檔案

     一個patch檔案(應用到目标主機),一個revert檔案(可以做復原,這個做法是很棒的,個人很贊同,但作為DBA,最好在操作前對線上的資料庫做好備份)

     具體選項,可以通過  schemasync  --help 檢視

     常用選項:

       測試:

       在192.168.1.172上有一資料庫sync 庫内的表:t1(id int null)

       在192.168.1.175上有一資料庫sync 庫内的表:t1(id int not null)

       現在将172中的sync庫同步至175上:

       列印出的消息:

     我們可以打開檔案檢視下:

      這個檔案已經将id列 的非空屬性設定為空。将這個檔案應用到175上即可。!

(PS:此為簡單測試。在生成環境下,可以用shell循環同時同步多個庫,對于DBA來說,最好在應用更改之前,必須稽核一下該SQL,評估下對線上的影響,考慮線上DDL等工具)

本文轉自 位鵬飛 51CTO部落格,原文連結http://blog.51cto.com/weipengfei/930142,如需轉載請自行聯系原作者