インストール - MariaDB

提供:MochiuWiki - SUSE, Electronic Circuit, PCB
ナビゲーションに移動 検索に移動

概要

データベースサーバは、サーバ上のデータベースをクライアントから操作できるようにするためのサーバである。
ここでは、RDBのデータベースサーバであるMariaDB 10.5.2(2020/4/26現在の最新版)を例に挙げる。

RHELおよびSUSEでは、MariaDBのリポジトリを追加して、MariaDBをインストールすることを推奨する。

また、インストールの詳細に関しては、こちらの公式Webサイトを参照すること。


MariaDBのインストール

RHEL

リポジトリを追加してインストール(推奨)

MariaDBのリポジトリを追加するために、/etc/yum.repos.dディレクトリにMariaDB.repoファイルを作成する。
MariaDB.repoファイルには、リポジトリにあるパッケージのデジタル署名を検証するために使用されるGPG公開鍵を、自動的にフェッチするgpgkey行を含む。
これにより、dnf、rpmユーティリティは、インストールするパッケージの整合性を検証できる。

sudo vi /etc/yum.repos.d/MariaDB.repo


# /etc/yum.repos.d/MariaDB.repoファイル
[mariadb]
name = MariaDB
baseurl = https://mirror.mariadb.org/yum/<MariaDBのバージョン>/rhel/<RHELのバージョン>/x86_64/
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1


初めて、MariaDBのリポジトリからインストールする場合、GPG公開鍵をインポートするように要求される。
rpmユーティリティを使用して、このGPG公開鍵を手動でインポートする。

sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB


リポジトリの追加および設定を行った後、以下のコマンドを実行してMariaDBをインストールする。
(追加したリポジトリには、MariaDBサーバ / クライアントの他に、ユーティリティやライブラリ、プラグイン等、関連するソフトウェアも含まれる)

sudo dnf install MariaDB-server MariaDB-client galera-4 MariaDB-shared MariaDB-backup MariaDB-common


正常にインストールされているか確認する。

mariadb --version


パッケージ管理システムからインストール(非推奨)

MariaDBをインストールするため、以下のコマンドを実行する。

sudo dnf install mariadb-server


正常にインストールされているか確認する。

mariadb --version


SUSE

リポジトリを追加してインストール(推奨)

次のコマンドを実行して、MariaDBのリポジトリを追加する。

# SLEの場合
sudo zypper addrepo --gpgcheck --refresh https://yum.mariadb.org/<MariaDBのバージョン>/sles/<SLEのバージョン>/x86_64/ MariaDB

# openSUSEの場合
sudo zypper addrepo --gpgcheck --refresh https://yum.mariadb.org/<MariaDBのバージョン>/opensuse/<openSUSEのバージョン>/x86_64/ MariaDB


次に、リポジトリのGPGキーを取得する。

sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
sudo zypper --gpg-auto-import-keys refresh


リポジトリを追加および設定を行った後、以下のコマンドを実行してMariaDBをインストールする。
(追加したリポジトリには、MariaDBサーバ / クライアントの他に、ユーティリティやライブラリ、プラグイン等、関連するソフトウェアも含まれる)

sudo zypper install MariaDB-server MariaDB-client galera-4 MariaDB-shared MariaDB-backup MariaDB-common


ソースコードからインストール

MariaDBのビルドに必要なライブラリをダウンロードする。

sudo zypper install gcc gcc-c++ make cmake bison ncurses-devel  \
                    libcurl-devel zlib-devel readline-devel pcre-devel pcre2-devel libopenssl-devel libopenssl-1_1-devel libevent-devel \
                    liblz4-devel lzo-devel lzlib-devel lzma-sdk-devel libxml2-devel snappy-devel libpmem-devel judy-devel libnotify-devel \
                    fmt-devel unixODBC-devel libnuma-devel tcpd-devel systemd-devel libzstd-devel gssntlmssp-devel libgssglue-devel \
                    libboost_system1_66_0 libboost_thread1_66_0 libboost_headers1_66_0-devel libboost_system1_66_0-devel \
                    libboost_filesystem1_66_0-devel libboost_thread1_66_0-devel libboost_regex1_66_0-devel libboost_date_time1_66_0-devel \
                    libboost_atomic1_66_0-devel libboost_chrono1_66_0-devel


MariaDBの公式Webサイトにアクセスして、ソースコードをダウンロードする。
ダウンロードしたファイルを解凍する。

tar xf mariadb-<バージョン>
cd mariadb-<バージョン>


または、MariaDBのGithubからソースコードをダウンロードする。

git clone --depth 1 https://github.com/MariaDB/server.git mariadb
# または
git clone --depth 1 https://github.com/MariaDB/server.git -b <ブランチ名  例: 11.4> mariadb

cd mariadb
git submodule update --init --recursive


ビルドディレクトリを作成する。

mkdir build-mariadb && cd build-mariadb


MariaDBをビルドおよびインストールする。

export INSTALLDIR=<MySQLのインストールディレクトリ>

cmake .. \
      -DCMAKE_INSTALL_PREFIX=$INSTALLDIR \
      -DCMAKE_BUILD_TYPE=Release \
      -DDEFAULT_CHARSET=utf8mb4 \               # デフォルトの文字セット(デフォルト : latin1)
      -DDEFAULT_COLLATION=utf8mb4_general_ci \  # デフォルトの照合順序(デフォルト : latin1_swedish_ci)
      -DWITH_EXTRA_CHARSETS=all \               # 追加の文字セット(デフォルト : all)
      -DDEFAULT_SYSCONFDIR=$INSTALLDIR \        # my.cnfファイルの場所
      -DDEFAULT_BASEDIR=$INSTALLDIR \
      -DMYSQL_DATADIR=$INSTALLDIR/data \
      -DMYSQL_UNIX_ADDR=$INSTALLDIR/tmp/mysql.sock \     # ソケットファイルのパス (デフォルト : /tmp/mysql.sock)
      -DWITH_SYSTEMD=yes \                               # Systemdサービスを使用する場合
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \                 # InnoDBストレージエンジンを有効にする
      -DENABLED_LOCAL_INFILE=1 \                         # LOAD DATA INFILEを有効にする(デフォルト : 無効)
      -DWITH_BOOST=/<Boostのインストールディレクトリ>/include \  # 手動でBoostをインストールしている場合は指定する
      -DCMAKE_C_COMPILER=<gcc実行ファイルのパス> \            # 任意のgcc実行ファイルを指定する場合
      -DCMAKE_CXX_COMPILER=<g++実行ファイルのパス> \          # 任意のg++実行ファイルを指定する場合
      -DWITH_VALGRIND=ON                                 # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである)

make -j $(nproc)
make install

# または

export INSTALLDIR=<MySQLのインストールディレクトリ>

cmake .. -G Ninja \
      -DCMAKE_INSTALL_PREFIX=$INSTALLDIR \
      -DCMAKE_BUILD_TYPE=Release \
      -DDEFAULT_CHARSET=utf8mb4 \               # デフォルトの文字セット(デフォルト : latin1)
      -DDEFAULT_COLLATION=utf8mb4_general_ci \  # デフォルトの照合順序(デフォルト : latin1_swedish_ci)
      -DWITH_EXTRA_CHARSETS=all \               # 追加の文字セット(デフォルト : all)
      -DDEFAULT_SYSCONFDIR=$INSTALLDIR \        # my.cnfファイルの場所
      -DDEFAULT_BASEDIR=$INSTALLDIR \
      -DMYSQL_DATADIR=$INSTALLDIR/data \
      -DMYSQL_UNIX_ADDR=$INSTALLDIR/tmp/mysql.sock \     # ソケットファイルのパス (デフォルト : /tmp/mysql.sock)
      -DWITH_SYSTEMD=yes \                               # Systemdサービスを使用する場合
      -DWITH_INNOBASE_STORAGE_ENGINE=1 \                 # InnoDBストレージエンジンを有効にする
      -DENABLED_LOCAL_INFILE=1 \                         # LOAD DATA INFILEを有効にする(デフォルト : 無効)
      -DWITH_BOOST=/<Boostのインストールディレクトリ>/include \  # 手動でBoostをインストールしている場合は指定する
      -DCMAKE_C_COMPILER=<gcc実行ファイルのパス> \            # 任意のgcc実行ファイルを指定する場合
      -DCMAKE_CXX_COMPILER=<g++実行ファイルのパス> \          # 任意のg++実行ファイルを指定する場合
      -DWITH_VALGRIND=ON                                 # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである)

ninja -C .
ninja -C . install


MariaDBのインストールディレクトリに、dataディレクトリ、tmpディレクトリ、logsディレクトリを作成する。

# ディレクトリを作成
cd <MariaDBのインストールディレクトリ>
mkdir data tmp logs


MariaDBのインストールディレクトリに、次のセクションであるmy.cnfファイルのテンプレートに記述している内容のmy.cnfファイルを作成する。

vi /<MariaDBのインストールディレクトリ>/my.cnf


作成したmy.cnfファイルを、以下のように編集する。

cd <MariaDBのインストールディレクトリ>

# my.cnf : ポートの変更
sed -i -e "s/PORT_NO/<任意のポート番号  例. 53306>/g" my.cnf

# my.cnfc: ユーザ名の変更
sed -i -e "s/USER_NAME/<任意のユーザ名  例. mysql>/g" my.cnf

# my.cnfm: MySQLのデータディレクトリの変更
sed -i -e "s/MYSQL_DATA_BASE_DIR/<MariaDBのインストールディレクトリ  例. \/home\/user\/InstallSoftware\/MariaDB>/g" /my.cnf

# my.cnf : 文字コードの変更
sed -i -e "s/CHARACTER_SET/utf8mb4/g" my.cnf
sed -i -e "s/# collation-server = utf8mb4_bin/collation-server = utf8mb4_bin/g" my.cnf

# my.cnff: パスワードの有効期限を無期限に延長する場合
sed -i -e "s/# default_password_lifetime = 0/default_password_lifetime = 0/g" my.cnf

# my.cnf.: パスワード認証をレガシーに設定する場合
sed -i -e "s/# default_authentication_plugin = mysql_native_password/default_authentication_plugin = mysql_native_password/g" my.cnf



MariaDBの初期DBファイルを作成する。

sudo /<MariaDBのインストールディレクトリ>/scripts/mysql_install_db --user=<my.cnfファイルのuserキーの値(ユーザ名)  例. mysql>  


MariaDBを起動する。

/<MariaDBのインストールディレクトリ>/support-files/mysql.server start


上記のコマンドを実行した時、以下に示すようなエラーが出力される場合がある。

Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded


この時、/var/lib/mysqlディレクトリにあるib_logfile0ファイル、ib_logfile1ファイル、aria_log_controlファイルを削除した後、再度、MariaDBを起動する。

sudo rm /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/aria_log_control
# または
sudo rm -r /var/lib/mysql/*


/<MariaDBのインストールディレクトリ>/scripts/mysql_install_db --user=<my.cnfファイルのuserキーの値(ユーザ名)  例. mysql>
/<MariaDBのインストールディレクトリ>/support-files/mysql.server start


MariaDBの初期設定を行う。
MariaDBの初期状態では、rootユーザにパスワードが無いため、ここでrootユーザのパスワード等の設定を行う。

sudo /<MariaDBのインストールディレクトリ>/bin/mysql_secure_installation

Enter current password for root (enter for none): (何も入力せず[Enter]キーを押下)
Set root password? [Y/n] y (rootユーザのパスワードを設定する)
New password: (新しいパスワードを入力)
Re-enter new password: (新しいパスワードを再入力)
Remove anonymous users? [Y/n] y (匿名ユーザを削除する)
Disallow root login remotely? [Y/n] y (rootユーザでのリモートログインは許可しない)
Remove test database and access to it? [Y/n]y (テスト用データベースを削除する)
Reload privilege tables now? [Y/n]y (設定を反映させる)


管理者ユーザを作成する。

# rootユーザでログインする
/<MariaDBのインストールディレクトリ>/bin/mysql -u root -p

# 必要ならば、ユーザの一覧を確認する
SELECT user, host, plugin FROM mysql.user;

# 管理者ユーザを作成する
CREATE USER '<ユーザ名>'@'%' IDENTIFIED BY '<パスワード>';

# 管理者ユーザに権限を付与する
GRANT CREATE ON *.* TO '<ユーザ名>'@'%';

# もし、rootユーザのパスワードを再変更する場合
ALTER USER 'root'@'localhost' IDENTIFIED BY '<パスワード>';

# 設定を反映する
FLUSH PRIVILEGES;

# ログアウトする
exit


Mariadbを停止する。

/<MariaDBのインストールディレクトリ>/support-files/mysql.server stop


MariaDBのSystemdサービスファイルを、/etc/systemd/systemディレクトリにコピーする。

sudo cp /<MariaDBのインストールディレクトリ>/support-files/systemd/mariadb.service  /etc/systemd/system


Systemdサービスファイルを更新する。

sudo systemctl daemon-reload


MariaDBを起動する。

sudo systemctl start mariadb.service


パッケージ管理システムからインストール(非推奨)

MariaDBをインストールするため、以下のコマンドを実行する。

sudo zypper install mariadb mariadb-tools


正常にインストールされているか確認する。

mariadb --version



my.cnfファイルのテンプレート

my.cnfファイルのテンプレートを以下に記述する。

[mysqld]
port      = PORT_NO
user      = USER_NAME
basedir   = MYSQL_DATA_BASE_DIR
datadir   = MYSQL_DATA_BASE_DIR/data
tmpdir    = MYSQL_DATA_BASE_DIR/tmp
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock
pid-file  = MYSQL_DATA_BASE_DIR/logs/mysqld.pid
log-error = MYSQL_DATA_BASE_DIR/logs/mysql_error.log
general_log_file = MYSQL_DATA_BASE_DIR/logs/mysql.log
general_log      = 1
long_query_time  = 2
log-queries-not-using-indexes

# Windows / Mac環境のみ
# lower_case_table_names = 2

# 文字コード
character-set-server = CHARACTER_SET

# utf8mb4を使う場合
# collation-server = utf8mb4_bin

# SQLモード
sql_mode  = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
#sql_mode  = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO

# SQL文の最大長
max_allowed_packet = 1M
# max_allowed_packet = 16MB

# MySQL 5.6.6 以降はデフォルトでON�: InnoDBをテーブルごとにファイルを分ける
innodb_file_per_table = 1

# MySQL 5.5 のみ : federated が無くなったので無効にする
# skip-federated

# MySQL 5.6 以降 : 暗黙のDEFAULT値を持つTIMESTAMPは非推奨
explicit_defaults_for_timestamp = 1

# MySQL 5.7.4 以降 : パスワードの有効期間を無期限に
# default_password_lifetime = 0

# MySQL 8.0 以降 : 以前までのパスワード認証にする
# default_authentication_plugin = mysql_native_password

# チューニング用
sort_buffer_size        = 512K
net_buffer_length       = 8K
read_buffer_size        = 256K
read_rnd_buffer_size    = 512K
myisam_sort_buffer_size = 8M

# innodb_buffer_pool_size = 128M
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M

# key_buffer = 16M
# table_cache = 64
# skip-locking

[mysql]
port      = PORT_NO
user      = USER_NAME
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock

[mysql.server]
port      = PORT_NO
user      = USER_NAME
basedir   = MYSQL_DATA_BASE_DIR
datadir   = MYSQL_DATA_BASE_DIR/data
tmpdir    = MYSQL_DATA_BASE_DIR/tmp
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock
pid-file  = MYSQL_DATA_BASE_DIR/logs/mysqld.pid
log-error = MYSQL_DATA_BASE_DIR/logs/mysql_error.log

[mysqld_safe]
port      = PORT_NO
user      = USER_NAME
basedir   = MYSQL_DATA_BASE_DIR
datadir   = MYSQL_DATA_BASE_DIR/data
tmpdir    = MYSQL_DATA_BASE_DIR/tmp
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock
pid-file  = MYSQL_DATA_BASE_DIR/logs/mysqld.pid
log-error = MYSQL_DATA_BASE_DIR/logs/mysql_error.log

[client-server]
port      = PORT_NO
user      = USER_NAME
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock

[client]
port      = PORT_NO
user      = USER_NAME
socket    = MYSQL_DATA_BASE_DIR/tmp/mysql.sock



MariaDBの設定

次に、MariaDBの設定ファイル(my.cnfファイル)を開いて、[mysqld]セクションに以下の設定を追記する。

sudo vi /etc/my.cnf

# /etc/my.cnfファイル
[mysqld]
character-set-server=utf8   # 追記


MariaDBの起動の設定を行う。

sudo systemctl enable mariadb
sudo systemctl start mariadb


MariaDBのセキュリティを向上させるため、以下のコマンドを実行する。

sudo mysql_secure_installation


下記の説明が表示されるので、翻訳付きで説明する。

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
注意: 実運用環境のすべての MariaDB サーバにおいて、当スクリプトのすべての処理を実行することが推奨されます!
各手順をよくお読みください!

In order to log into MariaDB to secure it, we'll need the current password for the root user.
If you've just installed MariaDB, and you haven't set the root password yet, the password will be blank,
so you should just press enter here.
MariaDBにログインしてそれを安全にするには、rootユーザの現在のパスワードが必要です。
MariaDBをインストールした直後でrootパスワードをまだセットしていない場合、パスワードは空白であるため、そのままEnterキーを押してください。

Enter current password for root (enter for none): 
root の現在のパスワードを入力してください(未設定ならEnter)
OK, successfully used password, moving on...
パスワード認証に成功しました、処理を続行しています...

Setting the root password ensures that nobody can log into the MariaDB root user without the proper authorisation.
root パスワードを設定することで、適切な認証なしではMariaDBのrootユーザにログインできなくなります。

You already have a root password set, so you can safely answer 'n'.
すでにrootパスワードがセットされているので、「n」と回答しても安全です。

Change the root password? [Y/n] n
root パスワードを変更しますか?
... skipping.
... スキップ

By default, a MariaDB installation has an anonymous user, allowing anyone to log into MariaDB without
having to have a user account created for them.
This is intended only for testing, and to make the installation go a bit smoother.
You should remove them before moving into a production environment.
既定で、MariaDBのインストール作業においては匿名ユーザを利用することができ、ユーザアカウントの作成なしで誰でもログインすることが
できます。これは、インストールを若干スムーズに行うために存在し、テストのみで利用することが想定されています。
これらは、実運用環境に移行する前に削除する必要があります。

Remove anonymous users? [Y/n] y
匿名ユーザを削除しますか?
... Success!
... 成功しました!

Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at
the root password from the network.
通常、root ログインはlocalhostからの接続のみで許可されるべきです。それにより、ネットワークからrootパスワードを推測できないようになります。

Disallow root login remotely? [Y/n] y
リモートからのrootログインを禁止しますか?
... Success!
... 成功しました!

By default, MariaDB comes with a database named 'test' that anyone can access. This is also intended only for
testing, and should be removed before moving into a production environment.
既定で、MariaDBには、だれでもアクセス可能なtestという名前のデータベースが付属しています。
これもテストのみで利用されることが想定されており、実運用環境に移行する前に削除する必要があります。

Remove test database and access to it? [Y/n] y
testデータベースとそのデータベースへのアクセスを削除しますか?
- Dropping test database...
- testデータベースを削除しています...
... Success!
... 成功しました!
- Removing privileges on test database...
- testデータベースに対する権限を削除しています...
... Success!
... 成功しました!

Reloading the privilege tables will ensure that all changes made so far will take effect immediately.
権限テーブルを再読み込みすると、ここまでのすべての変更をすぐに反映させることができます。

Reload privilege tables now? [Y/n] y
今すぐ権限テーブルを再読み込みしますか?
... Success!
... 成功しました!

Cleaning up...
クリーンアップしています...

All done!  If you've completed all of the above steps, your MariaDB installation should now be secure.
完了しました! 以上のすべての処理を実行していれば、安全にMariaDBをインストールできているはずです。

Thanks for using MariaDB!
MariaDBのご利用ありがとうございます!

MariaDBのユーザ登録

MariaDBにrootユーザで接続するため、以下のコマンドを実行する。

mysql -u root -p


上記で設定したMariaDBのrootパスワードを入力する。

Enter password:


ユーザ情報の一覧表示をするには、以下のクエリを発行する。

select user, host, password from mysql.user;


データベースの一覧表示をするには、以下のクエリを発行する。

show databases;


まず、全てのデータベースへの全てのアクセス権限を持った、新規ユーザsuseを登録する。

grant all privileges on *.* to suse@localhost identified by 'パスワード';


suseユーザの登録が成功したか確認する。

select user from mysql.user where user='suse';


suseユーザの登録をMariaDBサーバへ反映する。

flush privileges;


MariaDBからログアウトする。

exit



MariaDBにおけるデータベースの作成

MariaDBへログインする。

mysql -u <データベースユーザ名> -p <データベースユーザ名のパスワード>


D_Sampleデータベースを作成する。

create database <データベース名>;


D_Sample用データベースが作成できたか確認する。

show databases;


作成したデータベースへ接続する。

use <データベース名>;


テーブルを作成する。

create table <テーブル名>(employee_no int, first_name varchar(50), last_name varchar(50));


作成したテーブルを確認する。

show tables;


作成したテーブルにレコードを追加する。

insert into <テーブル名> values(1, '太郎', ‘山田’);


MariaDBからログアウトする。

exit



登録したユーザの削除

データベースユーザを削除する。

delete from mysql.user where user='<データベースユーザ名>' and host='localhost';


ユーザが削除されたかどうかを確認する。

select user from mysql.user where user='<データベースユーザ名>';


MariaDBサーバへ反映する。

flush privileges;


MariaDBからログアウトする。

exit



ユーザの権限を削除

データベースユーザから全てのデータベースへのアクセス権限を剥奪する。

revoke all privileges on *.* from <データベースユーザ名>@localhost;



MariaDBのアンインストール

まず、MariaDBを停止する。
MariaDBのステータスを確認して、起動していたら停止する。

sudo systemctl status mariadb
sudo systemctl stop mariadb


MariaDBをアンインストールする。

sudo zypper remove mariadb mariadb-client mariadb-errormessages


最後に、不要なファイルを削除する。
下記に示す通り、削除されずに残っているファイルやディレクトリがあるので、手動で削除する。

  • /var/lib/mysql
    デフォルトのデータファイル、ログファイルの格納先
  • /etc/my.cnf.d
    オプションファイルの格納先
  • /data
    本環境では、このディレクトリにデータファイル、ログファイルの格納先を変更しているので、手動で削除する。
sudo rm -rf /var/lib/mysql
sudo rm -rf /etc/my.cnf.d
sudo rm -rf /data