バックアップを作成
VPSにSSH接続し仮想環境を有効化、manage.pyがあるディレクトリに移動する。
$ cd dir_name
$ source env/bin/activate
$ cd project_name
dumpdata実行
アプリケーション名を指定しない場合、インストールされているすべてのアプリケーションがダンプされる。以下のコマンドはjson
で作成しているが、xml、jsonl、yamlでの作成も可能。
USERNAME@xxx.xxx.xxx.xxx:~$ python manage.py dumpdata > dump_last.json
しかし、このまま実行するとエラーが発生することが良くある。
私の場合permission
やcontent_typees
を除外すると解決する事が多い。
USERNAME@xxx.xxx.xxx.xxx:~$ python manage.py dumpdata --exclude auth.permission --exclude contenttypes > dump_last.json
この辺はデータベースの状態によって変わると思うので、エラーの内容をみて対応する。
作成先
dumpdataで作成したファイルは、カレントディレクトリに作成されるので、ls
を実行するとdump_last.json
が表示されるはずです。
USERNAME@xxx.xxx.xxx.xxx:~/dir_name/project_name $ ls
dump_last.json manage.py その他色々
ローカルにダウンロード
SSH接続を終了しターミナルで実行する。
この時、VPSで操作する必要があるのでは?と思うかもしれないが、「ローカルにVPSにあるファイルをダウンロードする」のでをローカルで実行する。
-i オプションを使用することで、scp
コマンドがリモートホストに接続する際に、指定したpemファイル
を使用して認証を行います。
$ scp -i /Users/name/.ssh/hoge.pem name@xxx.xxx.xxx.xxx:~/dir_name/project_name/dump_last.json ~/Desktop/
SCP
+ -i
+ pemファイルのパス
+ ユーザー名とIP:dumpファイルのパス
+ ローカルの保存先のパス
という形です。
ローカルからアップロード
ダウンロードコマンドのパスを逆にするだけ。
$ scp -i /Users/name/.ssh/hoge.pem ~/Desktop/ name@xxx.xxx.xxx.xxx:~/dir_name/project_name/dump_last.json
インポート
当たり前ですが、dumpファイルに対応しているデータベースがないとインポートできないので、プロジェクトやアプリを作り直した場合は、migrateしてから実行する。
$ python manage.py loaddata dump_last.json