日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Devops-运维效率之数据迁移自动化

發布時間:2024/4/17 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Devops-运维效率之数据迁移自动化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

overmind系統上線三個月,累計執行任務800+,自動審核執行SQL超過5000條,效率提升相當明顯,離“一杯咖啡,輕松運維”的目標又進了一步。

寫在前邊

overmind系統是我們自主研發的一個數據庫運維系統,目前包含數據庫管理、工單、SQL審核、SQL執行、SQL查詢、密碼表等功能,關于這些功能有寫過一些文章介紹:

  • 中小團隊快速構建SQL自動審核系統
  • Django開發密碼管理表實例【附源碼】

同時我們還自研了其他一些Devops相關的系統,這篇文章有介紹

  • 我們自研的那些Devops工具

自吹自擂

起初在寫overmind時就有考慮到之后的擴展,不僅僅是作為SQL自動審核執行的平臺,更希望能將其打造成一個數據庫自動化運維的專業系統,SQL自動審核執行作為第一個功能被開發了出來。三個月的使用后overmind得到了大家的認可,并且切切實實幫助我們節約了時間,這也給予了我這個非專業開發、半吊子DBA莫大的鼓勵和信心。

日常工作中經常會接到把數據庫整庫或單表從生產環境導入到測試環境或測試A導入到測試B等數據庫、表之間的數據互導需求,這類操作沒有太高技術含量還費時費力容易出錯,最適合做到自動化的流程中,這便是overmind要實現的第二個功能:工單+自動化數據遷移。

為什么需要工單?目前的流程都是通過郵件的方式,需求郵件到DBA,DBA執行導數據的操作。自動化的流程理論來說應該從頭至尾都無需人工參與,但涉及到數據安全問題,還是需要DBA確認,所以加了工單。同時工單具有狀態自助追蹤,減少溝通成本等優點,后續也方便統計工單量等指標,以便優化服務與流程。同時為了能夠保證工單及時被處理,我們每一步都會增加郵件和IM的通知,給用戶最及時的反饋。

數據遷移的工單流程很簡單,用戶提交工單,DBA進行審核,審核通過系統自動執行遷移操作,審核不通過流程結束。流程圖圖如下:

流程中沒有加入項目leader等的多層審核方式,主要是因為

  • 盡量跟之前的郵件流程保持一致,避免給用戶制造麻煩
  • 團隊規模較小,數據敏感度DBA基本可以把控,同時會在通知郵件中加上相關的同事以知曉
  • 遷移功能

    數據庫遷移主要是利用mysql的導入導出功能,核心的命令就一個

    mysqldump -h 10.82.9.19 -P 3306 -uops -pcoffee --default-character-set=utf8 --single-transaction --databases dbname | mysql -h 192.168.106.91 -P 3306 -uops -pcoffee --default-character-set=utf8 dbname

    以上命令是shell命令,在python下沒有找到直接導入導出mysql數據的包,只能在python代碼中調用shell命令,推薦使用subprocess模塊,這個模塊有著更加豐富的使用方法,方便獲取最終的命令執行狀態和輸出結果,轉換成完整的python類如下:

    from subprocess import Popen, PIPEclass Cmd():def __init__(self):self.src_host = '10.82.9.19'self.src_port = 3306self.src_database = 'dbname'self.des_host = '192.168.106.91'self.des_port = 3306self.des_database = 'dbname'self.tables = 'all'self.username = 'ops'self.password = 'coffee'def migration(self):# 利用mysqldump命令備份dump = "mysqldump -h %s -P %d -u%s -p%s --default-character-set=utf8 --single-transaction --databases %s" % (self.src_host, self.src_port, self.username, self.password, self.src_database)# 如果是對表的導出則加上表名,是個字符串'table1 table2 table3'if self.tables != 'all':dump += ' %s' % self.tables# 利用mysql命令導入mysql = "mysql -h %s -P %d -u%s -p%s --default-character-set=utf8 %s" % (self.des_host, self.des_port, self.username, self.password, self.des_database)# 執行導出導入shell命令process = Popen("%s | %s" % (dump, mysql), stderr=PIPE, shell=True)process_stdout = process.communicate()# 判斷shell命令執行結果狀態if (process.returncode == 0):print('遷移成功!')else:print(process_stdout[1].decode('utf8').strip())Cmd().migration()

    這里采用了shell中的管道,管道用|符號分割兩個命令,管道符前的命令正確輸出作為管道符后命令的輸入,好處是不需要生成單獨的sql文件存放在磁盤上,也就不需要考慮文件刪除,占用磁盤的問題,缺點是導出大的數據庫時可能會造成OOM,這個要根據自身情況綜合權衡。

    導數據屬于耗時操作,在web中應異步執行,這里采用了Celery來處理,這篇文章Django配置Celery執行異步任務和定時任務有詳細介紹Django中Celery的使用

    系統界面

    工單列表頁:普通用戶只顯示自己提交的工單,工單狀態一目了然,還有實用的搜索功能

    提交工單頁:overmind維護了一份數據庫列表,供系統里所有的功能使用,這里也不例外

    工單審核頁:審核頁和詳情頁其實是同一個頁面,只是根據工單不同的狀態展示不同的元素

    工單詳情頁:這里會詳細記錄這個工單的所有信息,提交、審核、執行的整個過程完整狀態

    寫在最后

  • 好的需求來源于日常的工作,重復的工作都可以自動化
  • 關于數據庫運維或者overmind有什么想法或建議歡迎交流

  • 如果你覺得文章對你有幫助,請轉發分享給更多的人。如果你覺得讀的不盡興,推薦閱讀以下文章:

    • 中小團隊快速構建SQL自動審核系統
    • Django配置Celery執行異步任務和定時任務

    轉載于:https://www.cnblogs.com/37Y37/p/11220337.html

    總結

    以上是生活随笔為你收集整理的Devops-运维效率之数据迁移自动化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。