로컬 데이터베이스를 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.rbrequire "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
Reference
이 문제에 관하여(로컬 데이터베이스를 AWS EC2 인스턴스로 가져오기(Capistrano를 통한 자동 배포)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayacai115/items/7231a7bb5474bc2cecf4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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.rbrequire "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
Reference
이 문제에 관하여(로컬 데이터베이스를 AWS EC2 인스턴스로 가져오기(Capistrano를 통한 자동 배포)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/ayacai115/items/7231a7bb5474bc2cecf4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
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
# 以下略
# 前略
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
$ bundle exec cap production deploy
$ bundle exec cap production deploy:db_seed
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
Reference
이 문제에 관하여(로컬 데이터베이스를 AWS EC2 인스턴스로 가져오기(Capistrano를 통한 자동 배포)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/ayacai115/items/7231a7bb5474bc2cecf4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)