1. 程式人生 > 其它 >資料庫結構版本控制

資料庫結構版本控制

資料庫結構版本控制

http://netkiller.github.io/journal/mysql.struct.html

摘要


目錄

  • 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 手札》