インストール - MariaDB
概要
データベースサーバは、サーバ上のデータベースをクライアントから操作できるようにするためのサーバである。
ここでは、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