【RaspberryPi】DBを使うまで

#インストール

```
$ sudo apt-get install mariadb-server-10.0
$ sudo apt-get install apache2
```
インストールしたものは以下

- mariaDB
- apache2


`mysql-server`はインストールできないため
`mariadb-server-10.0`をインストールする

####DBにログイン

```
$ sudo mysql -u root
```
sudoをつけていることに注意

####ユーザ確認
```sql
select user();
```
```
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+
```


####プラグインの確認
```sql
select host,user,password,plugin from user;
```
```
+-----------+------+----------+-------------+
| host      | user | password | plugin      |
+-----------+------+----------+-------------+
| localhost | root |          | unix_socket |
+-----------+------+----------+-------------+
```
####unix_socketを無効化
```sql
UPDATE user SET plugin='' WHERE User='root';
```
`unix_socket`はDBへのログインにはラズパイのユーザ名も同じでないとログインできなくするプラグイン
そのため初回ログイン時には`sudo`をつけていた
####その後DBを再起動
```
MariaDB [mysql]> exit;
Bye
pi4@raspi4:~ $ sudo systemctl restart mysql
```
これでsudoなしでもログインできる

```
$ mysql -uroot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 32
Server version: 10.0.28-MariaDB-2+b1 Raspbian testing-staging

Copyright (c) 2000, 2016, Oracle, MariaDB Corporation Ab and others.

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

MariaDB [(none)]>
```

#初期設定
##rootパスワードの設定
```
 $ mysql_secure_installation
```
上記コマンドでrootのパスワードやらなんやらを設定できる。
よくわからなかったらy押せばいい
パスワードが反映されているか確認

```
$ mysql -u root -p
```
#一般ユーザ作成
```sql
CREATE USER 'user'@'%' IDENTIFIED BY 'pass';
```
ユーザ名が`user`、パスワードが`pass`のユーザを作成
一旦ログアウトして作成したユーザでログインで切るか確認

```
$ mysql -u user -p pass
```
その後接続しているユーザも確認

```sql
select user();
```
#リモートアクセス許可
接続元から以下コマンドを入力して接続できないことを確かめる
もしこの段階で接続できるならこの項目は飛ばしていい。

```bash
$ mysql -h 接続先のDBのIPアドレス -u user -p user 
```
ラズパイではデフォルトでリモートアクセスが許可されていない
この設定を無効にするには以下のファイルの29行目をコメントにする

```:/etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address=127.0.0.0
```
その後DBを再起動

```bash
sudo systemctl restart mysql
```
接続してみる

```bash
mysql -h IPアドレス -u user -p user
```
####しかしエラー
```
$ mysql -h xxx.xxx.xxx.xxx -u root -p
Enter password:
ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xxx' (61)
```
ポートの問題か？？

ポートを確認してみる

```sql
show variables like 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port          | 3306  |
+---------------+-------+
```
ポートは**3306**
先の接続コマンドにポート情報を追加してやってみる

```
$ mysql -h xxx.xxx.xxx.xxx -P 3306 -u root -p 
```
だめだ。。。。。。。。。

###MySQLの設定ファイルに問題は無いか？
[MySQLで「ERROR 2003 (HY000): Can’t connect to MySQL server」と怒られた時の対処法](https://casualdevelopers.com/tech-tips/how-to-fix-2003-error-when-connecting-to-mysql-server/)を参考にしています。

先のリモート接続を許可した値を変えてみる。
`bind-address=0.0.0.0`を追記してみる。
こう書くことですべてのホストからの接続を許可したことになる。

```:/etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address=127.0.0.0
bind-address=0.0.0.0
```
と思ってやってみたけどやっぱ駄目だった。。。。。。

###もしかして接続先のラズパイのポートの問題か？
3306が空いてないから接続できなかったんじゃ。。。
そんな恥ずかしいことがあるのか？？

とりあえずufwをインストール

```
$ sudo apt-get install ufw
```

ufw起動

```
$ sudo ufw enable
```
これ起動の仕方
これをやらずに色々設定してみて`sudo ufw status`をやっても何も表示されずに軽く詰んでいた

```
Command may disrupt existing ssh connections. Proceed with operation
```
上記コマンドを実行すると「sshとか切れっかもしれないけど平気？」って言われるけど`Y`でOK
sshが切れることはなかった

とりあえずDBのポートと22は許可しておいた
22は以下コマンドで連続した接続に関しては制限を設けることができる

```
sudo ufw status
Status: active

To                         Action      From
--                         ------      ----
3306                       ALLOW       Anywhere
22                         LIMIT       Anywhere
3306 (v6)                  ALLOW       Anywhere (v6)
22 (v6)                    LIMIT       Anywhere (v6)
```
>「連続してアクセスしてくるIPアドレスの接続を許可しない」設定を施しましょう。これにより「30秒間の間に6回以上接続を試みた IP アドレスを許可しない」ルールが設定されます。
参考：[iptablesが難しいためufwでWEBサーバーのファイアウォール設定](https://qiita.com/shimakaze_soft/items/c3cce2bfb7d584e1fbce)

###これでできたかな
。。。。だめだった

```
$ mysql -h X.X.X.X -uuser -puser -P 3306
ERROR 2003 (HY000): Can't connect to MySQL server on 'X.X.X.X' (111 "Connection refused")
```

###とおもったら
もう駄目だと思い再起動をかけると
なぜかリモートで接続ができていた。。。


とりあえずここまでの設定を並べていく。

```:/etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address=127.0.0.0
```
結局ここはコメントにしたまま

ufwは再起動しても起動はしていなかったため影響なしと思われる
(自動起動の設定をしていないから当然だが)

###なぜうまくいったかの私的な考え
おそらく`/etc/mysql/mariadb.conf.d/50-server.cnf`の設定を変更してもDBを再起動するだけでは反映しきれていなかったような気がする。

#参考
- [Raspberry Pi にデータベースを構築する【MySQL，MariaDB】](http://nort-wmli.blogspot.com/2019/06/raspberry-pi-mysqlmariadb.html)