MariaDBのインストール

数多のWebアプリケーションで利用されているリレーショナル・データベース管理システムであるMariaDBをソースコードからインストールする。

MariaDBはMySQLから派生したソフトであり,MySQLとの互換性を重視されているので,ほとんどの場面でMySQLの代わりに使うことができる。

インストール手順

インストール情報
項目 説明
配布元 MariaDB.org – Supporting continuity and open collaboration
リポジトリー MariaDB/server:
MariaDB server is a community developed fork of MySQL server. Started
by core members of the original MySQL team, MariaDB actively works with
outside developers to deliver the most featureful, stable, and sanely
licensed open SQL server in the industry.
手順
依存情報 Build Environment Setup for Linux – MariaDB Knowledge Base
依存先 (必須) GNU Make 3.75+, CMake, GCC 3.4.6+, libncurses, zlib, libevent, gnutls or openssl
依存先 (任意)
依存元 Nextcloud, Tiny Tiny RSS, GNU Social
インストールコマンド
sh -eux <<-"EOT"
LOCAL=~/.local J=$(grep -cs '^processor' /proc/cpuinfo || echo 2)
PKG=mariadb VER=10.2.23 TAG=$PKG-$VER
mkdir -p "$LOCAL/src"
cd "$LOCAL/src"

if command -v git >/dev/null; then
  [ -e $PKG ] || git clone --depth 1 git://github.com/MariaDB/server $PKG
  cd $PKG
  git fetch --depth 1 origin tag $TAG
  git checkout -f $TAG
  git submodule update --init --depth 999 --progress
  git clean -dfX
else
  [ -e $PKG-$VER ] || wget http://ftp.yz.yamagata-u.ac.jp/pub/dbms/$PKG/$PKG-$VER/source/$PKG-$VER.tar.gz
  tar -xf $PKG-$VER.*
  cd $PKG-$VER
  make -kj $J clean distclean || :
fi

cmake -DCMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER/mysql" -DBUILD_CONFIG=mysql_release \
  -DCURSES_INCLUDE_PATH="$LOCAL/include" -DCURSES_LIBRARY="$LOCAL/lib" -DWITH_JEMALLOC=AUTO .
make -j $J
make -j $J test
make -j $J install

cd "$LOCAL/stow"
echo $PKG-[0-9]* | xargs -n 1 stow --ignore=dir -D
stow --ignore=dir $PKG-$VER
EOT
インストール例
日付 バージョン OS 依存関係
2019-05-03 10.2.23 Ubuntu 18.04 GNU Make 4.2.1, GCC 7.4.0, CMake 3.10.2, libaio 0.3.111, ncurses 6.1, zlib 1.2.11, OpenSSL 1.1.1a

マニュアルではlibevent必須だが,MariaDB 10.2.23ではなくてもビルドできた。

インストール先を指定しない場合,/usr/localにMariaDBはインストールされる。MariaDBやMySQLは巨大なパッケージであり,ディレクトリー構成が他のパッケージと異なる。そのため,他のパッケージと分離するために,cmakeのオプションで-DCMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER/mysql"を指定し,mysqlディレクトリーにインストールする。

makeの実行に約40分かかった。MariaDBはパッケージのサイズも約80 MBと大きいので,時間に余裕があるときにインストールするとよいだろう。

インストール後,パスを通すために以下の設定を~/.profile~/.bashrcに記述して読み込ませておく。

## MySQL
export MYSQL_HOME="$LOCAL/mysql"
if [ -d "$MYSQL_HOME" ]; then
  PATH="$MYSQL_HOME/bin:$PATH"
  CPATH="$MYSQL_HOME/include:$CPATH"
  LD_LIBRARY_PATH="$MYSQL_HOME/lib:$LD_LIBRARY_PATH"
  LIBRARY_PATH="$LD_LIBRARY_PATH"
  MANPATH="$MYSQL_HOME/man:$MANPATH"
MANDATORY_MANPATH="$MANPATH"
PKG_CONFIG_PATH="$MYSQL_HOME/lib/pkgconfig:$MYSQL_HOME/share/pkgconfig:$PKG_CONFIG_PATH"
ACLOCAL_PATH="$MYSQL_HOME/share/aclocal:$ACLOCAL_PATH"
export PATH CPATH LD_LIBRARY_PATH MANPATH MANDATORY_MANPATH PKG_CONFIG_PATH ACLOCAL_PATH
fi

インストール後は起動設定を行う。

git submodule update

cmakeの実行時にgit submodule updateが実行され,submoduleがダウンロードされる。

ただし,そのままやるとダウンロード量が多いので,事前に--depth 999を指定してダウンロードする。

なお,--depth 99などダウンロード範囲が少ないと,git submodule update実行時に以下のエラーが出るので注意する。

From https://github.com/MariaDB/mariadb-connector-c
 * branch            2c5aebb3bc724c1663c481ba2fedde00ab494fa4 -> FETCH_HEAD
Submodule path 'libmariadb': checked out '2c5aebb3bc724c1663c481ba2fedde00ab494fa4'
remote: Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
error: Server does not allow request for unadvertised object 926f3a78a64b327475ee6c60b6c8ab4f34253204
Fetched in submodule path 'storage/rocksdb/rocksdb', but it did not contain 926f3a78a64b327475ee6c60b6c8ab4f34253204. Direct fetching of that commit failed.

-DBUILD_CONFIG=mysql_release

MariaDB 10.2.23のcmake実行時に,-DBUILD_CONFIG=mysql_releaseを指定すると,リリースビルドとなる。ただし,このオプションをつけるとcmake実行時に以下のエラーがでて,追加の依存関係としてaioを要求された。

-- Running cmake version 3.10.3
-- Looking for include file libaio.h
-- Looking for include file libaio.h - not found
-- Looking for io_queue_init in aio
-- Looking for io_queue_init in aio - not found
CMake Error at cmake/build_configurations/mysql_release.cmake:134 (MESSAGE):


          aio is required on Linux, you need to install the required library:



            Debian/Ubuntu:              apt-get install libaio-dev
            RedHat/Fedora/Oracle Linux: yum install libaio-devel
            SuSE:                       zypper install libaio-devel



          If you really do not want it, pass -DIGNORE_AIO_CHECK to cmake.

Call Stack (most recent call first):
  CMakeLists.txt:97 (INCLUDE)

-DBUILD_CONFIG=mysql_releaseを指定しなければ,このエラーは起きなかった。libaioは公式文書で明記されている依存関係には入っていないが,Linuxでの追加の依存関係のようだ。libaioをインストールすればこのエラーは解消された。

-DCURSES_INCLUDE_PATH="$LOCAL/include" -DCURSES_LIBRARY="$LOCAL/lib"

当初は,以下のコマンドでcmake実行時にインストール先しか指定していなかった。

cmake -DCMAKE_INSTALL_PREFIX="$LOCAL/stow/$PKG-$VER" .

しかし,このコマンドを実行すると,MariaDB 10.2.23では以下のエラーが出てcmakeが失敗してしまった。

-- Could NOT find Curses (missing: CURSES_LIBRARY CURSES_INCLUDE_PATH) 
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.
Call Stack (most recent call first):
  cmake/readline.cmake:173 (FIND_CURSES)
  CMakeLists.txt:330 (MYSQL_CHECK_READLINE)


-- Configuring incomplete, errors occurred!
See also "/home/senooken/.local/src/mariadb-10.2.14/build/CMakeFiles/CMakeOutput.log".
See also "/home/senooken/.local/src/mariadb-10.2.14/build/CMakeFiles/CMakeError.log".

エラーメッセージにある通り,以下のオプションで自分で明示的にncurseのライブラリーとヘッダーのパスを指定する必要があるようだ。

-DCURSES_LIBRARY="$LOCAL/lib" -DCURSES_INCLUDE_PATH="$LOCAL/include"

-DWITH_JEMALLOC=AUTO

MariaDB 10.2.23のcmake実行時に以下のエラーが出てしまった。

== Configuring MariaDB Connector/C
CMake Error at cmake/jemalloc.cmake:38 (MESSAGE):
  jemalloc is not found
Call Stack (most recent call first):
  storage/tokudb/CMakeLists.txt:48 (CHECK_JEMALLOC)

jemallocが欠如しておりエラーが出ているようだ。しかし,jemallocをインストールして再び挑戦しても同じエラーが出た

cmake/jemalloc.cmakeの冒頭でWITH_JEMALLOC変数をチェックしている。WITH_JEMALLOCの値は以下のコマンドで確認できる。

cmake -LA | grep WITH_JEMALLOC
WITH_JEMALLOC:STRING=static

デフォルトではstaticになっている。staticだと,jemallocのライブラリー名としてjemalloc_picを探し,なければエラーになるようだ。

そこで,cmakeのオプションに-DWITH_JEMALLOC=AUTOに指定する。static以外のYES/NO/AUTOから任意の値を指定することで,エラーを回避した。

make test (ctest) の失敗

MariaDB 10.2.23のmake test (ctest) が失敗した。

The following tests FAILED:
         17 - aes (Failed)
         25 - conc336 (Failed)
         26 - bulk1 (Failed)
         27 - performance (Failed)
         28 - basic-t (Failed)
         29 - fetch (Failed)
         30 - charset (Failed)
         31 - logs (Failed)
         32 - cursor (Failed)
         33 - errors (Failed)
         34 - view (Failed)
         35 - ps (Failed)
         36 - ps_bugs (Failed)
         37 - sp (Failed)
         38 - result (Failed)
         39 - connection (Failed)
         40 - misc (Failed)
         41 - ps_new (Failed)
         42 - thread (Failed)
         43 - features-10_2 (Failed)
         44 - dyncol (Failed)
         45 - async (Failed)
Errors while running CTest
make: *** [Makefile:107: test] Error 8

解決できる気がしなかったので,遺憾ながらテストに失敗した状態でmake installした。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です