サイトDBデータ移行
2023/12 の作業
旧サーバのDBデータを新サーバへ移行する。
(旧サーバ)旧サーバのデータ吸い上げ
$ sudo -i -u posgres $ pg_dump --verbose -Fc -f olddb.dump olddb
サイト作成
$ sudo -i -u workusr $ source workusr_venv/bin/activate $ coderedcms start worksite --sitename "WorkSite" Creating a Wagtail CRX project called worksite for WorkSite Success! worksite has been created Next steps: 1. cd worksite/ 2. python manage.py migrate 3. python manage.py createsuperuser 4. python manage.py runserver 5. Go to http://localhost:8000/admin/ and start editing!
新DBにリストア
旧サーバから吸い上げたデータを、Postgresql15 インストールとDB作成 で作成したDBにリストア。
$ sudo -i -u postgres $ pg_restore --verbose -d workdb -Fc old.dump
無理やりパッチ
・ migration しようとしたら、website の依存関係が変わっていてうまくいかなかった。ので、website の migration はやり直す。
・ 今回は、website_xxx テーブルのうち、website_webpage のデータだけが残っていたので、migration 後そのデータだけ戻す。
・ website_webpage.coderedpage_ptr_id と coderedcms_coderedpage.page_ptr_id がリンクしていたけど、migration 後 oderedcms_coderedpage の page_ptr_id が変わるので、確認しておく。
まず消す
# 確認 workdb=> select coderedpage_ptr_id from website_webpage ; coderedpage_ptr_id -------------------- 3 39 40 (3 rows) workdb=> select page_ptr_id from coderedcms_coderedpage; page_ptr_id ------------- 3 39 40 (3 rows) # website のマイグレーションを消す workdb=> delete from django_migrations where app = 'website'; # website のテーブルを消す workdb=> drop table website_articleindexpage ; workdb=> drop table website_articlepage ; workdb=> drop table website_formconfirmemail ; workdb=> drop table website_formpagefield ; workdb=> drop table website_formpage ; workdb=> drop table website_webpage ;
settings.prod.py とか settings のDB接続情報を環境に合わせて書き換え
マイグレーション
$ sudo -i -u workusr $ source workusr_venv/bin/activate $ cd worksite/ $ python manage.py migrate --settings worksite.settings.prod
マイグレーション後のデータ確認
workdb=> select * from website_webpage ; coderedpage_ptr_id | body --------------------+------ 56 | [] workdb=> select page_ptr_id from coderedcms_coderedpage; page_ptr_id ------------- 39 40 56 (3 rows)
website_webpage データ戻し
coderedcms_coderedpage.page_ptr_id の 3 が 56 になっているので、website_webpage.coderedpage_ptr_id を 56に編集して入れる。
# website_webpage のデータを消す workdb=> truncate table website_webpage ; # website_webpage の SQL を抽出 $ sudo -i -u postgres $ pg_restore -f website_webpage_patch.sql -t website_webpage old.dump # website_webpage_patch.sql を編集 # データを入れる $ psql workdb < website_webpage_patch.sql
DBデータの移行はこれで終わり。
今の状態で動かすと、データの不整合があるっぽくて、ログに大量のエラーが出力される。
それを消す為に次は画面でいじって直す。