로컬 데이터베이스를 AWS EC2 인스턴스로 가져오기(Capistrano를 통한 자동 배포)

로컬 데이터베이스를 AWS로 가져오고 싶습니다!



로컬로 만든 앱을 AWS EC2 인스턴스에 배포합니다. 그 때, 로컬로 사용하고 있던 데이타베이스와 배치시의 데이타베이스의 내용을 동일하게 하고 싶다. 즉, ○○_development의 내용을 ○○_production에 반영하고 싶다.

아, 그건 그렇고, 앱은 Ruby on Rails를 사용하고 배포는 gem Capistrano에서 자동 배포합니다.

EC2 인스턴스에 MySQL 설치



MySQL 설치 및 시작



다음 명령으로 EC2 인스턴스에 MySQL을 설치합니다. Amazon Linux를 이용하는 경우 yum이라는 명령으로 MySQL을 설치할 수 있다.
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo yum install mysql56-server mysql56-devel mysql56

이제 MySQL 버전 5.6이 설치됩니다.

MySQL을 시작하기 위해 service 명령을 두드린다. 이것은 Amazon Linux나 CentOS에 포함되어 있는 것으로, 설치한 소프트웨어의 기동을 일괄해 실시할 수 있는 툴.
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo service mysqld start

mysql 보다는 mysqld 인 것에 주의. 「d」는 Linux의 용어로 「서버」를 의미하는 「데몬(daemon)」의 머리글자.
시작 확인을 위해 다음 명령.
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo service mysqld status
mysqld (pid  15692) is running...

running이라고 표시되면, MySQL의 기동은 성공하고 있다.

비밀번호 설정



yum 로 인스톨 한 MySQL 에는 , 디폴트로 root 라고 하는 유저로 액세스 할 수 있게 되어 있지만 , 패스워드가 설정되어 있지 않다.

다음 명령으로 비밀번호 설정
[ec2-user@ip-xxx-xx-xx-xxx ~]$ sudo /usr/libexec/mysql56/mysqladmin -u root password '<設定したいパスワード>'

MySQL에 대한 연결 확인



방금 입력한 패스워드를 사용할 수 있는지, 이하의 커멘드로 확인.
[ec2-user@ip-xxx-xx-xx-xxx ~]$ mysql -u root -p
Enter password: 와 비밀번호를 입력하라는 메시지가 표시되므로 방금 등록한 비밀번호를 입력합니다. 아래와 같이 표시되면 MySQL 설정은 종료.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.33 MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

로컬 데이터베이스를 AWS EC2 인스턴스로 가져오기



로컬 데이터베이스를 CSV 형식으로 내보내기



먼저 로컬 데이터베이스를 CSV 형식으로 내보냅니다. 테이블명 .csv의 형식으로 데스크탑에 출력된다.

참고
MySQL 데이터 가져오기 및 내보내기
MySQL 데이터베이스를 완전히 이사. (내보내기 / 가져 오기)

csv 파일을 db 폴더에 넣기



방금 바탕 화면에 출력된 csv 파일을 (앱 이름)/db 안에 넣는다. orders, users, products의 테이블 데이터를 내보낸다면, 이런 상태가 된다.


seeds.rb 편집



db 폴더 아래에 있는 seeds.rb 파일(단지 위의 이미지에서 선택된 녀석)을 다음과 같이 써 바꿉니다.

seeds.rb
require "csv"
# 1番上に1度だけ記述 

# 以下は各テーブルごとに名前を変えて記述。例えばこれはordersテーブル。
orders_csv = CSV.readlines("db/orders.csv")
orders_csv.shift
orders_csv.each do |row|
  Order.create(user_id: row[1], created_at: row[2], updated_at: row[3], product_count: row[4], product_id: row[5])
  # idを除くカラム名を記述する
end

# productsテーブル
products_csv = CSV.readlines("db/products.csv")
products_csv.shift
# 以下略

deploy.rb 편집



그런 다음 deploy.rb를 편집합니다.

config/deploy.rb
# 前略
set :log_level, :debug

after 'deploy:publishing', 'deploy:restart'
namespace :deploy do
# 以下を追加
  desc 'db_seed'
  task :db_seed do
    on roles(:db) do |host|
      with rails_env: fetch(:rails_env) do
        within current_path do
          execute :bundle, :exec, :rake, 'db:seed'
        end
      end
    end
  end
# ここまでが追加分
  task :restart do
    invoke 'unicorn:restart'
  end
end

원격 리포지토리로 푸시



언제나처럼 git add, commit, push.

Cap deploy



capistrano를 사용한 자동 배포.
우선은 언제나.

지역
$ bundle exec cap production deploy

이것으로 일단 배포한 후, 다시 데이터베이스 읽어들입니다.

지역
$ bundle exec cap production deploy:db_seed

이제 ○○_development와 ○○_production의 내용을 동일하게 할 수 있었습니다! 와우! !

제대로 데이터가 들어 있는지 확인



EC2 인스턴스의 MySQL에 로그인
[ec2-user@ip-xxx-xx-xx-xxx ~]$ mysql -u root -p

비밀번호를 요구하므로 입력.

데이터베이스 목록을 확인하려면 이 명령.
mysql> show databases

데이터베이스 선택
mysql> use amazon_production;

각 테이블의 내용 보기
# ordersテーブルなら
mysql> select * from orders

좋은 웹페이지 즐겨찾기