一加 7/7T 系列、OPPO K9s 開啟 ColorOS 12×Android 12 升級內測招募
阿新 • • 發佈:2022-04-13
資料庫結構版本控制
目錄
- 1. 什麼是資料庫結構版本控制
- 2. 為什麼要做資料庫結構本版控制
- 3. 何時做資料庫結構本版控制
- 4. 在哪裡做資料庫結構本版控制
- 5. 誰來負責資料庫結構本版控制
- 6. 怎樣做資料庫結構本版控制
- 6.1. 安裝指令碼
- 6.2. 啟動指令碼,停止指令碼
- 6.3. 檢視歷史版本
1. 什麼是資料庫結構版本控制
首先說說什麼是資料庫結構,什麼事版本控制。
資料庫結構是指資料庫表結構,資料庫定義語言匯出的DDL語句。主要由CREATE TABLE, DROP TABLE等等構成。
再來說說什麼事版本控制,如果你從事開發工作應該會很容易理解,版本控制就是記錄每一次變化,可以隨時檢視歷史記錄,並可回撤到指定版本。
2. 為什麼要做資料庫結構本版控制
軟體開發過程中需要常常對資料庫結構作調整,這是無法避免的,甚至很多想起啟動後,需求還不明確,開發人員只能按照所理解需求建立表。需求往往會發生變化,一旦變化,程式碼需要修改,表結構也避免不了。 我們常常剛改好資料庫結構,需求部門有發來通知,不用修改了,維持原有設計。甚至是過了幾周再次回撤。
所以我們要將資料庫結構的變化進行版本控制,通常的做法是DBA人工管理,但我覺完全可以自動化的工作,沒有必要浪費人力資源,且自動化不會犯錯更穩定,僅僅需要人工定期檢視工作狀態即可。
3. 何時做資料庫結構本版控制
任何時候都可以部署下面的指令碼,對現有系統無任何影響。
4. 在哪裡做資料庫結構本版控制
可以在版本控制伺服器上,建議GIT倉庫push到遠端。
5. 誰來負責資料庫結構本版控制
DBA與配置管理員都可以做,通常DBA不接觸版本庫這塊,建議建立一個backup使用者給配置管理員。
6. 怎樣做資料庫結構本版控制
6.1. 安裝指令碼
首先下載指令碼 https://github.com/oscm/devops/blob/master/shell/backup.mysql.struct.sh
wget https://raw.githubusercontent.com/oscm/devops/master/shell/backup.mysql.struct.sh mv backup.mysql.struct.sh /usr/local/bin chmod +x /usr/local/bin/backup.mysql.struct
建立備份使用者
CREATE USER 'backup'@'localhost' IDENTIFIED BY 'SaJePoM6BAPOmOFOd7Xo3e1A52vEPE';
GRANT SELECT, LOCK TABLES ON *.* TO 'backup'@'localhost';
FLUSH PRIVILEGES;
SHOW GRANTS FOR 'backup'@'localhost';
配置指令碼
BACKUP_HOST="localhost" 資料庫主機
BACKUP_USER="backup" 備份使用者
BACKUP_PASS="chen" 備份密碼
BACKUP_DBNAME="test aabbcc" 版本控制那些資料庫,多個數據庫使用空格分隔
BACKUP_DIR=~/backup 資料庫結構放在那裡
初始化倉庫
# /usr/local/bin/backup.mysql.struct init
Initialized empty Git repository in /www/database/struct/.git/
6.2. 啟動指令碼,停止指令碼
# /usr/local/bin/backup.mysql.struct
Usage: /usr/local/bin/backup.mysql.struct {init|start|stop|status|restart}
開始指令碼
# /usr/local/bin/backup.mysql.struct start
檢視狀態
# /usr/local/bin/backup.mysql.struct status
9644 pts/1 S 0:00 /bin/bash /usr/local/bin/backup.mysql.struct start
停止指令碼
# /usr/local/bin/backup.mysql.struct status
6.3. 檢視歷史版本
通過 git log 命令檢視歷史版本
# cd /www/database/struct/
# git status
# On branch master
nothing to commit (working directory clean)
# git log
commit d38fc624c21cad0e2f55f0228bff0c1be981827c
Author: root <[email protected]>
Date: Wed Dec 17 12:33:55 2014 +0800
2014-12-17.04:33:55
這裡僅僅將資料庫結構版本控制,關於版本控制軟體更多細節,延伸閱讀《Netkiller Version 手札》