ローカル環境のデータベースを、本番環境のデータベースに移す方法（前編）

## はじめに
今年入社の文系出身の新卒エンジニアです。

研修として、図書アプリを作成しています。
その中で、180件ほどの図書データを蓄積させたローカル環境のデータベースを、
AWSにある本番環境のデータベースに移す（更新する）といった工程がありました。

そこで私はかなりつまずきました。

AWSのコンソール上で、
「マウスを右クリックしてデスクトップから切り取り、コンソールの方にコピペッ！！！と」
くらいでできるものだと思ったら大間違いでした。

初心者なりに、同じようなことでつまずいた人のためにまとめてみました。

### 前編と後編の2部構成です
また今回のテーマ
「ローカル開発環境のデータベースをAWS上の本番環境に移す」
については2部構成で書きたいと思います。（今回は前編です。）

1.ローカル開発環境のデータベースのdumpファイルをAWS上の本番環境の踏み台サーバに転送する（前編）
2.本番環境の踏み台サーバに転送したdumpファイルから本番環境のMySQLにリストアする（後編）

## やりたいこと

ローカル開発環境のデータベースのdumpファイルをAWS上の本番環境の踏み台サーバに転送する

その作業工程のうちの
・AWS上の本番環境の踏み台サーバにユーザを作成
・公開鍵を設置
・ローカル環境から dump_file.txt を本番環境の踏み台サーバの新規登録ユーザのホームディレクトリに  scp で転送

## 結論　まずdumpファイルを本番環境の踏み台サーバーにコピーする

ローカルからリモートサーバーにSSH接続できるようにする
＋


```
$ scp -i [秘密鍵] [転送するファイルのパス] [EC2ユーザー名]@[パブリックDNS]:[コピー先のパス]
```

つまり本番環境の踏み台サーバーとSSH接続の設定を行い、SCPコマンドを叩く


## 概要

開発環境のデータベースを本番環境に移す

## 作業イメージ図
![図書管理アプリのDB restore.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560096/9e9981b4-542c-822c-ece6-8771090c9fd2.jpeg)


## 作業手順
- 事前準備
    - データベースからdumpファイルを作成する
- リモートサーバー側
    - ユーザー作成＋鍵設定
- ローカル側
    - ローカルからAWSのリモートサーバーにdumpファイルを移行する

## 作業内容
### 事前準備
- ローカルのデータベースからdumpファイルを作成する

コマンド（後で追記）

- ローカルとリモートサーバーを接続する
    - リモートサーバーとSSH接続できるようにする
        - ユーザー作成＋公開鍵設定

### リモートサーバー側での作業
停止しているインスタンスを、
詳細＞インスタンスを開始
接続>セッションマネージャー
とクリックしていきます。
（通常踏み台サーバーは停止しているものであるため）

リモートサーバー側の作業は下の画像のところから入ります。
![Qiita.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/560096/f640b64e-7952-ea0a-4b8b-cf6457ee04af.jpeg)


今回の場合はAWSコンソールに
アカウント:hoge
でログインし、
huga（本番環境の踏み台サーバー）
にスイッチロールしました。

#### リモート側(ユーザー作成＋公開鍵設定)

```
sudo su
[root home]# useradd newuser
$ su newuser
[newuser ~]$ mkdir .ssh
[newuser ~]$ chmod 700 .ssh
[newuser ~]$ cd .ssh
[newuser .ssh]$ vim authorized_keys
[newuser .ssh]$ chmod 600 authorized_keys
```


#### ローカル側

EC2のバナーが表示されたので接続を確認できました！！

```

       __|  __|_  )
       _|  (     /   Amazon Linux 2 AMI
      ___|\___|___|

```

## それでは作業に入る！(scpで転送)

https://qiita.com/Yorinton/items/df24281fcf07729fa0f9
こちらを参考にしました。

使うコマンドはこちら（ローカル側で操作します）

```
$ cd ./.ssh/keys
$ scp -i [秘密鍵] [転送するファイルのパス] [EC2ユーザー名]@[パブリックDNS]:[コピー先のパス]
```
相対パスの打ち方がわからず、調べるのが面倒だったので、dumpファイルを一時的にローカルの.ssh/に移した。

そのため、私が打つべきコマンドは

```
cd .ssh
scp -i id_rsa dump_file.txt newuser@ip : ~/
```


```
 /c/Users/newuser/.ssh
$ scp -i id_rsa dump_file.txt newuserip : ~/
load pubkey "id_rsa": invalid format
Enter passphrase for key 'id_rsa':
dump_file.txt   
```



コピーできている！

```
[ newuser]# ls -la
total 316
drwx------ 3 newuser newuser    118 Oct 13 09:53 .
drwxr-xr-x 5   root     root       60 Oct 12 01:34 ..
-rw------- 1 newuser newuser     46 Oct 13 09:53 .bash_history
-rw-r--r-- 1 newuser newuser     18 Jan 16  2020 .bash_logout
-rw-r--r-- 1 newuser newuser    193 Jan 16  2020 .bash_profile
-rw-r--r-- 1 newuser newuser    231 Jan 16  2020 .bashrc
-rw-r--r-- 1 newuser newuser 306119 Oct 12 02:24 dump_file.txt
drwx------ 2 newuser newuser     29 Oct 12 01:50 .ssh
```

## 試行錯誤したこと
- AWSのコンソールからドラッグアンドドロップできないか試した。
- GitHubのdumpファイルのURLを書いてインストールしたら上手くダウンロードされるんじゃないかと試した。
- プルリクを出してマージしたら自動で反映されるんじゃないか

## この後行うこと→（後編へ続く）
コピーしたdumpファイルをつかって本番環境のデータベースを最新版に更新する！！

参考にしたサイト：
https://qiita.com/Yorinton/items/df24281fcf07729fa0f9