2019年6月8日土曜日

Raspberry Pi にデータベースを構築する【MySQL,MariaDB】

データベースとしては,使い慣れたMySQLを選択したかったが,Raspbian では MariaDB(MySQL互換) が推奨されているので,MariaDB で構築する.

■インストール及び起動
(1)MariaDB をインストールする.(コマンドでは,mysqlと書いているが,mariadbが導入される.)
$ sudo apt install mysql-client mysql-server

(2)MariaDB を起動する.(コマンドでは,mysqlと書いているが,mariadbが起動する)
$ sudo systemctl restart mysql


■プラグインの無効化
(1)root ユーザーで MariaDB にログインする.(初期状態では sudo を付けないとログインできない)
$ sudo mysql -u root

(2)念の為,ユーザー確認.想定通り,root ユーザーでログインできていることがわかる.
MariaDB [(none)]> SELECT USER();
+----------------+
| USER()         |
+----------------+
| root@localhost |
+----------------+
1 row in set (0.00 sec)

(3)データベースを切り替える.
MariaDB [(none)]> USE mysql;

(4)現在の設定を確認すると,プラグインとして,unix_socketがデフォルトで有効になっているが,これは,データベースにログインするとき,linuxのユーザー名も同じでないとログインできなくするという誰得なプラグイン.つまり,unix_socketが有効になっていたため,初めに sudo を付けなければログインできなかった.
MariaDB [mysql]> SELECT Host,User,Password,plugin FROM user;
+-----------+------+----------+-------------+
| Host      | User | Password | plugin      |
+-----------+------+----------+-------------+
| localhost | root |          | unix_socket |
+-----------+------+----------+-------------+
1 row in set (0.00 sec)

(5)unix_socket プラグインを無効にする.( plugin,Userともに,char型なのでシングルクオーテーションを忘れずに)
MariaDB [mysql]> UPDATE user SET plugin='' WHERE User='root';

(6)設定が反映されていることを確認する.
MariaDB [mysql]> SELECT Host,User,Password,plugin FROM user;
+-----------+------+----------+--------+
| Host      | User | Password | plugin |
+-----------+------+----------+--------+
| localhost | root |          |        |
+-----------+------+----------+--------+
1 row in set (0.00 sec)

(7)ログアウトして,MariaDB を再起動する.
MariaDB [mysql]> exit
$ sudo systemctl restart mysql

(8)sudo 無しで,rootユーザーとしてログインできることを確認する.(確認できたらログアウトする)
$ mysql -u root

■データベースの初期設定(root のパスワード設定等)
(1)データベース初期設定スクリプトを実行する.対話形式で設定できるので,質問どおりに答える.特別な理由がない限り,すべての質問に対してy(yes)で回答すれば問題無い.
$ mysql_secure_installation

(2)root ユーザーのパスワードを設定していれば,パスワード無しではデータベースにログインできなくなる.(以降,パスワードの設定ありとして手順を記述する)
$ mysql -u root
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)

■一般ユーザーの作成
(1)root ユーザーでログインする.
$ mysql -u root -p
Enter password:

(2)ユーザーを作成する.(ここでは,ユーザー名として hoge.パスワードとして piyo としている)
MariaDB [(none)]> CREATE USER 'hoge'@'%' IDENTIFIED BY 'piyo';

(3)一度ログアウトして,作成したユーザーでログインできることを確認する
MariaDB [(none)]> exit
$ mysql -u hoge -ppiyo

■リモートアクセスの許可
(1)作成したユーザーにリモートではログインできないことを確認する.(IPは適宜合わせる)
$ mysql -h 192.168.100.3 -u hoge -ppiyo
ERROR 2003 (HY000): Can't connect to MySQL server on '192.168.100.3' (111 "Connection refused")

(2)理由はいくつか考えられるが,Raspberry Piの場合は,conf ファイルの設定により,リモートアクセスが許可されていないことが原因.試しにnmapしてみると,確かに mysql を受け付けていないことが確認できる.
$ nmap 192.168.100.3

Starting Nmap 7.40 ( https://nmap.org ) at 2019-06-08 14:22 JST
Nmap scan report for 192.168.100.3
Host is up (0.00073s latency).
Not shown: 999 closed ports
PORT   STATE SERVICE
22/tcp open  ssh

Nmap done: 1 IP address (1 host up) scanned in 0.55 seconds

(3)Raspberry Pi ではデータベースの設定が書かれた conf ファイルがツリー構造になっていていくつか別れているので,リモートアクセス不許可の設定が書かれいているファイルを grep で検索する.
$ sudo grep bind-address /etc/ -r -n --color
/etc/mysql/mariadb.conf.d/50-server.cnf:29:bind-address         = 127.0.0.1

(4)特定したファイル(/etc/mysql/mariadb.conf.d/50-server.cnf)をエディタで開き,bind-address行をコメントアウトする.
(修正前)bind-address         = 127.0.0.1
(修正後)#bind-address         = 127.0.0.1

(5)MariaDBを再起動する.
$ sudo systemctl restart mysql

(6)リモートでログインできることを確認する.
$ mysql -h 192.168.100.3 -u hoge -ppiyo

(7)nmapしてみると,ポート番号3306 に mysql が追加されていることが確認できる.
$ nmap 192.168.100.3

Starting Nmap 7.40 ( https://nmap.org ) at 2019-06-08 14:33 JST
Nmap scan report for 192.168.100.3
Host is up (0.00075s latency).
Not shown: 998 closed ports
PORT     STATE SERVICE
22/tcp   open  ssh
3306/tcp open  mysql

Nmap done: 1 IP address (1 host up) scanned in 3.11 seconds

■データベースの作成
(1)root ユーザーでログインする
$ mysql -u root -p

(2)データベースを作成する
MariaDB [(none)]> CREATE DATABASE fuga;

(3)hogeユーザーにfugaデータベースを操作する権限を与える.
MariaDB [(none)]> GRANT ALL PRIVILEGES ON fuga.* TO hoge@'%';

(4)一度ログアウトして,hogeユーザーでfugaデータベースにリモートでアクセスできることを確認する.
$ mysql -h 192.168.100.3 -u hoge -ppiyo fuga

以上.

0 件のコメント:

コメントを投稿