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

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でログイン

```zsh
$ ssh -p 2222 sqale@gateway.sqale.jp
```

mysqldumpでダンプ．

```zsh
sqale@appname:$ mysqldump -u [ユーザー名] -h [ホスト名] -p [データベース名] > mysql.dump
```

ユーザ名とかホスト名とかデータベース名はSqaleダッシュボード内のデータベース接続情報にある．たとえばこんな感じ．

```zsh
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](https://qiita-image-store.s3.amazonaws.com/0/49010/ca9405ec-5944-ca05-9c47-dbe1cec95e26.png)

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

![sekyurithi.PNG](https://qiita-image-store.s3.amazonaws.com/0/49010/d7d1f4bd-a8e9-7aa0-1e8d-563395b37bca.png)

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

### s3cmd の設定

ssh でコンテナにログインしている状態で s3cmd の設定をします．

```zsh
sqale@appname:$ s3cmd --configure
```

上記のコマンドを入力すると色々聞いてくるので答えてやります．

```zsh
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で大丈夫です．

```zsh
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とかにするならこんな感じ：

```zsh
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 でやりました．)

```zsh
$ sudo apt-get install s3cmd
```

Sqale のサーバ上で設定したときと全く同じように設定します．

```zsh
$ s3cmd --configure
```

設定できたら `s3cmd get` で取れるようになります．

```zsh
$ s3cmd get s3://sqale-myappname-backup/mysql.dump
```

これでやっとバックアップが手元に取れました．

## ローカルの MySQL サーバにリストアする

ローカル環境に MySQL が入ってない場合はapt-get(Macならbrew)とかでインストールしてください．
MySQLのコンソールを開いて

```zsh
$ mysql -u root -p
```

データベースを作成しておきます．databasenameのところは好きな名前でいいです．

```mysql
mysql> create database databasename;
mysql> show databases;
```

そしたら MySQL のコンソールを抜けて，ダウンロードしたダンプを読み込ませます．

```
$ mysql -u root -p databasename < mysql.dump
```

## ローカル環境を SQLite から MySQL に切り替える

`config/database.yml` の development をこんな感じに書き換えます．

```yaml:config/database.yml
development:
  adapter: mysql2
  encoding: utf8
  pool: 5
  timeout: 5000
  database: databasename 
  username: root
  password: hogehoge
  host: localhost
```

root にしてしまいましたが，ユーザ名とパスワードは適当なユーザ作って指定したほうがいいかもしれません．
あとは　Gemfile　の development の設定も書き換えてやって：

```ruby:Gemfile
group :development do                                                                                                                                          
   gem 'mysql2'
   # gem 'sqlite3'
end
```

インストールして再起動すればおしまいです．
(gem が一発でうまく入らなかったんですがググったら解決しました http://stackoverflow.com/questions/4115126/ruby-gem-mysql2-install-failing)

```zsh
$ 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