サイト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データの移行はこれで終わり。
今の状態で動かすと、データの不整合があるっぽくて、ログに大量のエラーが出力される。
それを消す為に次は画面でいじって直す。