[Dd]enzow(ill)? with DB and Python

DBとか資格とかPythonとかの話をつらつらと

MySQL 5.7をroot権限を使わずにソースからコンパイル

仕事ではPostgreSQLを中心に触ってますが、検証する際はバージョンごとにOSユーザを分けてインストールしています。 同一環境にPostgreSQLを複数入れるときに/usr/opt配下を使ってしまうと思わぬバッティングが起きてしまうからです。

さて、MySQLを触り始めようと思ったときに手順を調べてみるとrpmからいれる手順が多いですが、これは/usr等を使うため 複数バージョンを入れる際は具合が悪いです。ソースからのコンパイル方法も調べてみましたが、結構/usr配下にシンボリックリンクを 貼ったりしていて、あまり思った手順が見つからなかったのでまとめておきます。

対象環境

今回は以下の環境で実施しました。

ソースのDL

MySQLのソースは以下のOracle社のサイトからダウンロードできます。

https://dev.mysql.com/downloads/mysql/

バージョンがわかってるのであればさくっとwgetする方法が楽ですね。

$ wget http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.17.tar.gz

依存パッケージの準備

ソースをコンパイルする前に、必要になるOSパッケージを入手しておきます。そもそもOSに何が入っているかにもよりますが 少なくともcmakelibncurses5-devが必要なようです。

$ sudo apt-get install cmake
$ sudo apt-get install libncurses5-dev

関連ディレクトリの作成

MySQLのバイナリをインストールする先をHOMEディレクトリ配下に作成しておきます。

$ mkdir -p ~/mysqlHome

コンパイルの実行

コンパイルはざっくりと以下の流れになります。

最近のMySQLコンパイル時にboostが必要らしいですが、cmake時にダウンロードしてくれる オプション(-DDOWNLOAD_BOOST=1, -DWITH_BOOST)がありますのでこれを使います。

また、cmake時に-DCMAKE_INSTALL_PREFIXでインストール先を指定します。ここをHOME配下にすれば 複数のMySQLをいれても競合せずに済みます。

$ cd <MySQLのソースの展開先>/
$ cmake -DCMAKE_INSTALL_PREFIX=/home/denzow/mysqlHome \
-DDOWNLOAD_BOOST=1 -DWITH_BOOST=/home/denzow/boost -DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_INNOBASE_STORAGE_ENGINE=1

無事に終わったら、あとは以下を実行すれば/home/denzow/mysqlHome配下にMySQLのバイナリが配置されます。

$ make && make install

PostgreSQLと比べるとえらく時間がかかるのでCPUリソースに余裕があるなら-j4をmake のオプションとして指定し 4並列でコンパイルするのもいいでしょう。

データベースの初期化

インストールが完了したので、データベースを初期化します。ついでにPATHも切っておきましょう。

$ export PATH=$HOME/mysqlHome/bin:$PATH

.bashrc.bash_profileに書いとけば楽でしょう。

さてDBを初期化します。

$ mysqld --no-defaults --user=denzow --initialize

これで~/.mysqlHome/data配下に初期化されたDB関連ファイルが配置されます。なお初期化時にMySQLroot@localhostユーザの初期パスワードが標準出力に表示されるのでメモしておきましょう。

denzow@denzow-ubuntu:~/work/mysql/mysql-5.7.17$ mysqld --no-defaults --user=denzow --initialize
:
2017-09-02T15:31:46.084978Z 1 [Note] A temporary password is generated for root@localhost: XXXXXXX <--初期パスワード

rootユーザのパスワード再設定

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

  • mysqldの起動
$ mysqld &
  • DBへのログインとパスワード再設定
$ mysql -uroot -p
mysql> alter user 'root'@'localhost' identified by 'NEW PASSWORD';

これで一通り、MySQLを使える準備ができたので色々と触っていこうと思います。