概要
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 というようなことはなさそうだけど、なんでなんだろ?
教えてもらった。
mark_migrated ありますよ〜。あと、Migrations プラグインのバージョンは 2 系が最新ですね (Cake のバージョンと同期してない)https://t.co/WZTjirVuaR https://t.co/Z7U7Th14Jp
— okinaka (@okinaka3) 2019年12月17日
下記を参照すればよさそう。
https://book.cakephp.org/migrations/2/en/index.html