CakePHP3 で Migration を途中からやる #cakephp

概要

CakePHP3 で DB の構成管理を行っているが、何らかの事情でプレーンな環境で migrate できない場合の現実的な回避策としてのメモ。

プロダクションでは利用されているが、十分に開発環境で運用されていない場合などを想定。

現時点での dump を取得する

mysqldump で現在の DB を持ってくる。

--no-data で、定義のみ取得するようにしている。

mysqldump ${DATABASE} -p \
  --result-file=dump.sql \
  --column-statistics=0 \
  --no-data \
  --user=${DB_USER} \
  --host=${DB_HOST} \
  --port=${DB_PORT}

dump を元に新しい DB を構築する

mysql -h ${DB_HOST} -u ${DB_USER} -p ${DATABASE} < dump.sql

mark_migrated する。

mark_migrated コマンドは、指定したバージョンまで Migrate したことにする ことができる。

なので、 migrate 現時点の最新までは実行済にしてしまう。

bin/cake migrations mark_migrated --target=XXXXX

--target で特定のバージョンを指定できる

ちなみに Migration を全く利用していなくて途中から始める場合には migration_snapshot を使うとよさそう。

移行は migrate する

これで migration は騙せるようになったので、移行のバージョンについては通常通りに運用していけばよい。

bin/cake migrations migrate

補足

Cake2 の document では mark_migrated コマンドについて記載があるのに、 Cake3 にはない。

phinx プラグインの doc にもない。

bin/cake migrations help mark_migrated すれば出てくるので、特に deprecated というようなことはなさそうだけど、なんでなんだろ?

教えてもらった。

下記を参照すればよさそう。

https://book.cakephp.org/migrations/2/en/index.html

参考