構成
GKEのpodのなかにdjangoとCloudSQL(MySQL)のコンテナがある。
このメモを見る前に
やろうとしことはそもそもこの手順で簡単にできたかもしれない 😢😢😢
exporting
https://cloud.google.com/sql/docs/import-export/exporting?hl=ja
importing
https://cloud.google.com/sql/docs/import-export/importing?hl=ja
やろうとしたこと
- CloudSQLからdumpをexportする
- DBを空にして色々作業する
- 1のデータを戻す
1.Cloud SQLのdumpをexportする
dumpを取得するときは mysqldump
で普通にできた。
$ /usr/local/bin/mysqldump --result-file=/path/to/dump/dump.sql syncable --user=user --host=host --port=port -p --column-statistics=0
2.DBを空にして色々作業する
対象のpodのidを取得後flushして消す
$ kubectl get pods
$ kubectl exec -it hoge python manage.py flush
3.データを戻す
このコマンドは、権限云々で弾かれた。
$ /usr/local/bin/mysql --database=database --user=user --host=host --port=port < /path/to/dump/dump.sql -p
参照したURLを失ってしまったが、権限をつけようともCloud SQLはmysqlコマンドでのimportができないようなことが書いてあったような気がする(*要出典...)
結局どのようにimportしたのか
- ローカルのMySQLにimportしてからdjangoで
dump.json
を生成する - GKEのdjangoのコンテナに
dump.json
をコピーする - GKEのdjangoのコンテナで
dump.json
をロードする
1.ローカルのMySQLにimportしてからdjangoで dump.json
を生成する
mysqlコマンドでimportしたのち、
$ python manage.py dumpdata > dump.json
2.GKEのdjangoのコンテナに dump.json
をコピーする
$ /usr/bin/scp -P 6000 -i /Users/gotch/.ssh/google_compute_engine -o StrictHostKeyChecking=no /path/to/file/dump.json gcpuser@xxx.xxx.xxx.xxx:~/
kubectl
はいつもCloud Shellで 実行しているので、まずCloud Shellに dump.json
をscpした。(GCPのCloud Shellにscpできなかったメモ)
$ kubectl cp ./dump.json hoge:/app
3. GKEのdjangoのコンテナで dump.json
をロードする
データ量が多いとすごく時間がかかる。
$ kubectl exec -it hoge sh
# python manage.py loaddata dump.json