Ubuntu
VirtualBox
mariadb
Ubuntu14.04

Ubuntu 16.04のローカルVMで開発用のMariaDBを構築しホスト側からリモート接続する

More than 1 year has passed since last update.

UbuntuにMariaDBをインストールし、ローカルのMacからVMのデータベースにリモート接続できるようにしたいと思います。

インストール

まずはMariaDBをインストールします。通常はこれ一発で動きます。

sudo apt-get install mariadb-server

私は運が良いので、いきなり下記のエラーが発生します。

E: Could not get lock /var/lib/apt/lists/lock - open (11: Resource temporarily unavailable)
E: Unable to lock directory /var/lib/apt/lists/

これは他のプロセスがaptを利用していることが原因のようps aux | grep apt | grep -v 'grep'でそのプロセスを確認できます。おかしなものがずっとプロセスを使っているならkillしても良さそうですが、私の環境では自動更新かなんかのか知らないものが勝手に動いていて、しばらくしたら消えるという謎の解決を遂げました。

リモートから接続するユーザーを作成する

UbuntuでDBサーバー(localhostのDBではない)を構築するのは初めてなのですが、どうやらデフォルトではUNIX_SOCKET Authentication Pluginというのが有効になっているらしく、早い話がrootでしかログインできない状態なのだそうです。実際にアプリケーションから利用するためのアカウントは別途追加していく必要があります。Redhat系に慣れているとこのあたり驚きましたが、安全でとても良いですね。

まずはrootでMySQLに接続します。

sudo mysql -u root

次にdevユーザーを作成し、今回は開発用DBなので全権限を与えつつ、ローカルマシンのネットワーク(この例ではVirtualBoxのネットワーク)からリモート接続できる権限を付与します。

CREATE USER dev IDENTIFIED BY 'dev';
GRANT ALL PRIVILEGES ON *.* TO dev@'192.168.33.%' identified by 'dev' with grant option;

そして、ここがポイントなのですがCentOSの時はファイアーウォールでポート解放を行っていたのだが、Ubuntuでは特にファイアーウォールはデフォルトでは動いていないのに接続できず。しばらく調べてみたらどうやらbind-addressを設定ファイルに追加する必要があるようです

sudo vi /etc/mysql/my.cnf

以下の項目を追加します。

[mysqld]
bind-address = ::

そして再起動します。

sudo service mysql restart

ホスト側から以下のようにして接続できるはずです。

mysql -h dev-db.local -udev -pdev