VPSのMongoDBを使っていたが、MongoDB Atlasにデータを移植した

 VPSのOSの管理が面倒なので、PaaSやらなんやらを使ってVPSを避ける手段を模索していた。ただそのなかでコスト面の比較からMongoDBだけはVPSを使ってやっていた。さいきんMongoDB Atlas(MongoDBのDB as a Service)の価格表をふと見たら、いつの間にか月10ドル程度で済むプランが追加されていた。なので使用の検討を始めた。VPSのOSとかセキュリティのためのアップデートから解放されたいので。
 サーバは三大メジャーパブリッククラウドの各リージョンから選べる。ありがたい。ちょっとお高いプランを選べばバックアップも自動化オプションが出てくるが、それはコストがちょっと高かったので、サーバレスで組むことにでもする。
 今回は既存データベースのデータを、ダンプ、リストアでAtlas上に移す。

 まず登録して、フォームをシコシコと埋めていく。フリープランもあるので、使い始めるのにクレジットカードが必須ということはない。フォームを埋めて登録し、フリープランでMongoDBクラスタを作ると、クラウドに実際それを作っている時間を待ったのち、試用できるようになる。



 データベース接続を行うため、設定していく。セキュリティメニュー内にIPホワイトリストがあるが、ぼくは固定IPを持っていないので全部受け入れに。
 あとはユーザとその権限。ここをちゃんとやっておかないと、セキュリティのためにデータベースが使えないのは当然のこと。まあ個人用途なので、一つのユーザに必要な権限をすべて与えた。





 ユーザを作成したら、とりあえずそれでつないでみる。クラスタのOverviewに”CONNECT”というボタンがあるので押してみると、接続方法の選択になる。MongoShellを選んで、自分の環境を選択すると接続文字列が含まれたコマンドが表示される。MongoShellが使える環境でこれを実行する。接続が確立されるはず。メッセージの中に下記のものがあるので、あとでデータを移植するときの接続用に [クラスタのアドレスを表す文字列]を控えておく。
I NETWORK  [thread1] Starting new replica set monitor for [クラスタのアドレスを表す文字列]


 接続したらいじりたいようにいじってみる。

 あとはデータの移植。まず移植したいデータベースのダンプを取る。
mongodump --host foo -u bar -p boo

 ダンプがdumpというディレクトリにまとまっているはず。圧縮されてたら解凍する。ディレクトリdumpで中身を見ると、データベースごとにディレクトリ分けされてデータがまとまっているはず。今回リストアするとき、個人的にデータベースadminは引き継がなくてよかったのでディレクトリを消しておいた。
 リストアを実行する。ディレクトリdumpで下記のコマンド。
mongorestore --ssl --host [さっき控えたクラスタのアドレスを表す文字列] --authenticationDatabase admin --dir=. -u foo --password bar

 これでリストアが実行されるので、終わったらまた接続して中を確認してみるなど。
comment: 0