版權 © 2014 http://netkiller.github.io
版權聲明
轉載請與作者聯繫,轉載時請務必標明文章原始出處和作者信息及本聲明。
|
|
|
微信掃瞄二維碼進入 Netkiller 微信訂閲號 QQ群:128659835 請註明“讀者” |
2017-06-16
首先說說什麼是資料庫結構,什麼事版本控制。
資料庫結構是指資料庫表結構,資料庫定義語言導出的DDL語句。主要由CREATE TABLE, DROP TABLE等等構成。
再來說說什麼事版本控制,如果你從事開發工作應該會很容易理解,版本控制就是記錄每一次變化,可以隨時查看歷史記錄,並可回撤到指定版本。
軟件開發過程中需要常常對資料庫結構作調整,這是無法避免的,甚至很多想起啟動後,需求還不明確,開發人員只能按照所理解需求創建表。需求往往會發生變化,一旦變化,代碼需要修改,表結構也避免不了。 我們常常剛改好資料庫結構,需求部門有發來通知,不用修改了,維持原有設計。甚至是過了幾周再次回撤。
所以我們要將資料庫結構的變化進行版本控制,通常的做法是DBA人工管理,但我覺完全可以自動化的工作,沒有必要浪費人力資源,且自動化不會犯錯更穩定,僅僅需要人工定期查看工作狀態即可。
任何時候都可以部署下面的腳本,對現有系統無任何影響。
可以在版本控制伺服器上,建議GIT倉庫push到遠程。
DBA與配置管理員都可以做,通常DBA不接觸版本庫這塊,建議創建一個backup用戶給配置管理員。
首先下載腳本 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/
# /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
通過 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 手札》