VBのubuntuにmysqlを入れてホストOSからDBを利用する

# やりたいこと

ubuntuイメージのvirtual box にmysqlを入れてホストOSのjavaプログラムから利用できるようにします。
ここで作成したデータベースはサンプルで作成しているjavaプログム(作成中)から利用できるようにします。

## 事前準備

* virtual boxのインストール
* [ubuntuイメージのダウンロード](https://www.ubuntulinux.jp/download/ja-remix-vhd)
* teratermなどsshクライアントツールのインストール(windows)

## 手順

### ダウンロードしたvhdファイルからvirtual boxのイメージを作成する

1. virtual boxを起動して[この手順](https://pc-karuma.net/virtualbox-virtualbox-new-machine-from-vdi/)を参考にダウンロードしたubuntuイメージを取り込む。

### ホストOSからssh接続できるようにする。

ゲストOSないでコマンドを打っていくのがしんどいので、ホスト側のterminalからコマンドが打てるようにする。

1. apt-getが使えるようにする。  
`sudo apt-get update`を実行し、接続エラーになった場合`/etc/resolvconf/resolv.conf.ds`以下にある`base`を書き換えて、DNSの設定をする。  

       ````
       $ # バックアップの取得
       $ sudo cp /etc/resolvconf/resolv.conf.ds/base 
       /etc/resolvconf/resolv.conf.ds/base cp /etc/resolvconf/resolv.conf.ds/base 
       /etc/resolvconf/resolv.conf.ds/baseBK
       $ # ファイルを編集
       $ vi cp /etc/resolvconf/resolv.conf.ds/base 
       $ # ファイル内に下記の記述を追加
       nameserver 8.8.8.8
       $ # webに接続できることを確認
       $ sudo apt-get update
       ````

1. openssh-serverをインストール  
`sudo apt-get install -y openssh-server`

1. sshサービスを起動  
`sudo service  ssh start`

1. sshが起動していることを確認
`sudo lsof -i:22`と入力して
`sshd    3457   root    3u  IPv4  21430      0t0  TCP *:ssh (LISTEN)
` みたいな結果が帰ってくることを確認

1. virtual boxのネットワーク設定をする
`vritual boxのメニュー>設定>ネットワーク`から接続方式が`NAT`になっていることを確認する。
同じタブ内で`詳細>ポートフォワーディング`を選択し、下記のように設定する。
<img width="527" alt="スクリーンショット 2019-09-15 14.03.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/fe086bda-4ccc-234d-1f00-086be6a4747b.png">

1. ホスト側のterminalからssh接続ができることを確認
`ssh {vmマシンのユーザー名}@localhost -p 222`でVMマシンに接続し、求められたパスワードを入力する。

### mysqlのインストール

ubuntuイメージないでmysqlに接続できるようにする。
[この手順を参考にする](https://www.yokoweb.net/2018/05/13/ubuntu-18_04-server-mysql/)

### データベースの設定

javaサンプルプログラムで利用するテーブルを作成します。  
ここから先の作業は`sudo mysql -u root -p `を実行しデータベース内に入り、下記のようなコマンド入力画面で行います。
<img width="479" alt="スクリーンショット 2019-09-15 14.16.48.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/3e84819e-73d6-0702-10e1-1f456f8b2121.png">

1.DB作成からテーブルの作成まで

             ```
             # データベースを作成
             create database sample;
             # 作成したデータベースを選択
             use smaple;
             # sampleデータベースにCOMMODITYテーブルを作成する
             CREATE TABLE `sample`.`COMMODITY` (`COMMODITY_NAME` VARCHAR(100) NOT NULL,`STOCK_COUNT` INT NOT NULL,UNIQUE INDEX `COMMODITY_NAME_UNIQUE` (`COMMODITY_NAME` ASC));
             ```

1. テストデータを入れる

```
INSERT INTO `sample`.`COMMODITY` (`COMMODITY_NAME`, `STOCK_COUNT`) VALUES ('テスト', '10');
```

### ホストからデータベースに接続する

1. virtual boxのネットワーク設定をする
`vritual boxのメニュー>設定>ネットワーク`から接続方式が`NAT`になっていることを確認する。
同じタブ内で`詳細>ポートフォワーディング`を選択し、下記のように設定する。
<img width="522" alt="スクリーンショット 2019-09-15 17.12.55.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/292795/2f2be60a-3aab-db57-4086-4a7d08131fc0.png">

1. [ここ](http://next49.hatenadiary.jp/entry/20120112/p1)を参照して`/etc/mysql/my.cnf`を書き換える。  
データベースへの接続を全てのIPから許可するようにする。

1. [ここ](https://symfoware.blog.fc2.com/blog-entry-2159.html)を参照し、データベースにユーザーを追加する。
書き換えないと`root`ユーザーでしかログインできないため色々と面倒。。。

### これでホストOSから`localhost:3308`を指定するとvirtualboxのデータベースに接続できるようになる

### 自動起動設定

VM再起動時にssh接続とmysqlへの接続ができるように、sshとmysqlにが自動で起動するように設定する。

1. sysv-rc-confのインストール  
`sudo apt-get install sysv-rc-conf`

1. 自動起動設定
` sudo sysv-rc-conf mysql on`` sudo sysv-rc-conf ssh on`
`sudo sysv-rc-conf --list` でmysqlとsshの自動起動にonがついていることを確認