1. 程式人生 > >Deltasql 資料庫版本管理工具學習筆記

Deltasql 資料庫版本管理工具學習筆記

一.Deltasql 功能

二.Deltasql伺服器端和客戶端的安裝

    2.1 Deltasql伺服器端的安裝

     2.2 Deltasql客戶端的安裝

三.Deltasql的使用

四.Deltasql 原理

五.還待研究的地方

一.Deltasql 功能

    目前我們對資料庫的管理是比較少的,尤其在對資料庫版本的控制方面。比如說當我們想恢復到以前的資料庫版本,當客戶A需要X版本的資料庫,客戶B需要Y版 本的資料庫,當釋出專案的時候專案的資料庫和開發人員的資料庫是否一致,等等這些問題解決起來還是會有一定的困難,所以引入Deltasql

    這個工具重點功能有3個,一個是對資料庫版本的管理,一個是對資料庫的分支功能。一個是模組的概念。

    Deltasql對於資料庫版本的管理:資料庫-->Deltasql 和 原始碼-->svn 是一個道理。svn可以對原始碼進行一個管理,同樣Deltasql可以對資料庫進行一個管理,也就是說,資料庫的更新,發展,全部都可以記錄在案。這樣 可以方便開發者找到任何時候的資料庫版本。

    Deltasql的分支功能:如下圖1.1 專案分支圖

1.1 專案分支圖

     可以這樣理解,我們的整個專案為HEAD,當我們開發不同的功能的時候,而且這些功能都完全不同的時候,可以建立分支,最後,當功能開發完畢,再合併會主幹上,也就是HEAD中。

    Deltasql模組的概念:每一個大型軟體都會分基礎模組和擴充套件模組。基礎模組也就是幾乎每一個模組都需要到它。

在Deltasql中,一個專案可以有1個或者多個模組,一個模組就是一組sql指令碼的集合。這樣的一個好處是:如下圖1.2 專案模組圖:


1.2 專案模組圖

    做這樣的假設,你的公司賣了一個軟體A給客戶XY;也賣了一個軟體B給客戶Z。那麼你就會定義3個專案,比如說Project_X,Project_Y,Project_Z.

module_utils 包含了支援全部這些應用的指令碼。典型的比如說,指令碼包含了使用者管理,群組,角色這些表。
module_A 包含了屬於A軟體的指令碼,在這裡全部的指令碼都僅僅屬於A軟體。
module_B 包含了屬於B軟體的指令碼,在這裡全部的指令碼都僅僅屬於

B軟體。
module_Cust_X 包含了屬於A軟體的指令碼,也包含了只為客戶X特別提供的一些指令碼,這個相當於定製模組
module_Cust_Y 包含了屬於A軟體的指令碼,也包含了只為客戶Y特別提供的一些指令碼,這個相當於定製模組
module_Cust_Z 包含了屬於B軟體的指令碼,也包含了只為客戶Z特別提供的一些指令碼,這個相當於定製模組
   這個時候就可以看到,使用模組的方式,可以達到一個清晰的效果,並且以後要增加基礎服務,就可以往module_utils中增加sql指令碼,要給Z使用者定製功能,就可以往module_Cust_Z中加入sql指令碼。

   這些就是deltasql比較重點的功能。

二.Deltasql伺服器端和客戶端的安裝

2.1 Deltasql伺服器端的安裝

    Deltasql是基於php進行開發,所以說需要一個php的開發執行環境。這就好像我們的web應用需要放在tomcat中跑一樣。這些的php執行環境選擇XAMPP.

1. 下載安裝XAMPP

它也自動幫我們安裝好mysql資料庫以及phpmyadminPsLinux安裝的時候會遇到一些東西找不到的問題,百度直接可以解決,不麻煩。

    安裝完之後,開啟它的服務,如下:

<span style="font-size:14px;">[[email protected] lampp]# ./xampp start
Starting XAMPP for Linux 5.6.8-0...
XAMPP: Starting Apache...already running.
XAMPP: Starting MySQL...already running.
XAMPP: Starting ProFTPD...already running.
[[email protected] lampp]#</span>

  2.安裝 deltasql伺服器端。

  下載 deltasql。然後把它放在XAMPPhtdocs中。如下圖2.1 deltasql放置路徑圖:

                                      

2.1 deltasql放置路徑圖

                                                                

2.2 deltasql安裝圖

    在我安裝的時候,publish on: http://192.168.1.42/deltasql-1.7.0d 。注意要寫好,本人後面沒找到修改的地方。另外,我只填了Administrator Password for deltasql (user admin):admin ; Database name:預設 Database user:預設 Database Password:預設 ; Which database type will be managed with deltasql: mySql ; 其他的選項沒管。

   3.顯示安裝成功後,最後一行有一個warning

<span style="font-size:14px;">Warning:  fopen(conf/config.inc.php): failed to open stream: 許可權不夠 in /opt/lampp/htdocs/deltasql-1.7.0d/install_execution.php on line 152
Can't open file conf/config.inc.php 
You could try to copy example_config.inc.php to config.inc.php and to adapt it then...</span>

官方教程也是要我們複製一份,如下圖2.3 conf複製圖:

                                             

2.3 conf複製圖

    4.現在也就是伺服器端安裝成功了。

2.2 Deltasql客戶端的安裝

    2種方式。

    第一種方式:在Deltasql的安裝包中,有Deltasql的客戶端。路徑如下圖2.4 deltasql客戶端路徑圖:

                                                    

2.4 deltasql客戶端路徑圖

解壓後在bin目錄可以啟動客戶端。本人在實驗的時候遇到困難,有一種方式更加簡單,所以不研究這種。

三.Deltasql的基本使用 

    首先管理員可以建立專案,建立模組,建立開發人員,管理員,產品經理。以及一系列的檢視功能,比如說檢視sql指令碼情況,檢視專案列表,模組列表,分支,專案擁有模組的情況;為專案增加刪除模組等等的功能,在此不一一列舉。

有四種類型的使用者:訪客,開發者,專案經理,管理員。
訪客只能瀏覽,搜尋專案的指令碼檔案。
開發者可以做訪客做的全部事情,也可以提交新的指令碼檔案,也可以對老的指令碼檔案進行編輯。
專案經理可以建立專案和增加模組,也可增加分支和標籤。
管理員也相當於專案經理,可以給deltasql資料庫增加新的使用者,他們也可以管理許可權。

    一般來說管理員首先會建立好專案,模組,開發人員-->開發人員提交sql指令碼-->管理員根據情況判斷是否需要建立分支,增加模組-->開發人員再根據新的分支,模組有選擇的提交sql指令碼。

下面舉一個基本的例子:

1. 管理員建立好專案,模組,開發人員。並且為專案配置好模組(不演示了)。

2. 開發人員登陸,建立好自己的指令碼(deltasql不會幫你生成,自己需要用phpmyadmin把自己的sql指令碼建立好。(sql指令碼建立是全部的表,還是隻是你變更的部分,由專案經理商量決定)),首先更新資料庫的表結構,點選頁面左側的SynchronizionSynchronize,如下圖3.1 指令碼更新圖:

                              

                                                                                        圖3.1 指令碼更新圖

    可以看到上面的更新步驟,首先要點選SychroniztionTable,再本地資料庫中生成一張版本記錄表(每個開發人員的資料庫中都會多出這樣的一張表)。點選後,可以看到如下圖 圖3.2 生成Table圖:

                                                         

3.2 生成Table

TrestProject表示我們的專案,HEAD是我們的主分支,然後點選Get Synchronization Table.得到如下圖的指令碼 圖3.3 生成Tabel1

                                         

3.3 生成Tabel1

    然後我們需要再phpmyadmin中手動執行這個語句,這樣就可以建立這個表。Ps:重複一下,這個表記錄了我們本地的sql指令碼的情況,這樣伺服器就知道我們缺什麼最新版本,下次我門更新的時候伺服器就可以把最新的sql指令碼給我們。

    建立完表之後,我們需要再phpmyadmin中執行:select * from tbsynchronize where versionnr = (select max(versionnr) from tbsynchronize); 這句話可以得到我們目前的sql指令碼是什麼版本,可以得到一個記錄,如下圖 圖3.4 sql指令碼版本圖:

                                          

3.4 sql指令碼版本圖

    那麼現在,我們就可以知道我們的版本是29.

    下一步,我們需要選擇更新什麼樣的專案,或者分支給我們本地。通過FromTo選擇。按最簡單的兩個都是HEAD,也就是隻有一個開發模式,沒有分支。

    最後,就可以點選Generate Synchroniztion Script。生成伺服器傳送過來的更新程式碼,如下圖這個形式,圖3.5 更新程式碼圖

                                        

3.5 更新程式碼圖

    可以看到,30 版本的sql指令碼程式碼為333333是我測試用的,真正的程式碼是你們上傳的sql指令碼程式碼。31版本的是yyyy。。最後一句 INSERT 就是更新你一開始建立的那個儲存你本地版本的表。

    通過這種方式,我們就可以利用伺服器上的最新sql指令碼程式碼來更新到我們的資料庫。

4.更新完之後,我們需要提交自己的新的sql程式碼。點選頁面左側Script底下Submit按鈕提交。比如,開發人員自己增加了一張表,再提交如下圖3.6 提交sql指令碼圖:

                                      

3.6 提交sql指令碼圖

    需要注意的是,Module一欄,填你要把你的指令碼交去哪一個模組。因為伺服器上可能有很多專案,每一個專案有1個或者多個模組,所以需要看清楚。然後就是下面的sql 指令碼程式碼。這個程式碼需要你用phpmyadmin來預先生成(自己手動)。

最後點選提交即可。

以上就是開發人員更新伺服器上的最新資料庫到自己本地 以及 把自己更新了的資料庫上傳到伺服器的一個過程。

四.Deltasql 原理

    原 理感覺並不高深,自己也可以做。Deltasql首先在我們的本地資料庫中多建了一張表,這個表有我們現在資料庫的版本號,然後我們可以從更新圖 圖3.5 更新程式碼圖 中看出,最後有一句Insert語句,這個語句不是我們寫的,也不是我們提交的,這個是Deltasql幫我們加上的,目的就是要更新我們的本地的這個 表。這樣,從 圖3.1 指令碼更新圖 中,可以看出,我們首先會給Deltasql伺服器我們的版本號,然後伺服器判斷這個版本是不是伺服器上的最新版本,不是,那麼就返回別人更新的sql腳 本給你。

    最後,我們之所有可以找出我們之前的sql指令碼,是因為在deltasql的資料庫中,有一個code欄位,儲存了我們的sql資訊,如下圖 圖4.1 儲存sql資訊圖:

                                      

4.1 儲存sql資訊圖

這個就是基本的原理。

五.還待研究的地方

    其實還有分支和模組這兩部分這個文件中是涉及很少的。因為自己也是一個理解,沒有經過具體的操作實踐。以後有待補充。

我沒找到其他有用的文件資料,只有這個英文官網文件。有的歡迎補充。