データベース構造のバージョン管理

画像 この記事はHow Toであり、 Phingdbdeployを使用して、PHPアプリケーションのデータベースバージョン間の移行を簡単に提供するのに役立ちます。



Phingのインストール



この記事の著者は、Phingのベータ版とRCリリースを常に使用していることを認めています。互換性のために記事の資料を使用する場合は、同じことを行ってください。 phingをインストールする最も簡単な方法はPEARを使用することです。 次の3つのコマンドを使用して、任意のシステムでこれを実行できます。



 
 > pearチャンネルの発見pear.phing.info
 > pear config-set preferred_stateベータ版
 > Pearインストールphing / phing


アプリケーション構成例



この例では、次の構造を持つ単純なアプリケーションが考慮されます。



例/
  |-db /←データベース管理用のsqlファイルはここに保存されます
  |  `-デルタ/
  |-deploy /←移行を提供するスクリプトはここに保存されます
  |  `-スクリプト/
  |-ライブラリ/←ここは開発中のアプリケーションです
  `-public /←DOCUMENT ROOTディレクティブはここを示します 








コレクタースクリプト



このセクションでは、データベースの移行を初期化するコレクタースクリプトを開発する方法について説明します。 最初に、単純な構成(ini)ファイルを作成する必要がありますが、これに関するコメントは不要です。 ここに配置します:deploy / build.properties。



 #プロパティファイルにはキー/値のペアが含まれます
 #キー=値
 
 #このディレクトリにはローカルアプリケーションが含まれている必要があります
 build.dir = .. /
 
 #データベース移行の資格情報
 db.host = localhost
 db.user =ユーザー
 db.pass =パスワード
 db.name =例
 
 #プログラムへのパス
 progs.mysql = / usr / bin / mysql


作成する必要がある2番目のファイルは、deploy / build.xmlです。 彼から、Phingは私たちが彼から欲しいものを学びます。 著者はいくつかのコメントを付けて例を提供しましたが、さらに詳細な質問がある場合は、 Phingのドキュメントを参照してください。



<? xml version ="1.0" ? >

< project name ="PurpleMonkey" basedir ="." default ="build" >



<!-- Sets the DSTAMP, TSTAMP and TODAY properties -->

< tstamp />



<!-- Load our configuration -->

< property file ="./build.properties" />



<!-- create our migration task -->

< target name ="migrate" description ="Database Migrations" >



<!-- load the dbdeploy task -->

< taskdef

name ="dbdeploy"

classname ="phing.tasks.ext.dbdeploy.DbDeployTask" />



<!--

these two filenames will contain the generated SQL

to do the deploy and roll it back

-->

< property

name ="build.dbdeploy.deployfile"

value ="deploy/scripts/deploy-${DSTAMP}${TSTAMP}.sql" />

< property

name ="build.dbdeploy.undofile"

value ="deploy/scripts/undo-${DSTAMP}${TSTAMP}.sql" />



<!-- generate the deployment scripts -->

< dbdeploy

url ="mysql:host=${db.host};dbname=${db.name}"

userid ="${db.user}"

password ="${db.pass}"

dir ="${build.dir}/db/deltas"

outputfile ="${build.dir}/${build.dbdeploy.deployfile}"

undooutputfile ="${build.dir}/${build.dbdeploy.undofile}" />



<!--

Execute the SQL

Use mysql command line to avoid trouble with large files

or many statements and PDO

-->

< exec

command ="${progs.mysql} -h${db.host} -u${db.user} -p${db.pass} ${db.name} < ${build.dbdeploy.deployfile}"

dir ="${build.dir}"

checkreturn ="true" />

</ target >

</ project >




* This source code was highlighted with Source Code Highlighter .






原則として、これが実行される必要があるすべてであり、データベース自体を作成するために残ります。



dbdeployを使用する



原則として、まだベースを作成していないため、従来の方法ではなく、移行を使用して初期構造を作成します。 アプリケーションが何をするのかまだわかりませんが、多くの例ではブログの概念を使用しているので、同じものから始めてみませんか... 3つのフィールドを含む1つの「投稿」テーブルから始めましょう。

野原 種類 コメント
タイトル VARCHAR(255) 投稿のタイトル
time_created 日時 投稿を作成した時間
内容 MEDIUMTEXT 投稿の内容


Dbdeployの作業は、番号付き差分ファイルの作成に基づいています。各ファイルには、変更を適用してロールバックするSQLが含まれています。ベースファイルは次のようになります。



--//

-- Run SQL to do the changes

--//@UNDO

-- RUN SQL to undo the changes

--//




* This source code was highlighted with Source Code Highlighter .






初期構造を作成するので、db / deltas / 1-create_initial_schema.sqlにダンプを入れます



--//



CREATE TABLE `post` (

`title` VARCHAR (255),

`time_created` DATETIME,

`content` MEDIUMTEXT

);



--//@UNDO



DROP TABLE `post`;



--//




* This source code was highlighted with Source Code Highlighter .






移行



私たちは最初の移行から一歩離れています。 データベースの現在のバージョンを追跡するために、dbdeployはサービス情報を保存するためのデータベース内のテーブルを必要とします。 これは、mysqlクライアントと直接対話する必要がある唯一の時間です。



 
 > mysql -hlocalhost -uroot -ppasswordの例
 > CREATE TABLE changelog(
   change_number BIGINT NOT NULL、
   delta_set VARCHAR(10)NOT NULL、
   start_dt TIMESTAMP NOT NULL、
   complete_dt TIMESTAMP NULL、
   apply_by VARCHAR(100)NOT NULL、
  説明VARCHAR(500)NOT NULL
 );
 > ALTER TABLE changelog ADD CONSTRAINT Pkchangelog PRIMARY KEY(change_number、delta_set);


これで、最初の移行を開始し、アプリケーションの初期構造を作成する準備ができました。



 
 > cd deploy
 > phing migrate


データベースには投稿のあるテーブルがありますが、著者に関する情報を追加するのはどうですか? 別のテーブルと外部キーを作成する必要があります。これを行うには、dbdeploy用に別のファイルを作成し、db / deltas / 2-create_author_and_link_to_post.sqlと呼びます。



--//



CREATE TABLE `author` (

`author_id` INT (10) unsigned auto_increment,

`name` VARCHAR (255),

PRIMARY KEY (`author_id`)

);



ALTER TABLE `post` ADD `author_id` INT (10) unsigned NULL ;



--//@UNDO



ALTER TABLE `post` DROP `author_id`;



DROP TABLE `author`;



--//




* This source code was highlighted with Source Code Highlighter .






移行を再度実行します。



 
 shell> cd deploy
 shell> phing migrate


おわりに



以上で、データベースのバージョン間の移行を簡単かつ簡単に提供する方法がわかりました。 よく見るためにコードを貼り付けたくない場合は、 アプリケーションアーカイブをダウンロードできます。



データベースのバージョン管理に関しては、特にアプリケーションコードを分岐してマージする場合、多くのポイントがあります。そのいくつかは、dbdeployドキュメントで詳細に説明されています。



このガイドは不完全です。追加するものがあると思われる場合は、下にコメントを残してください。



プログイット

PS

Phingの概要については、Phingの紹介はGNUの記事ではありません



All Articles