Sqale 上で動かしている Rails アプリ,
本番環境の DB の内容を取ってきてローカルでもテストしたいなーと
思ったものの意外とめんどかったのでメモ.
本番環境は MySQL で動かしてるけど,ローカル環境はデフォルトのまま SQLite という状況.
ダンプファイルを SQLite に変換するのはめんどくさそうだったので,
この際ローカル環境も SQLite から MySQL に変更することにしました.
ローカル環境
Ubuntu 14.04
Rails 4.1.9
SQLite3 (1.3.8) → MySQL (2.0.14)
DB(MySQL) のダンプを取る
コンテナにSSHでログイン
$ ssh -p 2222 sqale@gateway.sqale.jp
mysqldumpでダンプ.
sqale@appname:$ mysqldump -u [ユーザー名] -h [ホスト名] -p [データベース名] > mysql.dump
ユーザ名とかホスト名とかデータベース名はSqaleダッシュボード内のデータベース接続情報にある.たとえばこんな感じ.
sqale@appname:$ mysqldump -u sqale_aba67f5679 -h mysql002.sqale.jp -p sqale_aba67f5679 > mysql.dump
うまくいってれば mysql.dump という名前で吐かれているはずなので,一応$ ls -l
とかで吐けてるかどうか確認しましょう.
s3cmd を使って Amazon S3 へバックアップ
Amazon Web Service のアカウントの用意
しれっと書いてますが Amazon Web Service のアカウントが要ります.丁度自分は持ってたのですが,持ってない場合はアカウントを作る必要があります.アカウントの作り方はググったら色々わかりやすい解説があるので割愛します.携帯電話使って認証とかあるので結構めんどいですが,他に方法もなさそうなのでなんとか頑張ってください.
AWS アカウント作成の流れ
http://aws.amazon.com/jp/register-flow/
アクセスキーとシークレットキーの入手
http://aws.amazon.com/jp/ の上部ナビゲーションバーのアカウント→認証情報をクリックしてログインします.
ログインすると上のダイアログが開くかもしれませんがとりあえず無視してできました.
セキュリティ認証情報のアクセスキーから新しいアクセスキーを作成をクリック,アクセスキーとシークレットキーが表示されるので控えておくかダウンロードボタンからダウンロードします.
s3cmd の設定
ssh でコンテナにログインしている状態で s3cmd の設定をします.
sqale@appname:$ s3cmd --configure
上記のコマンドを入力すると色々聞いてくるので答えてやります.
Access key and Secret key are your identifiers for Amazon S3
Access Key:
Secret Key:
アクセスキーとシークレットキーを入力してください.
Encryption password:
Path to GPG program [/usr/bin/gpg]:
何も入れずにEnterで大丈夫です.
Use HTTPS protocol [No]: yes
Test access with supplied credentials? [Y/n] Y
Save settings? [y/N] y
ここらへんもyesで. Configuration saved to '/home/sqale/.s3cfg'
が表示されれば保存できてると思います.
s3cmd を使ってアップロード
バケット名はなんか適当な他とかぶらなさそうな名前を適当に決めてください.
たとえばsqale-myappname-backupとかにするならこんな感じ:
sqale@appname:$ s3cmd mb s3://sqale-myappname-backup
sqale@appname:$ s3cmd put mysql.dump s3://sqale-myappname-backup/mysql.dump
done とか出れば転送終了.何も出てなかったらパスとか確認してください.
一応 git で管理してるディレクトリに勢い余って入れちゃってないか注意してください.
アップロードしたファイルをダウンロード
公式サポート見ると「S3の管理画面よりダウンロードURLを発行し,お手元のPC等にダウンロードしてください」って書いてあるので見つかれば管理画面からダウンロードしてください.
自分の場合はなんか見つからなかったのでローカル環境に s3cmd 入れてダウンロードしました.(Macならbrew)
(Mac で設定するときは HTTPS protocol は No でやりました.)
$ sudo apt-get install s3cmd
Sqale のサーバ上で設定したときと全く同じように設定します.
$ s3cmd --configure
設定できたら s3cmd get
で取れるようになります.
$ s3cmd get s3://sqale-myappname-backup/mysql.dump
これでやっとバックアップが手元に取れました.
ローカルの MySQL サーバにリストアする
ローカル環境に MySQL が入ってない場合はapt-get(Macならbrew)とかでインストールしてください.
MySQLのコンソールを開いて
$ mysql -u root -p
データベースを作成しておきます.databasenameのところは好きな名前でいいです.
mysql> create database databasename;
mysql> show databases;
そしたら MySQL のコンソールを抜けて,ダウンロードしたダンプを読み込ませます.
$ mysql -u root -p databasename < mysql.dump
ローカル環境を SQLite から MySQL に切り替える
config/database.yml
の development をこんな感じに書き換えます.
development:
adapter: mysql2
encoding: utf8
pool: 5
timeout: 5000
database: databasename
username: root
password: hogehoge
host: localhost
root にしてしまいましたが,ユーザ名とパスワードは適当なユーザ作って指定したほうがいいかもしれません.
あとは Gemfile の development の設定も書き換えてやって:
group :development do
gem 'mysql2'
# gem 'sqlite3'
end
インストールして再起動すればおしまいです.
(gem が一発でうまく入らなかったんですがググったら解決しました http://stackoverflow.com/questions/4115126/ruby-gem-mysql2-install-failing)
$ bundle install
$ rails s
お疲れ様でした.
参考
アプリケーションの復元方法(バックアップとリストア) - Sqale公式のサポートページ
https://sqale.jp/support/manual/db-backup-restore#mysql-wget
Sqaleからherokuに乗り換えるときにやったこと - kamiya54::Memo
http://www.kamiya54.info/post/104990687746/sqale-heroku