はじめに
僕の所属している会社ではデータベースにAWS
のRDS
を使用しています。
事業拡大の一環として似たようなサービスをたくさん展開することになり、似たような構造や内容のEC2
やRDS
をそのサービスの個数分だけ立てました。
その際に取り組んだことをまとめていきたいと思います。
mysql
を使用しています
RDSの統合
RDS
をサービスの個数分立てたものの、1つのRDS
を立ててその中にいくつもdatabase
を作成して運用するほうがコスパが良いことを後から聞きました。
アクセスもそんなに多くない状況だったのでもともとt2micro
のRDS
がいっぱい立っているというかんじだったので、ほとんどがt2micro
でも持て余してしまうような状況であったので統合したほうが全てを足したものでそれにあったインスタンスタイプを選べるので必要以上のインスタンスタイプになるのを防げて料金も安く収めやすいし、インスタンスタイプが強いものを1つ立てるので処理能力においても統合したほうがパフォーマンスもよくなります。
databaseの作成
まずはAWSのコンソールで普段と同じようにRDS
を作成しました。インスタンスタイプは統合したときの規模に合わせて決めます。後からでも変更できるので余裕持った上で途中で調整する形でやりました。
普段DB
の操作はSequelPro
で行っているのでSequelPro
の画面上で説明します。
SequelPro
で先程作ったRDS
に接続します。
次にそれぞれのサービスのdatabase
を作成していきます。
ここでセキュリティ面を考えた際に、ユーザーをサービスごとに作成し、そのユーザーはそのサービスのdatabase
にしかアクセス出来ないような設定にしました。
CREATE DATABASE sampledb DEFAULT CHARACTER SET utf8; //databaseの作成
CREATE USER sample@"%" IDENTIFIED BY "password"; //userの作成
GRANT all ON sampledb.* TO sample@"%" IDENTIFIED BY "password"; //userに対して権限を設定
SHOW GRANTS for sample@"%"; //userの権限を確認
これらをクエリで実行します。
するとこのようなかんじで出力されるかと思います。
設定できたら、確認として作成したユーザーで作成したdatabase
にアクセスしてみましょう。
database
の選択が1つしかできなくなっていれば正しく設定できています。
database のコピー
次に既存のdatabase
から新しいdatabase
に中身をコピーしていきます。これは成功法かはわかりませんが、SequelPro
で簡単に行うことができます。
既存のdatabase
を選択した状態で「ファイル」→「エクスポート」でエクスポートすることができます。.sqlファイル
をエクスポートします
次に新しいdatabase
に接続して「ファイル」→「インポート」で先程作成した.sqlファイル
をインポートすることでコピーが完了です。
もちろんですがこの作業の間にdatabase
の値が書き換わったとしてもdatabase
をエクスポートした段階のものでしかコピーできないのでアクセスが無い時間帯に行うなど工夫が必要です。
dbconfigの書き換え
database
の作成、コピーが完了したので、そのDB
を使用しているサービスであたらしいDB
に接続するように設定を書き換えます。
古いdatabaseの削除
古いdatabase
は必要なくなるので削除します。
このときモニタリングの部分でアクセスがなくなっているかをパット見ですが確認することができます。
あと削除する際にスナップショットを作成することが出来るので万が一のためにスナップショットをとっておくといいと思います。