PHP/MySQLのアプリケーションがあります。アプリケーションの背後にあるデータベースをアップグレードする自動化された方法を探しています。アップグレードした後は、古いバージョンとの互換性は必要ありません。
私はこれに関する jeff's と K。Scott Allen's の記事を読みました。
PHP/MySQLアプリケーションにこれを実装する方法がまだわかりません。
このための簡単で良いプロセスはありますか?
私が使用する「スキーマ」オブジェクトがありますが、クラスがなくても同じことができます。
あなたがしたいのは 'db_schema_versions
'テーブルを作成することです:
CREATE TABLE db_schema_versions (
`table` varchar(255) NOT NULL PRIMARY KEY,
`version` INT NOT NULL
)
データベースがバージョン番号を追跡できるようになると、SQLアップグレードを自動的に実行できます。
スキーマをアップグレードするときは、スキーマテーブルをロックする必要があります。このようにして、スキーマをアップグレードしようとして同時に2つのリクエストが発生することはありません。
したがって、アップグレード元のバージョンを追跡します。大きなスイッチを作成します。次のようになります。
class SNTrack_Db_Schema extends MW_Db_Schema_Abstract {
protected $table = "sntrack_db_schema";
protected $version = 5;
protected function upgrade($fromVersion) {
// don't break
switch($fromVersion) {
case 0:
$this->db->query('CREATE TABLE sntrack_inbound_shipment (
`id` INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
`from` VARCHAR(255) NOT NULL,
`date` DATE NOT NULL,
`invoice` VARCHAR(255) NOT NULL,
`notes` TEXT
)');
$this->setVersion(1);
case 1:
$this->db->query('ALTER TABLE sntrack_details ADD `shipment_id` INT');
$this->db->query('ALTER TABLE sntrack_product ADD `inventory` INT NOT NULL DEFAULT 0');
$this->db->query('CREATE TABLE sntrack_inventory_shipment (
`shipment_id` INT NOT NULL,
`product_id` INT NOT NULL,
`qty` INT NOT NULL,
PRIMARY KEY (`shipment_id`, `product_id`)
)');
$this->setVersion(2);
...etc
Gnarfの提案と同様に、私は次のように実行します。
次に、次のように機能する簡単なスクリプトを作成する必要があります。
私はそれが理にかなっていることを願っています
スキーマの移行にこのツールを使用してみてください: https://github.com/idler/MMP/
PHPでMySQL用の小さな移行スクリプトを作成しました。これは、初期段階のプロジェクトや、より複雑な移行スクリプトを(まだ)必要としないプロジェクトに適しています。 https://github.com/kennberg/php-mysql-migrate
私は同じ目標を達成しました。大きなデータベース(一部のテーブルでは100万行以上)を移行することです。 https://phinx.org を使用することを検討しています。これは、スキーマの移行を処理するのに適しているようです。さらに、安全のためのロールバックオプションが付属しています。
MySQLベンチソフトウェア(mysqlのWebサイトにあります)がそれを行います。ただし、クリックの多い手順を繰り返す必要があります。
使用migratedb https://github.com/malukenho/MigrateDB from @malukenho
このライブラリを試すことができます: mysql-version-control 。
スキーマ、コアデータ、テストデータを区別するのでこれが好きです。しかし、それでも本当に使いやすい方法でそれを行います。
できません。あなたも
ソース環境で実行されたすべてのSQLを使用して更新ファイルを書き込み、SVNのように実行します(上記)。実行にはphpスクリプトが必要で、SQL書き込みには手作業が必要です
両方の環境を事後分析し、どの更新を移行する必要があるかをユーザーに提案します。基本的に最初のものと同じですが、移行のための大きなステップが1つあり、小さなチャンクがたくさんない点が異なります。 SQLyogは、スキーマとデータの両方の違いを分析できます。
無料のAPIを使用することもできます SqlQuerySync
または、CREATE/ALTER/DELETEクエリを管理するデータベーステーブルを自分で作成します。
これを実行する1つの方法は、mysqldumpを使用してデータベースを大きなSQLファイルにダンプすることです。そのファイルを取得して、新しいインストール内で入手するだけです。