【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をつけていることに注意

ユーザ確認

select user();
+----------------+
| user()         |
+----------------+
| root@localhost |
+----------------+

プラグインの確認

select host,user,password,plugin from user;
+-----------+------+----------+-------------+
| host      | user | password | plugin      |
+-----------+------+----------+-------------+
| localhost | root |          | unix_socket |
+-----------+------+----------+-------------+

unix_socketを無効化

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

一般ユーザ作成

CREATE USER 'user'@'%' IDENTIFIED BY 'pass';

ユーザ名がuser、パスワードがpassのユーザを作成
一旦ログアウトして作成したユーザでログインで切るか確認

$ mysql -u user -p pass

その後接続しているユーザも確認

select user();

リモートアクセス許可

接続元から以下コマンドを入力して接続できないことを確かめる
もしこの段階で接続できるならこの項目は飛ばしていい。

$ mysql -h 接続先のDBのIPアドレス -u user -p user 

ラズパイではデフォルトでリモートアクセスが許可されていない
この設定を無効にするには以下のファイルの29行目をコメントにする

/etc/mysql/mariadb.conf.d/50-server.cnf
#bind-address=127.0.0.0

その後DBを再起動

sudo systemctl restart mysql

接続してみる

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)

ポートの問題か??

ポートを確認してみる

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」と怒られた時の対処法を参考にしています。

先のリモート接続を許可した値を変えてみる。
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サーバーのファイアウォール設定

これでできたかな

。。。。だめだった

$ 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を再起動するだけでは反映しきれていなかったような気がする。

参考