1. 程式人生 > >讓天下沒有難用的資料庫 » RDS作業功能的支援

讓天下沒有難用的資料庫 » RDS作業功能的支援

RDS最近將會支援資料庫的job功能,包括mysql的events和mssql的job. RDS在開放一個服務給使用者使用的時候,需要考慮非常的多因素,比如:

  •   該服務所佔用的資源(記憶體,cpu等);
  •   存在的bug(bug的存在可直接導致使用者在使用該服務上出現不當或者錯誤);
  •   潛在的安全風險(服務的開放往往需要開通某些埠,這樣增加了RDS被攻擊的可能性);
  •   與RDS現有架構的融合,比如:rds的架構採用的雙機熱備(主庫和備庫同時存在,主庫down機後能夠迅速切換到備庫,所以必須考慮到開放job功能後,對RDS HA的影響,保證在HA切換後job仍能夠正常的執行).

所以我們會不斷的問自己一些問題,然後自己再去解答它:

(1).主庫上建立一個job,備庫上會不會也會建立一個job?

答:

  1. mysql上在主庫建立一個events,會傳送binglog日誌到備庫,所以備庫上仍會建立一個events;
  2.  mssql的job是建立在mssql系統資料庫中的,而RDS的備庫採用mssql的mirror架構,也就是說msssql資料庫不會被複制到備庫,那麼在mssql資料庫中建立的job也不會建立到備庫中;針對mssql中job不會同步到備庫的情況,RDS需要有一個同步程式,定時將主庫的job資訊同步到備庫,以保證主備切換後job能夠正常執行;

(2)主庫上執行的job,備庫上會不會在重新執行一遍?

答:

  1. mysql在主庫建立events時候有一個引數為DISABLE ON SALVE,這個引數可用於控制在備庫上events是否執行,預設是不執行的,所以使用者在備庫上的job是不會執行的;更保險一點的做法就是任何備庫都關閉掉events的功能;
  2. mssql由於我們的同步程式會將主庫的job同步到備庫,所以備庫上也會存在job,那麼這個job會不會執行喃?答案是不執行,因為mssql的備庫處於mount狀態(只負責接收運用主庫傳送過的日誌,不提供讀寫功能),測試發現備庫的job會一直執行,但是由於主庫不可訪問,在job一開始執行就報錯.

(3)開啟job功能佔用的資源消耗有多少?

答:

  1.    mysql上啟用events功能開啟後,通過show processlist可以看到mysql會啟動一個叫event_scheduler程序;
  2.    mssql的開啟有些麻煩,首先需要開啟windows的sqlagent服務,同時要授予帳號相應的許可權:Sqlagentopertorrole,通過windows的工作管理員可以看到啟動了一個程序:sqlagent.exe,大約佔用了6M的記憶體;
(4)RDS主備切換後,新主庫(原備庫)中job如何處理? 答:
  1.    mysql例項在主備切換後,由於原來的備庫job是disable掉的,所以需要切換程式需要將備庫上的所有job都設定為enable,同時由於之前events的功能被disable掉,現在需要將events功能開啟,並且將原主庫(新備庫)的events功能關閉;
  2.   mssql原來的備庫是不可訪問,現在切換為主庫後,主庫可以訪問,job能夠正常執行;原來的主庫變為了備庫,不可訪問,job會執行失敗;
(5)job的備份怎麼處理? 答:
  1. mysql的邏輯備份採用mysqldump,而events預設是不備份的,所以備份程式需要加上events的備份(新增引數-E,Dump events);
  2. mssql備份需要加上mssql資料庫的備份;
(6)可能的bug: 答:
  1.     mysql events在低版本中建立,如果建立超過2038年,執行時間會改為1970-01-01 00:00:00,  在高版本中建立:超過2038年的會報錯;   Events中執行 ddl的遞迴操作是不允許的,低版本中會導致mysql crash:
  2.  mssql 暫時沒有遇到bug;

通過上面的評估後,RDS資料庫將會支援作業功能,預計會在下一個釋出版本中與客戶相見(預計在8月末釋出).