production.log

株式会社リブセンスでエンジニアをやっている星直史のブログです。

本番DBのデータをローカルのMysqlにdumpする方法

動作確認するときは、テスト環境用のDBを使いたい(本番のデータに影響を与えたくない)

んだけど、本番/テスト用と分けられないほどお金に困ってるので、

ローカル環境に本番環境のデータを移して動作確認をすることにした。今日はその方法をば。

※AWSは従量課金だから起動している時間ごとにお金かかっちゃうけどローカルならEC2の起動時間でまかなえるからちょっと節約。

 

1.ローカルにmysqlをインストール

  $> sudo yum remove mysql51 mysql51-common mysql51-libs mysql51-server      
  $> sudo yum install mysql55 mysql55-common mysql55-libs mysql55-server      

 ※mysqlがインストールされていない場合はremoveしなくても大丈夫

 

2.my.conf書き換え

innodb_buffer_pool_size=32M    
datadir=/var/lib/mysql    
socket=/var/lib/mysql/mysql.sock    
user=mysql    
symbolic-links=0    
 
character-set-server=utf8    
default-time-zone='+9:00'    
 
skip-character-set-client-handshake    
collation-server=utf8_general_ci    
init-connect = SET NAMES utf8    
 
[client]    
default-character-set=utf8    
 
[mysqld_safe]    
log-error=/var/log/mysqld.log    
pid-file=/var/run/mysqld/mysqld.pid    
 
[mysql]    
default-character-set=utf8

 

3.mysql起動

$> sudo mysqld_safe &

 

4.本番DBからdumpデータを取得

$> mysqldump -h mydb.domain -uuser_name -ppass -t db_name > dump.sql

 

5.dumpしたデータをローカルDBにインポート

$> mysql -ulocal_user_name -plocal_pass local_db_name < dump.sql

 

※もしインポートするデータの容量が大きすぎると接続時間タイムアウトエラーが発生することがある。その場合はmy.confのmax_allowed_packetを最大(16Mに設定する)

 

6. confing/database.yamlのdevelopmentをローカルDBに向ける

development:
  adapter: mysql2
  encoding: utf8
  reconnect: false
  database: local_dbname
  pool: 5
  username: local_user_name
  password: local_pass
  host: localhost
  socket: /var/lib/mysql/mysql/mysql.sock

これでばっちり。

 

【参考】

http://dev.mysql.com/doc/refman/5.1/ja/mysqldump.html