Raspberry Pi 3+の設定（忘備録）その4 MySQL（mariaDB）インストール

今までRaspberry Pi 3+に16GBのmicroSDを挿してwebサーバとして運用していましたが、手狭になってきたので64GBに改めて環境構築をした時の自分の作業の忘備録です。以前導入した時とだいぶ変わっている部分が多かったので驚いたのが第一印象でした。

# 前提

* このラズベリーパイは外部に公開はしません。（twitterへのポストはします）
* 普段、このRaspberry Pi 3+は午前7時から午後11時まで30分毎にcronでbotを運用しています。
* そのため一日当たりの作業時間は夜間の23時から0時までの1時間ぐらいをメンテナンス時間として作業を行う予定です。

またこういう世界から遠ざかって久しいのでいろいろと拙い部分があると思います。ご指摘ください。

#MySQL(MariaDB)インストール

今回、今までと同じようにphpmyadminを入れようと思ったのですが、インストールしてもユーザー周りがうまくいかずに困ったので、運用はとりあえず全部SQLコマンドを叩いて実行することにしようと思います。

:::note warn
この記事を書いた時には気づいていませんでしたが、pmaがうまく入っていなかったのではなく、リポジトリに含まれてるpmaのソースコードにエラーが含まれていました。(ver4.6系）。このエラーは、手動でバージョンを上げることにより解消します。phpmyadminのインストールに関しては後日改めて記事にしたいと思います。
参考サイトはこちら。

phpMyAdminを手動で最新版にする [WSL/Ubuntu環境]
https://www.petitmonte.com/linux/phpmyadmin_update.html

:::

参考にしたサイトはこちら。

https://naokeyzmt.com/rogue/skillup-raspberrypi-lamp/

MySQLを入れようとすると、なんだか「無い」と怒られるのでmariaDBをインストールしました。

```console:
$ sudo apt install mariadb-server
```

mariadbインストール後、設定を行っていきたいと思います。
次にこちら。

```console:
$ sudo /usr/bin/mysql_secure_installation

$ sudo systemctl start mariadb.service
```

設定することは以下の点

* rootのパスワード設定　→　設定する
* 匿名ユーザーの有無　→　いらない
* リモートログインの有無　→　~~今回はコマンドラインで実行するので使うかもしれない~~　いらない
* testデータベースの有無　→　いらない
* 設定の反映　→　やる

ここまでやって、ログインできるか確認します。まずは何もオプションなし。

```console:
$sudo mysql

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 36
Server version: 10.3.29-MariaDB-0+deb10u1 Raspbian 10

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

何もなしで入れると思います。それではユーザーを手動で作成していこうと思います。

```sql
/*ユーザー追加*/
create user `任意のユーザー名`@`localhost` IDENTIFIED BY '任意のパスワード';
/*追加したユーザーに権限を付加。mysql8以降では書式が変わったそうです。*/
GRANT ALL PRIVILEGES ON *.* TO `任意のユーザー名`@'localhost' WITH GRANT OPTION;
/*反映*/
FLUSH PRIVILEGES;
```

ここまでやって、追加したユーザーが見えるか確認したいと思います。

```sql:
MariaDB [(none)]> SELECT Host, User, Password FROM mysql.user;
+-----------+-------------+-------------------------------------------+
| Host      | User        | Password                                  |
+-----------+-------------+-------------------------------------------+
| localhost | root        | *xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx|
| localhost | hoge-hoge   | *yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy|
+-----------+-------------+-------------------------------------------+
```

パスワードには暗号化された値が入っています。
次に、先ほど指定したユーザーでログインできるか確認してみたいと思います。

```console:
$ sudo mysql --host=localhost --user=hoge-hoge --password=xxxxxxxxxxxxxxxxxxxxxx
```

こっちでも行けます。

```console:
$ sudo mysql -uhoge-hoge -p
Enter password:
```

ここまで行ければ、あとはコマンドラインで何とかなると思います。と、思いましたが…。

# PDOでMySQLにつながらない（解決済み）

まずは、PDOのドライバーが必要なのでインストール

```console:
$ sudo apt-get -y install php-mysql
```
さらにphp.iniのmysqlやpdoと書いてある行のコメントアウトをかたっぱしから外していきます。
phpinfoにも
PDO drivers mysql
の記載があることを確認。

https://kahoo.blog/php-pdo-check-mysql-connection-code/
こちらのソースコードを参考にrootによる接続確認をしてみる。

```php:
<?php
// defineの値は環境によって変えてください。
define('HOSTNAME', 'localhost');
define('DATABASE', 'hoge_data');
define('USERNAME', 'root');
define('PASSWORD', 'root-hoge');

try {
/// DB接続を試みる
$db = new PDO('mysql:host=' . HOSTNAME . ';dbname=' . DATABASE, USERNAME, PASSWORD);
$msg = "MySQL への接続確認が取れました。";
} catch (PDOException $e) {
$isConnect = false;
$msg = "MySQL への接続に失敗しました。<br>(" . $e->getMessage() . ")";
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>MySQL接続確認</title>
</head>
<body>
<h1>MySQL接続確認</h1>
<p><?php echo $msg; ?></p>
</body>
</html>
```

MySQL接続確認
MySQL への接続に失敗しました。
(SQLSTATE[HY000] [1698] Access denied for user 'root'@'localhost')

rootでつながりません。
MySQL5.7ではsudo権限でないとrootに接続出来ないとの事。上記で作成した別アカウントで再度接続を試みます。

...つながりました！

# 関連ページ

https://qiita.com/cafe-capitola/items/b5e3e5dfdc8ca9f9a744

https://qiita.com/cafe-capitola/items/283f41793cde409a36a6

https://qiita.com/cafe-capitola/items/d167b4e96fa78dc8878c

https://qiita.com/cafe-capitola/items/97dd713185049d4a8274

https://qiita.com/cafe-capitola/items/2b80853490c88d6eae0c?1

https://qiita.com/cafe-capitola/items/91e10926bfbe9cea61e0

https://qiita.com/cafe-capitola/items/9f97c791a598420a7e57