2022年7月28日木曜日

Install MariaDB10 on Synology NAS of DSM7.1

 SynologyのNASにMariaDBをインストールしてみる



Pythonでスクレイピングなプログラムを書いていたら、やっぱりDataBaseを使用したくなった。今まではCentOSでMariaDBを使っていたのだが、CentOSの後継が不透明になってしまい使う気がなくなった。PCでサーバーを作るとメンテナンスが面倒だし、起動しっぱなしだと電気代も馬鹿にならない。ふと、SynologyのNASにMariaDBがあったような気がして、SynologyのPackageCenterで探すとMariaDB10が使用できるのを見つけた。

早速インストールしてみた。

が、WindowsのSQLクライアントHeighSQLから接続できない。

なぜなんだ。。。

MariaDBの設定を使用にも設定画面はどうもなさそう。

ネットにはこの手の情報があまりない。

ので、ブログに書いておくことにした。。

もっといい方法があるかもしれませんが、あったら教えて下さい。



0.環境

SOHO 192.168.0.*

Synology NAS DS418 DSM7.1 192.168.0.8

MariaDB10 (MySQLの派生バージョン) 192.168.0.8

Windows10 192.168.0.52

HeidiSQL(SQLクライアントはお好みで)


1.MariaDBをインストールする


SynologyのNAS上のWeb画面を開きます。

PackageCenterでMariaDBを検索しインストールします。

rootのパスワードを設定します。

MariaDBの設定はこのrootアカウントのパスワード設定ほどしかできません。NAS上で他の設定画面は有りませんので、他の設定はコマンドでの操作になります。ここに気がつくのにあっちウロウロこっちウロウロ状態でした。

 

 2.SSHでNASに接続する

SynologyのNASはDebian系のハードカスタムLinuxだそうです。
なので、SSHで接続すればコマンドでいろいろできるようになります。めっちゃ素敵です。Python3も入っているし、Apacheの入れられるそうです。

NAS側では、SSHサービスを有効化しておかなければなりません。

 


Synology NASの設定画面をブラウザで開く

[コントロールパネル]-

[端末とSNMP]-

[v]SSHサービスを有効化する-

[適用] をクリックする

NASを再起動する(一応) 


 

PCでSSHクライアントを起動し、NASに接続する。


3.MariaDBにアクセスする

PCでSSHクライアントを起動し、NASに接続する。



ここでは、RLoginを使って接続しました。

MariaDBへ接続します。  

$mysql -u root -p<yourpassword>

コマンドは、mysql となっていますが、MariaDBです 。MariaDBはMySQLの後継バージョンにあたります。
無事接続できると次のようなメッセージが表示されます。

Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 26
Server version: 10.3.32-MariaDB Source distribution

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

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

MariaDB [(none)]> 

 


4.MariaDBにリモート接続用のアカウントを追加する

現状のアカウント情報を確認する。
MariaDB [(none)]> use mysql MariaDB [mysql]> select host,user,password from user; +--------------+---------+-------------------------------------------+ | host | user | password | +--------------+---------+-------------------------------------------+ | localhost | root | *FE40B32563*************************2E749 | | 127.0.0.1 | root | *FE40B32563*************************2E749 | | ::1 | root | *FE40B32563*************************2E749 | +--------------+---------+-------------------------------------------+ 3 rows in set (0.001 sec)


userはroot、hostは、localhost、127.0.0.1、::1が登録されています。

ちなみに、アカウント情報をすべて表示するには次のようにします。 

select * from user;

権限情報がかなりの量が出てきます。これを、手動で設定追加するのは冗長です。

かと言って、レコードのコピーをしてから、hostとuserを変更しようにも、どちらもプライマリキーなのでインサート時にエラーが出ます。

MariaDB [mysql]> insert into user (select * from user where host="localhost");
ERROR 1062 (23000): Duplicate entry 'localhost-root' for key 'PRIMARY'

アカウントを追加するだけなんですが、 

いちばん簡単な方法は、テンポラリテーブルを作成して、プライマリキーを削除してInsertします。

まず、アカウント をテンポラリテーブルにコピーします。

MariaDB [mysql]> create temporary table tmp1 (select * from user where host="localhost"); Query OK, 1 row affected (0.003 sec) Records: 1 Duplicates: 0 Warnings: 0

  コピー内容を確認してみます。

select * from tmp1;

テンポラリテーブルtmp1にコピーされました。 

プライマリキーのカラム(host)を削除します。 

MariaDB [mysql]> alter table tmp1 drop host; Query OK, 1 row affected (0.002 sec) Records: 1 Duplicates: 0 Warnings: 0


userに追加します。
MariaDB [mysql]> insert into user (select 0,tmp1.* from tmp1); Query OK, 1 row affected (0.001 sec) Records: 1 Duplicates: 0 Warnings: 0


MariaDB [mysql]> select host,user,password from user; +--------------+---------+-------------------------------------------+ | host | user | password | +--------------+---------+-------------------------------------------+ | localhost | root | *FE40B32563*************************2E749 | | 127.0.0.1 | root | *FE40B32563*************************2E749 | | ::1 | root | *FE40B32563*************************2E749 | | 0 | root | *FE40B32563*************************2E749 | +--------------+---------+-------------------------------------------+ 6 rows in set (0.001 sec)
host "0"が追加されました。

host"0"をNASに接続するPCのIPアドレスに変更します。このIPアドレスは固定されていなと、PCを再起動したときに変わってしまい非常に面倒です。 

当環境ではPCが"192.168.0.52"固定なのでそれに変更します。
MariaDB [mysql]> update user set host="192.168.0.52" where host="0";

変更できたか確認します。

MariaDB [mysql]> select host,user,password from user; +--------------+---------+-------------------------------------------+ | host | user | password | +--------------+---------+-------------------------------------------+ | localhost | root | *FE40B32563*************************2E749 | | 127.0.0.1 | root | *FE40B32563*************************2E749 | | ::1 | root | *FE40B32563*************************2E749 | | 192.168.0.52 | root | *FE40B32563*************************2E749 | +--------------+---------+-------------------------------------------+ 4 rows in set (0.001 sec)

よさそうですね。

最後にこのアカウント情報をデータベースに反映させます。

これを忘れると、いくらアカウント情報を修正しても全くリモートログインできません。 

 
MariaDB [mysql]>flush previleges;


5.HeidiSQLでMariaDBに接続する

WindowsのSQLクライアントとして有名なものにHeidiSQLがあります。ハイジSQLです。 

定番なのでインストール手順等は他のサイトに譲ります。

セションマネージャーでMariaDBを追加します。


無事接続できれば作業完了です。




お疲れ様でした。

ここまでできれば、HeidiSQLでMariaDBのアカウントを追加したり、Hostを変更したり自由にできるようになります。

ただ、アカウントのデータを弄るときにSSL_chipperでエラーが発生します。

 ERROR 1364: 1364: Field 'ssl_cipher' doesn't have a default value

mysql.user.ssl_chipper

の値を

Y

に変更すると発生しなくなります。



アカウント情報変更したら必ず反映させてください。
MariaDB [mysql]>flush previleges;

よく忘れてパニクる私。