Ruby
Rails
MySQL
sqale
mysqldump

Sqale 上の Rails アプリの DB(MySQL) のダンプを取ってローカル環境で動かす

More than 3 years have passed since last update.

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/ の上部ナビゲーションバーのアカウント→認証情報をクリックしてログインします.

tojiteii.PNG

ログインすると上のダイアログが開くかもしれませんがとりあえず無視してできました.

sekyurithi.PNG

セキュリティ認証情報のアクセスキーから新しいアクセスキーを作成をクリック,アクセスキーとシークレットキーが表示されるので控えておくかダウンロードボタンからダウンロードします.


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 をこんな感じに書き換えます.


config/database.yml

development:

adapter: mysql2
encoding: utf8
pool: 5
timeout: 5000
database: databasename
username: root
password: hogehoge
host: localhost

root にしてしまいましたが,ユーザ名とパスワードは適当なユーザ作って指定したほうがいいかもしれません.

あとは Gemfile の development の設定も書き換えてやって:


Gemfile

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