Debian GNU/Linux 7 Wheezy サーバに DB サーバ MariaDB をソースをビルドしてインストールする方法についての記録です。

当然、MySQL と同様な方法でインストールできます。

0. 前提条件

  • Debian GNU/Linux 7.1.0 での作業を想定。
  • 接続元のマシンは Linux Mint 14(64bit) を想定。
  • インストールする MariaDB のバージョンは 5.5.33a(当記事執筆時点最新安定版)を想定。
  • MariaDB とは言っても中身は MySQL が元になっているので、各所で “mysql” のキーワードを使用する。
  • データディレクトリは “/var/lib/mysql” ディレクトリ配下とする。

1. 必要パッケージインストール

ビルド時に configure ではなく cmake を使用するので、未インストールならインストールしておく。
また、bison, g++, libncurses5-dev 等も未インストールならインストールしておく。(コンパイルオプションによって異なるかもしれないが、実際に cmake してみてエラー・警告メッセージを確認するのもよい)

1
# aptitude -y install cmake bison g++ libncurses5-dev

2. アーカイブダウンロード&展開

インストールに使用するアーカイブファイル “mariadb-5.5.33a.tar.gz” を別途「MariaDB 5.5.33a Stable - MariaDB」からダウンロードし適当なディレクトリへ解凍する。

1
# tar zxvf mariadb-5.5.33a.tar.gz

3. ビルド&インストール

cmake, make, make install でビルド・インストールする。(時間がかかる)
取り急ぎ、コンパイルオプションは以下のようにした。

1
2
3
4
5
6
7
8
9
10
11
# cd mariadb-5.5.33a
# cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/var/lib/mysql \
-DMYSQL_UNIX_ADDR=/var/run/mysqld/mysqld.sock \
-DENABLED_LOCAL_INFILE=1 \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1
# make
# make install
  • CMAKE_INSTALL_PREFIX : インストール先ディレクトリ (Default: /usr/local/mysql)
  • MYSQL_DATADIR : デフォルトのデータディレクトリ
  • MYSQL_UNIX_ADDR : ソケットファイルのフルパス (Default: /tmp/mysql.sock)
  • ENABLED_LOCAL_INFILE : LOAD DATA INFILE を有効にするか(Default: OFF)
  • DEFAULT_CHARSET : デフォルトの文字セット(Default: latin1)
  • DEFAULT_COLLATION : デフォルトの照合順序(Default: latin1_swedish_ci)
  • WITH_EXTRA_CHARSETS : 追加の文字セット(Default: all)
  • WITH_INNOBASE_STORAGE_ENGINE: InnoDB ストレージ エンジンを有効にする

何かパッケージが不足していてパッケージインストール後に再度ビルドを行う場合は、CMakeCache.txt を削除してから cmake を行う。

4. ユーザ・グループ作成

MySQL 用のユーザとグループを作成する。

1
2
# groupadd mysql
# useradd -r -g mysql mysql

5. データディレクトリ作成

データディレクトリが無ければ作成し、所有者・グループを設定しておく。

1
2
# mkdir /var/lib/mysql
# chown -R mysql. /var/lib/mysql

6. ログディレクトリ作成

ログ用ディレクトリを作成し、所有者・グループを設定しておく。

1
2
# mkdir /var/log/mysql
# chown -R mysql. /var/log/mysql/

7. ソケット・PIDディレクトリ作成

ソケット・プロセスID用ディレクトリの所有者・グループを設定する。

1
2
# mkdir /var/run/mysqld
# chown -R mysql. /var/run/mysqld

8. 設定ファイル編集

“/usr/local/mysql/support-files/” ディレクトリ内にあるデフォルトの設定ファイルの中から自分の環境に近いものを “/etc/mysql/my.cnf” にコピーするなどして、適当に編集する。
以下は当方の例。(ストレージエンジンに InnoDB を利用することを想定している)
実際は自分の環境に合わせてチューニングする。

1
# cp /usr/local/mysql/support-files/my-huge.cnf /etc/mysql/my.cnf

File: /etc/my.cnf

 1 [client]
 2 port   = 3306
 3 socket = /var/run/mysqld/mysqld.sock
 4 default-character-set = utf8
 5 
 6 [mysqld_safe]
 7 socket = /var/run/mysqld/mysqld.sock
 8 nice   = 0
 9 
10 [mysqld]
11 # ==== Basic
12 sql_mode             = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
13 user                 = mysql
14 pid-file             = /var/run/mysqld/mysqld.pid
15 socket               = /var/run/mysqld/mysqld.sock
16 port                 = 3306
17 basedir              = /usr/local/mysql
18 datadir              = /var/lib/mysql
19 tmpdir               = /tmp
20 lc-messages-dir      = /usr/local/mysql/share
21 character-set-server = utf8
22 skip-external-locking
23 skip-character-set-client-handshake
24 
25 # ==== Buffer
26 key_buffer              = 256M
27 max_allowed_packet      = 1M
28 sort_buffer_size        = 1M
29 read_buffer_size        = 1M
30 myisam_sort_buffer_size = 64M
31 thread_stack            = 192K
32 thread_cache_size       = 8
33 query_cache_limit       = 1M
34 query_cache_size        = 16M
35 tmp_table_size          = 16M
36 max_heap_table_size     = 16M
37 thread_concurrency      = 2
38 
39 # ==== Binary Log
40 log-bin          = mysql-bin  # データインポート時はコメントアウト
41 expire_logs_days = 10
42 max_binlog_size  = 100M
43 
44 # ==== Connection
45 #bind-address       = 127.0.0.1
46 max_connections    = 100
47 max_connect_errors = 100
48 
49 # ==== MyISAM
50 myisam-recover = BACKUP
51 
52 # ==== InnoDB
53 innodb_data_file_path           = ibdata1:1G:autoextend
54 innodb_file_per_table
55 innodb_autoextend_increment     = 64
56 innodb_buffer_pool_size         = 512M  # 768M
57 innodb_additional_mem_pool_size = 20M
58 innodb_write_io_threads         = 8
59 innodb_read_io_threads          = 8
60 innodb_log_buffer_size          = 8M   # 通常時:8程度, データインポート時:32程度
61 innodb_log_file_size            = 128M  # 256M
62 innodb_flush_log_at_trx_commit  = 1  # 通常時:1(デフォルト), データインポート時:2 or 0
63 #skip_innodb_doublewrite  # ダブルライトバッファへの書き込みをスキップ(通常時は指定しない。データインポート時のみ)
64 
65 # ==== Log
66 log-error           = /var/log/mysql/error.log
67 #general_log_file    = /var/log/mysql/mysql.log  # デバッグ時に有効化
68 #general_log         = 1                         # デバッグ時に有効化
69 #slow_query_log_file = /var/log/mysql/slow.log   # デバッグ時に有効化
70 #slow_query_log      = 1                         # デバッグ時に有効化
71 
72 [mysqldump]
73 quick
74 quote-names
75 max_allowed_packet = 16M
76 
77 [mysql]
78 no-auto-rehash
79 
80 [isamchk]
81 key_buffer = 16M
82 
83 [myisamchk]
84 key_buffer_size = 128M
85 sort_buffer_size = 128M
86 read_buffer = 2M
87 write_buffer = 2M
88 
89 [mysqlhotcopy]
90 interactive-timeout

【注意】
設定ファイルが複数存在する場合の読み込み順序は以下のようにして確認できる。存在する設定ファイルを順に全て読み込み、後に読み込んだ設定が有効になることに留意しておく。
“/etc/my.cnf” の設定を使用したい場合は、他の設定ファイルは読み込まないように削除(もしくは拡張子を “.cnf” 以外で終わるようにリネーム)しておくこと。

1
2
3
# /usr/local/mysql/bin/mysql --help | grep -A1 "Default options"
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf

9. MySQL 初期化

MySQL データを初期化し、システムテーブルを作成する。

1
2
# cd /usr/local/mysql
# scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/var/lib/mysql --defaults-file=/etc/mysql/my.cnf

10. 起動スクリプト準備

起動用スクリプトを準備する。(用意されているスクリプトをコピーする)
場合によっては編集することになるが、my.cnfbasedir, datadir 等を指定しているので、ここでは特に編集はしない。

1
# cp support-files/mysql.server /etc/init.d/mysqld

11. 起動・再起動・ステータス確認・停止のテスト

起動・再起動・ステータス確認・停止ができるか確認する。

1
2
3
4
# /etc/init.d/mysqld start
# /etc/init.d/mysqld restart
# /etc/init.d/mysqld status
# /etc/init.d/mysqld stop

もちろん、”service” コマンドでも起動・再起動・ステータス確認・停止ができるはずです。

12. 環境変数 PATH の設定

mysql コマンドへのパスを設定するために .bash_profile の最終行に以下の記述を追加する。

File: /etc/profile

1 export PATH=/usr/local/mysql/bin:$PATH

マシンを再起動すれば PATH が有効化するが、直ちに有効化したければ以下のようにする。

1
# source /etc/profile

13. MySQL セキュリティ設定

root のバスワード設定、テストDB削除等を行う。
(root のパスワードのみ設定して、後はデフォルト(エンター押下))

1
# mysql_secure_installation

14. 動作確認

MySQL サーバにログインしてみる。

1
2
3
4
5
6
7
8
9
10
11
# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 11
Server version: 5.5.33a-MariaDB-log Source distribution

Copyright (c) 2000, 2013, Oracle, Monty Program Ab and others.

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

MariaDB [(none)]>

その他、実際にデータベースを作成してみたりしてみる。

15. 自動起動設定

マシン起動時に自動で MariaDB を起動させるには以下のようにする。(sysv-rc-conf 導入済みの場合)

1
2
3
# sysv-rc-conf mysqld on
# sysv-rc-conf --list | grep mysqld
mysqld       0:off      1:off   2:on    3:on    4:on    5:on    6:off

もしくは、以下のようにする。

1
# insserv -d mysqld

逆に、自動起動しないようにするには以下のようにする。(sysv-rc-conf 導入済みの場合)

1
2
3
# sysv-rc-conf mysqld off
# sysv-rc-conf --list | grep mysqld
mysqld       0:off      1:off   2:off   3:off   4:off   5:off   6:off

あるいは、

1
# insserv -r mysqld

16. ポート開放

外部から MariaDB サーバに直接アクセスする場合(GUI ツールを使用する場合等)、ポート(TCP:3306)を開放する必要があある。
iptables の場合、 “/etc/iptables/rules.v4” に以下を追加する。

File: /etc/iptables/rules.v4

1 # TCP3306番ポート(MariaDB)へのアクセスを許可
2 -A INPUT -p tcp --dport 3306 -j ACCEPT

そして、iptables を再起動する。

1
# /etc/init.d/iptables-persistent restart

17. 参考サイト


以上。