(同じ利用者による、間の43版が非表示)
1行目: 1行目:
== 概要 ==
== 概要 ==
データベースサーバは、サーバ上のデータベースをクライアントから操作できるようにするためのサーバである。<br>
データベースサーバは、サーバ上のデータベースをクライアントから操作できるようにするためのサーバである。<br>
ここでは、RDBのデータベースサーバであるMariaDBを使用する。<br>
ここでは、RDBのデータベースサーバであるMariaDB 10.5.2(2020/4/26現在の最新版)を例に挙げる。<br>
<br>
RHELおよびSUSEでは、MariaDBのリポジトリを追加して、MariaDBをインストールすることを推奨する。<br>
<br>
また、インストールの詳細に関しては、[https://mariadb.com/kb/en/installing-mariadb-with-zypper/ こちらの公式Webサイト]を参照すること。<br>
<br><br>
<br><br>


== MariaDBのインストール ==
== MariaDBのインストール ==
==== RHEL ====
===== リポジトリを追加してインストール(推奨) =====
MariaDBのリポジトリを追加するために、/etc/yum.repos.dディレクトリにMariaDB.repoファイルを作成する。<br>
MariaDB.repoファイルには、リポジトリにあるパッケージのデジタル署名を検証するために使用されるGPG公開鍵を、自動的にフェッチするgpgkey行を含む。<br>
これにより、dnf、rpmユーティリティは、インストールするパッケージの整合性を検証できる。<br>
sudo vi /etc/yum.repos.d/MariaDB.repo
<br>
# /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
<br>
初めて、MariaDBのリポジトリからインストールする場合、GPG公開鍵をインポートするように要求される。<br>
rpmユーティリティを使用して、このGPG公開鍵を手動でインポートする。<br>
sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
<br>
リポジトリの追加および設定を行った後、以下のコマンドを実行してMariaDBをインストールする。<br>
(追加したリポジトリには、MariaDBサーバ / クライアントの他に、ユーティリティやライブラリ、プラグイン等、関連するソフトウェアも含まれる)<br>
sudo dnf install MariaDB-server MariaDB-client galera-4 MariaDB-shared MariaDB-backup MariaDB-common
<br>
正常にインストールされているか確認する。<br>
mariadb --version
<br>
===== パッケージ管理システムからインストール(非推奨) =====
MariaDBをインストールするため、以下のコマンドを実行する。<br>
sudo dnf install mariadb-server
<br>
正常にインストールされているか確認する。<br>
mariadb --version
<br>
==== SUSE ====
===== リポジトリを追加してインストール (推奨) =====
次のコマンドを実行して、MariaDBのリポジトリを追加する。<br>
# 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
<br>
次に、リポジトリのGPGキーを取得する。<br>
sudo rpm --import https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
sudo zypper --gpg-auto-import-keys refresh
<br>
リポジトリを追加および設定を行った後、以下のコマンドを実行してMariaDBをインストールする。<br>
(追加したリポジトリには、MariaDBサーバ / クライアントの他に、ユーティリティやライブラリ、プラグイン等、関連するソフトウェアも含まれる)<br>
sudo zypper install MariaDB-server MariaDB-client galera-4 MariaDB-shared MariaDB-backup MariaDB-common
<br>
===== パッケージ管理システムからインストール =====
MariaDBをインストールするため、以下のコマンドを実行する。<br>
MariaDBをインストールするため、以下のコマンドを実行する。<br>
  sudo zypper install mariadb mariadb-tools
  sudo zypper install mariadb mariadb-tools
<br>
<br>
正常にインストールされているか確認する。<br>
正常にインストールされているか確認する。<br>
  mariadb –version
  mariadb --version
<br>
==== Raspberry Pi ====
MariaDBには、Raspberry Pi向けのリポジトリは存在しないため、パッケージ管理システムからインストールする。<br>
sudo apt install mariadb-server mariadb-client
<br>
正常にインストールされているか確認する。<br>
mariadb --version
<br>
 
==== ソースコードからインストール ====
MariaDBのビルドに必要なライブラリをダウンロードする。<br>
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
<br>
[http://downloads.mariadb.org/ MariaDBの公式Webサイト]にアクセスして、ソースコードをダウンロードする。<br>
ダウンロードしたファイルを解凍する。<br>
tar xf mariadb-<バージョン>
cd mariadb-<バージョン>
<br>
または、[https://github.com/MariaDB/server/tags MariaDBのGithub]からソースコードをダウンロードする。<br>
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
<br>
ビルドディレクトリを作成する。<br>
mkdir build-mariadb && cd build-mariadb
<br>
MariaDBをビルドおよびインストールする。<br>
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
<br>
<br>
MariaDBのインストールディレクトリに、dataディレクトリ、tmpディレクトリ、logsディレクトリを作成する。<br>
# ディレクトリを作成
cd <MariaDBのインストールディレクトリ>
mkdir data tmp logs
<br>
MariaDBのインストールディレクトリに、[[インストール - MariaDB#my.cnfファイルのテンプレート|次のセクションであるmy.cnfファイルのテンプレート]]に記述している内容のmy.cnfファイルを作成する。<br>
vi /<MariaDBのインストールディレクトリ>/my.cnf
<br>
作成したmy.cnfファイルを、以下のように編集する。<br>
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
<br>
<br>
MariaDBの初期DBファイルを作成する。<br>
sudo /<MariaDBのインストールディレクトリ>/scripts/mysql_install_db --user=<my.cnfファイルのuserキーの値(ユーザ名)  例. mysql> 
<br>
MariaDBを起動する。<br>
/<MariaDBのインストールディレクトリ>/support-files/mysql.server start
<br>
上記のコマンドを実行した時、以下に示すようなエラーが出力される場合がある。<br>
Could not open mysql.plugin table: "Table 'mysql.plugin' doesn't exist". Some plugins may be not loaded
<br>
この時、/var/lib/mysqlディレクトリにあるib_logfile0ファイル、ib_logfile1ファイル、aria_log_controlファイルを削除した後、再度、MariaDBを起動する。<br>
sudo rm /var/lib/mysql/ib_logfile0 /var/lib/mysql/ib_logfile1 /var/lib/mysql/aria_log_control
# または
sudo rm -r /var/lib/mysql/*
<br>
/<MariaDBのインストールディレクトリ>/scripts/mysql_install_db --user=<my.cnfファイルのuserキーの値(ユーザ名)  例. mysql>
/<MariaDBのインストールディレクトリ>/support-files/mysql.server start
<br>
MariaDBの初期設定を行う。<br>
<u>MariaDBの初期状態では、rootユーザにパスワードが無いため、ここでrootユーザのパスワード等の設定を行う。</u><br>
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 (設定を反映させる)
<br>
管理者ユーザを作成する。<br>
# 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
<br>
Mariadbを停止する。<br>
/<MariaDBのインストールディレクトリ>/support-files/mysql.server stop
<br>
MariaDBのSystemdサービスファイルを、/etc/systemd/systemディレクトリにコピーする。<br>
sudo cp /<MariaDBのインストールディレクトリ>/support-files/systemd/mariadb.service  /etc/systemd/system
<br>
Systemdサービスファイルを更新する。<br>
sudo systemctl daemon-reload
<br>
MariaDBを起動する。<br>
sudo systemctl start mariadb.service
<br>
== my.cnfファイルのテンプレート ==
my.cnfファイルのテンプレートを以下に記述する。<br>
[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
<br><br>
== MariaDBの設定 ==
次に、MariaDBの設定ファイル(my.cnfファイル)を開いて、[mysqld]セクションに以下の設定を追記する。<br>
次に、MariaDBの設定ファイル(my.cnfファイル)を開いて、[mysqld]セクションに以下の設定を追記する。<br>
  sudo vi /etc/my.cnf
  sudo vi /etc/my.cnf
   
   
# /etc/my.cnfファイル
  [mysqld]
  [mysqld]
  character-set-server=utf8  # 追記
  character-set-server=utf8  # 追記
<br>
<br>
最後に、MariaDBの起動の設定を行う。<br>
MariaDBの起動の設定を行う。<br>
  sudo systemctl enable mariadb
  sudo systemctl enable mariadb
  sudo systemctl start mariadb
  sudo systemctl start mariadb
<br><br>
<br>
 
== MariaDBの設定 ==
MariaDBのセキュリティを向上させるため、以下のコマンドを実行する。<br>
MariaDBのセキュリティを向上させるため、以下のコマンドを実行する。<br>
  sudo mysql_secure_installation
  sudo mysql_secure_installation
126行目: 460行目:
<br>
<br>
suseユーザの登録が成功したか確認する。<br>
suseユーザの登録が成功したか確認する。<br>
  select user from mysql.user where user='centos';
  select user from mysql.user where user='suse';
<br>
<br>
suseユーザの登録をMariaDBサーバへ反映する。<br>
suseユーザの登録をMariaDBサーバへ反映する。<br>
136行目: 470行目:


== MariaDBにおけるデータベースの作成 ==
== MariaDBにおけるデータベースの作成 ==
suseユーザでMariaDBへログインする。<br>
MariaDBへログインする。<br>
  mysql -u centos -p 3ulank8y
  mysql -u <データベースユーザ名> -p <データベースユーザ名のパスワード>
<br>
<br>
D_Sampleデータベースを作成する。<br>
D_Sampleデータベースを作成する。<br>
  create database D_Sample;
  create database <データベース名>;
<br>
<br>
D_Sample用データベースが作成できたか確認する。<br>
D_Sample用データベースが作成できたか確認する。<br>
  show databases;
  show databases;
<br>
<br>
D_Sampleデータベースへ接続する。<br>
作成したデータベースへ接続する。<br>
  use D_Sample;
  use <データベース名>;
<br>
<br>
T_Employeeテーブルを作成する。<br>
テーブルを作成する。<br>
  create table T_Employee(employee_no int, first_name varchar(50), last_name varchar(50));
  create table <テーブル名>(employee_no int, first_name varchar(50), last_name varchar(50));
<br>
<br>
T_Employeeテーブルが作成できたか確認する。<br>
作成したテーブルを確認する。<br>
  show tables;
  show tables;
<br>
<br>
T_Employeeテーブルにレコードを登録する。<br>
作成したテーブルにレコードを追加する。<br>
  insert into T_Employee values(1, '太郎', ‘山田’);
  insert into <テーブル名> values(1, '太郎', ‘山田’);
<br>
<br>
MariaDBからログアウトする。<br>
MariaDBからログアウトする。<br>
162行目: 496行目:


== 登録したユーザの削除 ==
== 登録したユーザの削除 ==
suseユーザを削除する。<br>
データベースユーザを削除する。<br>
  delete from mysql.user where user='suse' and host='localhost';
  delete from mysql.user where user='<データベースユーザ名>' and host='localhost';
<br>
<br>
suseユーザが削除されたか確認する。<br>
ユーザが削除されたかどうかを確認する。<br>
  select user from mysql.user where user='suse';
  select user from mysql.user where user='<データベースユーザ名>';
<br>
<br>
suseユーザの削除をMariaDBサーバへ反映する。<br>
MariaDBサーバへ反映する。<br>
  flush privileges;
  flush privileges;
<br>
<br>
176行目: 510行目:


== ユーザの権限を削除 ==
== ユーザの権限を削除 ==
suseユーザから全てのデータベースへのアクセス権限を剥奪する。<br>
データベースユーザから全てのデータベースへのアクセス権限を剥奪する。<br>
  revoke all privileges on *.* from suse@localhost;
  revoke all privileges on *.* from <データベースユーザ名>@localhost;
<br><br>
<br><br>


187行目: 521行目:
<br>
<br>
MariaDBをアンインストールする。<br>
MariaDBをアンインストールする。<br>
  sudo zypper remove MariaDB-server MariaDB-client MariaDB-common MariaDB-compat galera-4 MariaDB-devel
  sudo zypper remove mariadb mariadb-client mariadb-errormessages
<br>
<br>
最後に、不要なファイルを削除する。<br>
最後に、不要なファイルを削除する。<br>
196行目: 530行目:
*: オプションファイルの格納先
*: オプションファイルの格納先
* /data
* /data
*: 本環境では、このディレクトリにデータファイル、ログファイルの格納先を変更しているので、手動で削除する
*: 本環境では、このディレクトリにデータファイル、ログファイルの格納先を変更しているので、手動で削除する。
  sudo rm -rf /var/lib/mysql
  sudo rm -rf /var/lib/mysql
  sudo rm -rf /etc/my.cnf.d
  sudo rm -rf /etc/my.cnf.d
203行目: 537行目:


__FORCETOC__
__FORCETOC__
[[カテゴリ:SUSE]]
[[カテゴリ:RHEL]][[カテゴリ:SUSE]]