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

画像 この記事は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の記事ではありません

Source: https://habr.com/ru/post/J63585/


All Articles