資料庫結構版本控制

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

Mr. Neo Chen (陳景峯), netkiller, BG7NYT


中國廣東省深圳市龍華新區民治街道溪山美地
518131
+86 13113668890


版權聲明

轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。

文檔出處:
http://netkiller.github.io
http://netkiller.sourceforge.net

微信掃瞄二維碼進入 Netkiller 微信訂閲號

QQ群:128659835 請註明“讀者”

2017-06-16

摘要

目錄

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 <root@slave.example.com>
Date:   Wed Dec 17 12:33:55 2014 +0800

    2014-12-17.04:33:55			
			
			

這裡僅僅將資料庫結構版本控制,關於版本控制軟件更多細節,延伸閲讀《Netkiller Version 手札》