UNIX系のオペレーティングシステムは、マルチユーザーで使用されるのが前提で作られたOSであり、ソフトウェアはrootでインストール・実行され、一般ユーザーがそれを使わせていただく、というのが基本的な考え方になっています。
一方で、開発用途でソフトを使いたい、あるいはちょっと動作確認をしたい、といった場合に、いちいち管理ユーザーの権限がないとインストールできないのは不便ですよね。
というか、ちょっとソフトを試したいだけなのにルート権限でシステムをいじるって、ちょっと怖いです。「やっぱ使わないからソフトをアンインストールするわ」って言って本当に元通りに戻せるかとかいろいろ心配ですよね。
そこで、横浜ベイキットではいくつかのソフトウェアについて、一般ユーザーでインストールする方法を紹介していきます。
今回はMariaDB(MySQL)です。
MariaDBを一般ユーザーでインストールするメリット
挙げたらキリがないですが、
- 管理ユーザー権限がなくても自由に起動・終了ができる
管理者や他のOSユーザーとの調整の必要もなく、自分一人の中で完結するので面倒がないです。
- データベースを他人と共有する必要がない
複数のOSユーザーでMariaDBを使う場合は、他人のDBを壊しちゃったりとかしそうで怖いですw
- 壊したり作り直したりが自由にできる
つまりいろいろ好きなように試せるってことですね。DB最初から作り直したいときとか、rootユーザーにならなくても、DBのフォルダをrmするだけなので楽ちんです。rootユーザーでrm -r
コマンドとか実行したくないですよねw
- 設定やログなど、どこにあるか完全にコントロールできる
パッケージインストールだと、MySQLを起動した後、ログの場所がどこか分からなくて、やっと分かったとしてもrootユーザー権限じゃないと見られなくていちいちsudo
するのとか地味に面倒だったりしません?
- アンインストールが簡単
それな!アンインストールはディレクトリごと消すだけでOK。
Mac使ったことある人は分かると思いますが、アプリケーションフォルダの中のアプリケーションをごみ箱に入れる感覚で消せますw
管理者でインストールした場合、設定ファイルやDB、ログなどがシステムのディレクトリに残る可能性があり、完全にクリーンな状態に戻せるかよく分からないんですよね。
- スキルアップになる
何といっても、一般ユーザーインストールを経験しておくと確実に経験値が上がります
。
そういうところが地味におススメではあるのですがw
もちろん、管理ユーザーでインストールするメリットもありますよ
- yumやrpm、aptなどのツール一発で瞬間インストールできる
- システムに組み込まれるので自動起動の設定などが簡単
というのはありますね。
なので、開発環境なのか、テスト環境なのか、本番環境なのか、と言ったところでも選択は変わりそうです。
と言うのを念頭に、「それでも一般ユーザーでインストーしたい!」という方のために、MariaDB(MySQL)を一般ユーザーでインストールする方法を解説します。
※ここではCentOS8で解説します。また、MySQLも作業はほとんど同じなので都度読み替えてください。
準備
ここでは、ホームディレクトリの下のapp/mariadb
配下にインストールすることにします。
つまり、このディレクトリを消すだけで、全てをなかったことにできるわけw
$ mkdir -p ~/app/mariadb
必要なパッケージのインストール
MariaDBのコンパイルに必要なツールやパッケージをインストールします。
環境によって違うのでアレですが、とりあえず弊環境ではこのあたりが必要でした
- make
- cmake
- gcc
- gcc-c++
- ncurses-devel
- gnutls
てことでインストール
$ sudo yum install -y cmake make gcc gcc-c++ ncurses-devel gnutls-devel
ライブラリやツールが足りないとcmakeやmakeに失敗するので、その時出たエラーメッセージからアタリをつけていきます。
例えばcmakeで以下のようなエラーが出ます
CMake Error at cmake/readline.cmake:65 (MESSAGE):
Curses library not found. Please install appropriate package,
remove CMakeCache.txt and rerun cmake.On Debian/Ubuntu, package name is libncurses5-dev, on Redhat and derivates it is ncurses-devel.
このときはcursesライブラリがないんだということでyum searchします
$ yum search curses
出て来た一覧からそれっぽいのを見つけ、「-devel」のついたものをインストールする、という算段です。
(間違ったらyum removeでなかったことにw)
MariaDBソースのダウンロード
MariaDBのソースを取ってきます。MariaDBのサイト(https://downloads.mariadb.org )からダウンロードしてきます。
今回は10.5.10をDLしました。
$ ls
mariadb-10.5.10.tar.gz
解凍して中に入ります。
$ tar zxf mariadb-10.5.10.tar.gz
$ ls
mariadb-10.5.10 mariadb-10.5.10.tar.gz
$ cd mariadb-10.5.10
コンパイルとインストール
Makefile作成
Makefileはcmakeで作成します。configureじゃないところとか、ちょっとイケてないっすねw
$ cmake . -DCMAKE_INSTALL_PREFIX=$HOME/app/mariadb \
-DMYSQL_DATADIR=$HOME/app/mariadb/mariadata \
-DMYSQL_UNIX_ADDR=$HOME/app/mariadb/var/mariadb.sock \
-DSYSTEMD_PID_DIR=$HOME/app/mariadb/var \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
cmakeにこれらのオプションを指定することで、もろもろ以下のように設定されます
指定するもの | 値 |
---|---|
インストール先 | $HOME/app/mariadb |
データベースファイルのデフォルトの置き場所 | $HOME/app/mariadb/mariadata |
デフォルトのローカル接続用ソケットファイル | $HOME/app/mariadb/var/mariadb.sock |
PIDファイルのデフォルトの置き場所 | $HOME/app/mariadb/var |
デフォルトのキャラクタセット | UTF-8 |
デフォルトの照合順序 | utf8_general_ci |
本当は設定ファイルのデフォルトの置き場所も変えられるといいのだけど、これは/etc/my.cnf
固定になっており、変えられないみたい。
というわけで、設定ファイルの場所は起動時に指定することになりますね。
cmakeで指定できるオプションは以下を参考に
ちなみに、cmakeをやり直すときはCMakeCache.txtを削除してから行った方がいいらしい。知らんけど。
Make
cmakeでエラーが出なければmakeします。結構時間かかるw
メモリやコアがたくさんあるなら、-j オプションで並列度を指定してビルドすると速い。
$ make -j 8
(こっちの環境ではメモリ不足で落ちたけどw)
makeが終了したらインストールします。
$ make install
これで、$HOME/app/mariadb 以下にインストールされました。
移動して確認してみましょう
$ cd ~/app/mariadb/
$ ls
bin include man README-wsrep sql-bench
COPYING INSTALL-BINARY mysql-test scripts support-files
CREDITS lib README.md share THIRDPARTY
デフォルトの設定がどうなっているか一応確認します。
$ bin/mariadb-config
Copyright 2011-2020 MariaDB Corporation AB
Get compiler flags for using the MariaDB Connector/C.
Usage: mariadb-config [OPTIONS]
Compiler: GNU 8.3.1
--cflags [-I/home/baykit/app/mariadb/include/mysql -I/home/baykit/app/mariadb/include/mysql/mysql]
--include [-I/home/baykit/app/mariadb/include/mysql -I/home/baykit/app/mariadb/include/mysql/mysql]
--libs [-L/home/baykit/app/mariadb/lib/ -lmariadb]
--libs_r [-L/home/baykit/app/mariadb/lib/ -lmariadb]
--libs_sys [-ldl -lm -lpthread -lgnutls]
--version [10.5.10]
--cc_version [3.1.13]
--socket [/home/baykit/app/mariadb/var/mariadb.sock]
--port [3306]
--plugindir [/home/baykit/app/mariadb/lib/plugin]
--tlsinfo [GnuTLS 3.6.14]
--variable=VAR VAR is one of:
pkgincludedir [/home/baykit/app/mariadb/include/mysql]
pkglibdir [/home/baykit/app/mariadb/lib]
pkgplugindir [/home/baykit/app/mariadb/lib/plugin]
DB作成
前準備
DB作成の準備として、データベースを格納するディレクトリと、ランタイム情報を格納するディレクトリを作っておきます
$ cd ~/app/mariadb/
$ mkdir data var
あと、mariadbのコマンド群が実行できるようにPATHを通します
export PATH=$HOME/app/mariadb/bin:$PATH
これは$HOME/.bash_profileにも書いておきましょう。
初期化
次のコマンドを実行して、MariaDBが管理できるような形にdataディレクトリ内を初期化します(多分w)
$ scripts/mariadb-install-db
起動
MariaDBのデーモンプログラムはmariadbd
(MySQLだとmysqld
)なのですが、通常はこのデーモンプログラムを起動するための別のコマンドmariadbd-safe
(MySQLだとmysqld-safe
)を実行します。(理由はよくわからんw)
mariadbd-safe
210603 06:34:28 mysqld_safe Logging to '/home/baykit/app/mariadb/data/kurage.err'.
210603 06:34:28 mysqld_safe Starting mariadbd daemon with databases from /home/baykit/app/mariadb/data
ちなみに、MariaDBの設定ファイルはデフォルトで/etc/my.cnf
です。なければ読み込みません。
ただ、/etc
はシステムディレクトリなのでここには置きたくないですよね。
というわけで ~/app/mariadb
に置くことにしましょう。例によってアンインストールも簡単ですしw
設定ファイルを読ませたい場合以下のようにオプションを指定して起動します。
(ちょっと面倒ですね。だからビルド時に指定できるようにしてくれればいいのにw)
$ cd ~/app/mariadb
$ touch my.cnf
$ mariadbd-safe --defaults-file=~/app/mariadb/my.cnf
接続
mariadb
コマンドを実行して、先ほど起動したデーモンに接続しましょう
$ mariadb
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 17
Server version: 10.5.10-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)]>
※この「none」ってなーんだ!w と思ったら使用中のDBの名前っぽい。
ユーザー作成
MariaDBには最初から管理者権限であるroot
ユーザーがいますが、まあ別のDBユーザー作っときましょうw
ローカル接続ができるkurage
というユーザー(パスワードはinada
)を作成し、ありとあらゆる権限を与え、一回抜けます。
MariaDB [(none)]> create user 'kurage'@'localhost' identified by 'inada';
Query OK, 0 rows affected (0.007 sec)
MariaDB [(none)]> grant all on *.* to 'kurage'@'localhost';
Query OK, 0 rows affected (0.006 sec)
MariaDB [(none)]> \q
ユーザーkurage
で接続できることを確認します
$ mariadb -u kurage -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 16
Server version: 10.5.10-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)]>
接続できました!
データベース作成
ではお待ちかね、データベースを作成してみます。kurage
ユーザーで接続した状態で以下のSQLを実行します。
MariaDB [(none)]> create database salmon;
Query OK, 1 row affected (0.000 sec)
DB作っただけじゃ使えなくて、次のようにuse
文を使って特定のDBを使うことを宣言します。
MariaDB [(none)]> use salmon;
Database changed
MariaDB [salmon]>
そうすると現在使用中のDBの名前が(none)
からsalmon
に変わったことが確認できるかと思います。
表の作成・挿入・選択
貝の名前を管理するshell
という表を作ってみます
MariaDB [salmon]> create table shell (id integer primary key, name varchar(128));
Query OK, 0 rows affected (0.047 sec)
牡蠣とアワビを登録します
MariaDB [salmon]> insert into shell values (1, 'Oyster');
Query OK, 1 row affected (0.007 sec)
MariaDB [salmon]> insert into shell values (2, 'Abalone');
Query OK, 1 row affected (0.013 sec)
選択してみましょう
MariaDB [salmon]> select * from shell;
+----+---------+
| id | name |
+----+---------+
| 1 | Oyster |
| 2 | Abalone |
+----+---------+
2 rows in set (0.000 sec)
以上で、SQLが使えるところまで確認しました。
その他
MySQLを別のマシンからアクセス可能にするためには、ポート3306番を外に向けてアクセス可能にしておく必要があります。
この辺りの設定は別ドキュメントにまとめたので参考にしてください
結言
いかがだったでしょうか。
MariaDBの一般ユーザーインストール、何となくやればできそうな感じがしませんかw
最初がちょっと面倒ですが、インストールまで行ってしまえばあとは同じですし、しかも使いやすいと思うので、是非チャレンジしてみてください!
Enjoy!