「インストール - MySQL8」の版間の差分
(同じ利用者による、間の76版が非表示) | |||
9行目: | 9行目: | ||
もし、既にMariaDBがインストールされている場合は、MariaDBをアンインストールする。<br> | もし、既にMariaDBがインストールされている場合は、MariaDBをアンインストールする。<br> | ||
まず、インストールされているパッケージの確認するため、以下のコマンドを実行する。<br> | まず、インストールされているパッケージの確認するため、以下のコマンドを実行する。<br> | ||
# | # RHEL | ||
sudo rpm -qa | grep maria | sudo rpm -qa | grep maria | ||
# SUSE | # SUSE | ||
sudo zypper search -i | sudo zypper search -i | grep maria | ||
<br> | <br> | ||
RHELの場合、<code>mariadb-libs-<バージョン名>.el<バージョン名>.<アーキテクチャ名></code>と表示されるので、このパッケージをアンインストールする。<br> | |||
SUSEの場合、mariadbと表示されるので、このパッケージをアンインストールする。<br> | SUSEの場合、mariadbと表示されるので、このパッケージをアンインストールする。<br> | ||
# | # RHEL | ||
sudo | sudo dnf remove mariadb-libs | ||
sudo rm -rf /var/lib/mysql/ | sudo rm -rf /var/lib/mysql/ | ||
# SUSE | # SUSE | ||
sudo zypper remove mariadb- | sudo zypper remove mariadb mariadb-client mariadb-errormessages libmariadb3 akonadi-server akonadi-server-lang libQt5Sql5-mysql python3-mysqlclient | ||
sudo rm -rf /var/lib/mysql/ | sudo rm -rf /var/lib/mysql/ | ||
<br> | <br> | ||
29行目: | 29行目: | ||
== MySQL公式リポジトリの追加と設定 == | == MySQL公式リポジトリの追加と設定 == | ||
過去のMySQLのGPGキーがインポートされている場合は削除する。<br> | |||
* | # 削除対象の鍵を確認する。 | ||
*: [https://dev.mysql.com/downloads/repo/yum/ | #: <code>sudo rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'</code> | ||
# 過去のMySQLのGPGキーを削除する。 | |||
#: <code>sudo rpm -e gpg-pubkey-XXXXXXXX-XXXXXXXX</code> | |||
# 過去のMySQLのGPGキーファイルを削除する。 | |||
#: <code>sudo rm "/etc/RPM-GPG-KEY-mysql*"</code> | |||
<br> | |||
まず、MySQL公式Webサイトからリポジトリを登録する必要がある。<br> | |||
* RHEL | |||
*: [https://dev.mysql.com/downloads/repo/yum/ RHEL向けMySQL公式サイト] | |||
* SUSE | * SUSE | ||
*: [https://dev.mysql.com/downloads/repo/suse/ SUSE向けMySQL公式サイト] | *: [https://dev.mysql.com/downloads/repo/suse/ SUSE向けMySQL公式サイト] | ||
<br> | <br> | ||
または、以下のコマンドを実行して直接インストールする。<br> | または、以下のコマンドを実行して直接インストールする。<br> | ||
# | # RHEL 9 | ||
sudo | sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm | ||
# SUSE | # RHEL 8 | ||
sudo zypper install https://dev.mysql.com/get/mysql80-community-release-sl15- | sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm | ||
# SUSE 15 | |||
sudo zypper install https://dev.mysql.com/get/mysql80-community-release-sl15-6.noarch.rpm | |||
sudo rpm --import /etc/RPM-GPG-KEY-mysql-2022 # MySQLリポジトリのパッケージの署名チェックに使用するMySQL製品用のGnuPGキーをシステムにインポートする | |||
sudo zypper refresh | |||
または | |||
sudo rpm -ivh mysql80-community-release-sl15-6.noarch.rpm | |||
sudo rpm --import /etc/RPM-GPG-KEY-mysql-2022 # MySQLリポジトリのパッケージの署名チェックに使用するMySQL製品用のGnuPGキーをシステムにインポートする | |||
sudo zypper refresh | sudo zypper refresh | ||
<br> | <br> | ||
46行目: | 62行目: | ||
<br> | <br> | ||
リポジトリが追加されたかどうかは、以下のコマンドで確認できる。<br> | リポジトリが追加されたかどうかは、以下のコマンドで確認できる。<br> | ||
# | # RHEL | ||
sudo | sudo dnf repolist all | grep mysql | ||
# SUSE | # SUSE | ||
56行目: | 72行目: | ||
== MySQL8.0のインストール == | == MySQL8.0のインストール == | ||
==== リポジトリを追加してインストール ==== | |||
インストールを行う前に、パッケージのバージョンを確認する。<br> | インストールを行う前に、パッケージのバージョンを確認する。<br> | ||
# | # RHEL | ||
sudo | sudo dnf info mysql-community-server | ||
# SUSE | # SUSE | ||
66行目: | 83行目: | ||
インストールの途中において、MySQLのGPG公開鍵が無いというメッセージが表示されるが、<br> | インストールの途中において、MySQLのGPG公開鍵が無いというメッセージが表示されるが、<br> | ||
インストール時にGPG公開鍵も同時にインストールされるので、そのまま続ける。<br> | インストール時にGPG公開鍵も同時にインストールされるので、そのまま続ける。<br> | ||
# | # RHEL | ||
sudo | sudo dnf install mysql-community-server | ||
# SUSE | # SUSE | ||
76行目: | 93行目: | ||
<br> | <br> | ||
最後に、自動起動の設定をしてMySQLを起動する。<br> | 最後に、自動起動の設定をしてMySQLを起動する。<br> | ||
# RHEL | |||
sudo systemctl enable mysqld | sudo systemctl enable mysqld | ||
sudo systemctl start mysqld | sudo systemctl start mysqld | ||
# SUSE | |||
sudo systemctl enable mysql | |||
sudo systemctl start mysql | |||
<br> | |||
==== ソースコードからインストール ==== | |||
ビルドに必要なライブラリをインストールする。<br> | |||
# SUSE | |||
sudo zypper install bison make cmake ninja git glibc-devel ncurses-devel perl-Data-Dump perl-Data-Dump-Streamer perl-Data-Dumper-Concise krb5-devel \ | |||
perl libtirpc3 libtirpc-devel rpcgen liblz4-devel libzstd-devel protobuf-devel libicu-devel \ | |||
libevent-devel libnuma-devel libfido2-devel libudev-devel systemd-devel doxygen \ | |||
libopenssl-devel libopenssl-1_1-devel # OpenSSL 1 を使用する場合 | |||
valgrind-devel # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである) | |||
<br> | |||
[https://downloads.mysql.com/archives/community/ MySQLの公式Webサイト]にアクセスして、MySQLのソースコードをダウンロードする。<br> | |||
<br> | |||
[Product Version]は、インストールするMySQLのバージョンを選択、[Operating System]では"Source Code"を選択する。<br> | |||
表示されるリストから、最も下欄にある"mysql-boost-<バージョン>.tar.gz"をダウンロードする。<br> | |||
<br> | |||
<u>MySQL 5.7.5からBoostライブラリが必要になったため、Boostライブラリ同梱のものをダウンロードすること。</u><br> | |||
<u>ただし、MySQL 8.3以降からBoostライブラリは不要になっている。</u><br> | |||
<br> | |||
または、<code>wget</code>コマンドを使用して直接ダウンロードする。<br> | |||
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-<バージョン>.tar.gz | |||
<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
tar xf mysql-boost-<バージョン>.tar.gz | |||
cd mysql-boost-<バージョン> | |||
<br> | |||
MySQLのビルドディレクトリを作成する。<br> | |||
mkdir build && cd build | |||
<br> | |||
MySQLをビルドおよびインストールする。<br> | |||
# MySQL 8.2以前 | |||
cmake .. \ | |||
-DCMAKE_C_COMPILER=<GCC 8.1以降のgcc実行ファイルのパス> \ | |||
-DCMAKE_CXX_COMPILER=<GCC 8.1以降のg++実行ファイルのパス> \ | |||
-DCMAKE_BUILD_TYPE=Release \ | |||
-DCMAKE_INSTALL_PREFIX=<MySQLのインストールディレクトリ> \ | |||
-DDEFAULT_CHARSET=utf8mb4 \ | |||
-DWITH_EXTRA_CHARSETS=all \ | |||
-DDEFAULT_COLLATION=utf8mb4_general_ci \ | |||
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ | |||
-DSYSCONFDIR=<MySQLのインストールディレクトリ> \ | |||
-DMYSQL_DATADIR=<MySQLのインストールディレクトリ>/data \ | |||
-DWITH_BOOST=../boost \ # MySQL 8.2以前の場合 | |||
-DWITH_SYSTEMD=ON \ # Systemdサービスを使用する場合 | |||
-DWITH_VALGRIND=ON # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである) | |||
make -j $(nproc) | |||
make install | |||
# または | |||
cmake .. -G Ninja \ | |||
-DCMAKE_C_COMPILER=<GCC 8.1以降のgcc実行ファイルのパス> \ | |||
-DCMAKE_CXX_COMPILER=<GCC 8.1以降のg++実行ファイルのパス> \ | |||
-DCMAKE_BUILD_TYPE=Release \ | |||
-DCMAKE_INSTALL_PREFIX=<MySQLのインストールディレクトリ> \ | |||
-DDEFAULT_CHARSET=utf8mb4 \ | |||
-DWITH_EXTRA_CHARSETS=all \ | |||
-DDEFAULT_COLLATION=utf8mb4_general_ci \ | |||
-DWITH_INNOBASE_STORAGE_ENGINE=1 \ | |||
-DSYSCONFDIR=<MySQLのインストールディレクトリ> \ | |||
-DMYSQL_DATADIR=<MySQLのインストールディレクトリ>/data \ | |||
-DWITH_BOOST=../boost \ # MySQL 8.2以前の場合 | |||
-DWITH_SYSTEMD=ON \ # Systemdサービスを使用する場合 | |||
-DWITH_VALGRIND=ON # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである) | |||
ninja -C . | |||
ninja -C . install | |||
<br> | |||
/<MySQLのインストールディレクトリ>/libディレクトリから/<MySQLのインストールディレクトリ>/lib64ディレクトリへ、シンボリックリンクを作成する。<br> | |||
ln -s /<MySQLのインストールディレクトリ>/lib /<MySQLのインストールディレクトリ>/lib64 | |||
<br> | |||
MySQLのインストールディレクトリに、以下のディレクトリとファイルを作成する。<br> | |||
# ディレクトリを作成 | |||
mkdir <MySQLのインストールディレクトリ>/data | |||
mkdir <MySQLのインストールディレクトリ>/tmp | |||
mkdir <MySQLのインストールディレクトリ>/logs | |||
<br> | |||
次に、MySQLのデータディレクトリを初期化する。(MySQL 5.7.6以降、mysql_install_dbは廃止されていることに注意する)<br> | |||
<br> | |||
===== Systemdサービスユニットファイルの作成 ===== | |||
MySQLをソースコードからインストールした時、<br> | |||
SystemdサービスからMySQLを起動および停止する場合は、Systemdサービスユニットファイルを作成する。<br> | |||
<br> | |||
作成するファイルを以下に示す。<br> | |||
* mysqld.serviceファイル | |||
* mysqld@.serviceファイル | |||
<br> | |||
* システム全体で使用する場合 | |||
*: /etc/systemd/systemディレクトリ | |||
* 各ユーザで使用する場合 (ただし、各ユーザごとに使用する場合は、特権ポート0〜1023番ポートは使用できない) | |||
*: ~/.config/systemd/userディレクトリ | |||
<br> | |||
# mysqld.serviceファイル | |||
[Unit] | |||
Description=MySQL Server | |||
Documentation=man:mysqld(8) | |||
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html | |||
After=network-online.target | |||
Wants=network-online.target | |||
After=syslog.target | |||
[Install] | |||
WantedBy=multi-user.target | |||
[Service] | |||
Type=notify | |||
# Disable service start and stop timeout logic of systemd for mysqld service. | |||
TimeoutSec=0 | |||
# Execute pre and post scripts as root | |||
# hence, + prefix is used | |||
# Needed to create system tables | |||
ExecStartPre=+/<MySQLのインストールディレクトリ>/bin/mysqld_pre_systemd | |||
# Start main service | |||
ExecStart=/<MySQLのインストールディレクトリ>/bin/mysqld $MYSQLD_OPTS | |||
# Use this to switch malloc implementation | |||
EnvironmentFile=-/etc/sysconfig/mysql | |||
# Sets open_files_limit | |||
LimitNOFILE = 10000 | |||
Restart=on-failure | |||
RestartPreventExitStatus=1 | |||
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart. | |||
Environment=MYSQLD_PARENT_PID=1 | |||
PrivateTmp=false | |||
PIDFile=/<MySQLのインストールディレクトリ>/tmp/mysqld.pid | |||
<br> | |||
# mysqld@.serviceファイル | |||
[Unit] | |||
Description=MySQL Server | |||
Documentation=man:mysqld(8) | |||
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html | |||
After=network-online.target | |||
Wants=network-online.target | |||
After=syslog.target | |||
[Install] | |||
WantedBy=multi-user.target | |||
[Service] | |||
Type=notify | |||
# Disable service start and stop timeout logic of systemd for mysqld service. | |||
TimeoutSec=0 | |||
# Execute pre and post scripts as root | |||
# hence, + prefix is used | |||
# Needed to create system tables | |||
ExecStartPre=+/<MySQLのインストールディレクトリ>/bin/mysqld_pre_systemd %I | |||
# Start main service | |||
ExecStart=/<MySQLのインストールディレクトリ>/bin/mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS | |||
# Use this to switch malloc implementation | |||
EnvironmentFile=-/etc/sysconfig/mysql | |||
# Sets open_files_limit | |||
LimitNOFILE = 10000 | |||
Restart=on-failure | |||
RestartPreventExitStatus=1 | |||
# Set enviroment variable MYSQLD_PARENT_PID. This is required for restart. | |||
Environment=MYSQLD_PARENT_PID=1 | |||
PrivateTmp=false | |||
<br> | |||
===== MySQLの設定ファイルの作成 ===== | |||
MySQLのインストールディレクトリに、MySQLの設定ファイルであるmy.cnfファイルを作成する。<br> | |||
<u>my.cnfファイルの設定内容については、[[インストール - MySQL8#my.cnfファイルのテンプレート]]のセクションを参照すること。</u><br> | |||
vi /<MySQLのインストールディレクトリ>/my.cnf | |||
<br> | |||
作成したmy.cnfファイルを、以下に示すように編集する。<br> | |||
cd <MySQLのインストールディレクトリ> | |||
# 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/<MySQLのインストールディレクトリ 例. \/home\/user\/InstallSoftware\/MySQL>/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> | |||
===== MySQLの初期化 ===== | |||
MySQLの初期化を行う。<br> | |||
# MySQLの初期化 | |||
/<MySQLのインストールディレクトリ>/bin/mysqld --initialize \ | |||
--user=<my.cnfファイルのuserキーの値(ユーザ名)> \ # 例. mysql等 | |||
--basedir=<MySQLのインストールディレクトリ> \ | |||
--datadir=/<MySQLのインストールディレクトリ>/data | |||
<br> | |||
この時、my.cnfファイルの[log_error]セクションに設定したファイル(例. /<MySQLインストールディレクトリ>/logs/mysql_error.logファイル)に、<br> | |||
MySQLのrootユーザのパスワードが保存される。<br> | |||
# rootユーザのパスワードを確認 | |||
grep "temporary password" <[log_error]セクションに設定したファイル> | |||
例. grep "temporary password" /<MySQLインストールディレクトリ>/logs/mysql_error.log | |||
<br> | |||
===== MySQLの起動 ===== | |||
MySQLを起動する。<br> | |||
/<MySQLのインストールディレクトリ>/support-files/mysql.server start | |||
<br> | |||
===== MySQLのユーザの設定 ===== | |||
MySQLの初期設定を行う。<br> | |||
# rootユーザで接続する | |||
/<MySQLのインストールディレクトリ>/bin/mysql -u root -p | |||
(/var/log/mysql/mysqld.logファイルに保存されたパスワードを入力する) | |||
# rootユーザのパスワードを変更する | |||
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<任意のパスワード>'; | |||
quit; | |||
<br> | |||
/<MySQLのインストールディレクトリ>/binディレクトリにあるmysql_secure_installationを実行する。<br> | |||
詳細は、[[インストール - MySQL8#MySQLの初期設定]]を参照すること。<br> | |||
/<MySQLのインストールディレクトリ>/bin/mysql_secure_installation | |||
<br> | |||
===== MySQLの停止 ===== | |||
MySQLを停止するには、以下のコマンドを実行する。<br> | |||
<u>この時、/var/lock/subsys/mysqlファイルを削除する必要があるため、スーパーユーザ権限で行う必要がある。</u><br> | |||
sudo /<MySQLのインストールディレクトリ>/support-files/mysql.server stop | |||
<br><br> | |||
== MySQL Router == | |||
MySQL Routerは、MySQL InnoDB ClusterやInnoDB ReplicaSetで使用可能であり、ロードバランスや障害発生時のフェイルオーバーに対応したルーティングを透過的に実現するミドルウェア製品である。<br> | |||
詳細は、[[MySQL - MySQL Router]]を参照すること。<br> | |||
<br><br> | |||
== my.cnfファイル == | |||
my.cnfファイルの各セクションの意味と役割を以下に示す。<br> | |||
<br> | |||
* [mysqld]セクション | |||
*: MySQLサーバデーモン (バックグラウンドで動作するサーバプロセス) の設定を定義する。 | |||
*: サーバの動作に関する全ての主要な設定 (メモリ、キャッシュ、ログ、文字コード等) が含まれる。 | |||
*: このセクションの設定はサーバ全体に影響を与える。 | |||
*: 例: innodb_buffer_pool_sizeキー、character-set-serverキー、portキー等 | |||
<br> | |||
* [mysql]セクション | |||
*: MySQLコマンドラインクライアント (mysqlコマンド) 特有の設定を定義する。 | |||
*: コマンドラインでMySQLに接続する際に使用される設定である。 | |||
*: 主に、クライアントツールの動作に関する設定が含まれる。 | |||
*: 例: default-character-setキー、promptキー、auto-vertical-outputキー等 | |||
<br> | |||
* [client]セクション | |||
*: 全てのMySQLクライアントプログラム共通の設定を定義する。 | |||
*: mysqlコマンドのみではなく、mysqldumpコマンド、mysqlimportコマンド、mysqladminコマンド等のクライアントツール全てに適用される。 | |||
*: 主に、接続関連の設定が含まれる。 | |||
*: portキー、socketキー、default-character-setキー等 | |||
<br> | |||
* mysqldコマンドは、[mysqld]セクションの設定を使用する。 | |||
* mysqlコマンドは、[mysql]セクションおよび[client]セクションの両方の設定を使用する。 | |||
* mysqldumpコマンド等のその他のクライアントツールは、 [client]セクションの設定を使用する。 | |||
<br> | |||
# 共通の接続設定は[client]セクションにまとめる。 | |||
# [mysql]セクションには、CLI固有の設定のみを記述する。 | |||
# [mysqld]セクションにはサーバ固有の設定を記述する。 | |||
<br><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 | |||
default-character-set = CHARACTER_SET | |||
# 例: プロンプトの設定やその他のCLI固有の設定 | |||
prompt = '\u@\h [\d]> ' | |||
auto-vertical-output = 1 | |||
[client] | |||
port = PORT_NO | |||
user = USER_NAME | |||
socket = MYSQL_DATA_BASE_DIR/tmp/mysql.sock | |||
default-character-set = utf8mb4 | |||
<br><br> | <br><br> | ||
83行目: | 469行目: | ||
MySQLのインストール時にrootのパスワードがログに出力されているので確認する。<br> | MySQLのインストール時にrootのパスワードがログに出力されているので確認する。<br> | ||
ここでは、V9djjjWFd_wfがrootのパスワードである。<br> | ここでは、V9djjjWFd_wfがrootのパスワードである。<br> | ||
grep password /var/log/mysqld.log | sudo grep 'temporary password' /var/log/mysql/mysqld.log | ||
# 結果 | # 結果 | ||
104行目: | 490行目: | ||
<br> | <br> | ||
続いて、文字コードの設定を行うため、以下のファイルを開く。<br> | 続いて、文字コードの設定を行うため、以下のファイルを開く。<br> | ||
この設定を行わない場合、日本語が文字化けする可能性がある。<br> | |||
sudo vi /etc/my.cnf | sudo vi /etc/my.cnf | ||
<br> | <br> | ||
114行目: | 500行目: | ||
<br> | <br> | ||
MySQLを再起動するため、以下のコマンドを実行する。<br> | MySQLを再起動するため、以下のコマンドを実行する。<br> | ||
# RHEL | |||
sudo systemctl restart mysqld | sudo systemctl restart mysqld | ||
# SUSE | |||
sudo systemctl restart mysql | |||
<br> | |||
もし、rootユーザのパスワードを変更する場合、MySQLにログインして以下のコマンドを実行する。<br> | |||
ALTER USER 'root'@'localhost' IDENTIFIED BY '<パスワード>'; | |||
<br><br> | |||
== パスワードポリシーの変更 == | |||
非推奨ではあるが、パスワードポリシー(短いパスワードを許可する)を変更する場合、MySQLにログイン後、以下のクエリを実行する。<br> | |||
初期状態では、<code>validate_password.policy</code>が<code>MEDIUM</code>となっている。<br> | |||
set global validate_password.length=6; # パスワードの最低の長さを変更 | |||
set global validate_password.policy=LOW; # セキュリティレベルの変更 | |||
<br> | |||
現在のパスワードポリシーを確認する場合、MySQLにログイン後、以下のクエリを実行する。<br> | |||
SHOW VARIABLES LIKE 'validate_password%'; | |||
<br> | |||
WordPressを使用する場合は、認証をパスワード式にする必要がある。<br> | |||
ALTER USER 'ユーザ名'@'ホスト名または%' IDENTIFIED WITH mysql_native_password BY ‘<パスワード>’; | |||
<br><br> | <br><br> | ||
== MySQLユーザの作成 == | == MySQLユーザの作成 == | ||
一般的に、rootユーザでデータベースを操作しないため、データベースユーザを作成する。<br> | |||
まず、MySQLにログインする。<br> | まず、MySQLにログインする。<br> | ||
sudo mysql -p | sudo mysql -p | ||
124行目: | 530行目: | ||
Enter password:(rootユーザに設定したパスワード) | Enter password:(rootユーザに設定したパスワード) | ||
<br> | <br> | ||
ここでは、全ての権限を持ったユーザを作成する。(通常はこのようなユーザは作成しない)<br> | |||
* MySQL8をローカル環境でのみ使用する場合 | |||
mysql> CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード'; | mysql> CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード'; | ||
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'ホスト名'; | mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'ホスト名'; | ||
mysql> FLUSH PRIVILEGES; | |||
<br> | |||
* MySQL8を外部のネットワークから接続する場合 | |||
mysql> CREATE USER 'ユーザ名'@'%' IDENTIFIED BY 'パスワード'; | |||
mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'%'; | |||
mysql> FLUSH PRIVILEGES; | mysql> FLUSH PRIVILEGES; | ||
<br> | <br> | ||
134行目: | 546行目: | ||
Enter password:(作成したユーザに設定したパスワード) | Enter password:(作成したユーザに設定したパスワード) | ||
<br> | |||
<u>※注意</u><br> | |||
<u>PHP7からMySQL8以降に接続する場合、以下のエラーが出力されることがある。</u><br> | |||
Warning: PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password] | |||
<br> | |||
<u>これは、MySQL8以降、データベースユーザの認証プラグインが<code>caching_sha2_password</code>に変更されたが、</u><br> | |||
<u>PHP7では、<code>caching_sha2_password</code>が未サポートであることが原因である。</u><br> | |||
<u>そのため、データベースユーザの認証プラグインを<code>mysql_native_password</code>に変更することが必要となる。</u><br> | |||
<br> | |||
<u>まず、MySQL8に接続して、認証プラグインを確認する。</u><br> | |||
mysql> SELECT User, Host, Plugin FROM mysql.user; | |||
<br> | |||
<u>次に、ユーザの認証プラグインを<code>caching_sha2_password</code>から<code>mysql_native_password</code>に変更する。</u><br> | |||
mysql> ALTER USER 'ユーザ名'@'ホスト名または%' IDENTIFIED WITH mysql_native_password BY 'パスワード'; | |||
<br> | |||
<u>Dockerを使用している場合、Dockerのコンテナ内でユーザの認証プラグインを変更する手順を、以下に記載する。</u><br> | |||
<u>まず、Dockerのコンテナに入る。</u><br> | |||
# DockerのCONTAINER IDを確認 | |||
docker ps | |||
# 上記のコマンドで確認したMySQL 8のCONTAINER IDを指定して、コンテナに接続する | |||
docker exec -it <CONTAINER ID> bash | |||
# コンテナ内でMySQL 8にログインする | |||
mysql -u root -p | |||
Enter password: <database.ymlで設定したパスワード> | |||
# User、Host、Pluginを確認する(例えば、以下のような全ユーザの認証プラグイン) | |||
mysql> SELECT User, Host, Plugin FROM mysql.user; | |||
+------------------+-----------+-----------------------+ | |||
| User | Host | Plugin | | |||
+------------------+-----------+-----------------------+ | |||
| root | % | caching_sha2_password | | |||
| mysql.infoschema | localhost | caching_sha2_password | | |||
| mysql.session | localhost | caching_sha2_password | | |||
| mysql.sys | localhost | caching_sha2_password | | |||
| root | localhost | caching_sha2_password | | |||
+------------------+-----------+-----------------------+ | |||
# 例: rootユーザの認証プラグインを変更する | |||
mysql> ALTER USER 'ユーザ名'@'ホスト名' IDENTIFIED WITH mysql_native_password BY 'パスワード' | |||
# 正常に変更されているか確認する | |||
mysql> SELECT User, Host, Plugin FROM mysql.user; | |||
+------------------+-----------+-----------------------+ | |||
| User | Host | Plugin | | |||
+------------------+-----------+-----------------------+ | |||
| root | % | caching_sha2_password | | |||
| mysql.infoschema | localhost | caching_sha2_password | | |||
| mysql.session | localhost | caching_sha2_password | | |||
| mysql.sys | localhost | caching_sha2_password | | |||
| root | localhost | mysql_native_password | <= 変更されているか確認 | |||
+------------------+-----------+-----------------------+ | |||
<br> | |||
<u>コンテナを削除して、再度、ビルドを行う。</u><br> | |||
docker-compose down | |||
docker-compose build | |||
<br><br> | |||
== パスワードの変更 == | |||
MySQL8において、パスワードを変更するには、以下のクエリを実行する。<br> | |||
USE mysql; | |||
ALTER USER '<ユーザ名>'@'<ホスト名または%>' identified BY '<パスワード>'; | |||
<br><br> | <br><br> | ||
147行目: | 622行目: | ||
<br> | <br> | ||
MySQLを再起動をして設定を反映する。<br> | MySQLを再起動をして設定を反映する。<br> | ||
# RHEL | |||
sudo systemctl restart mysqld | |||
# SUSE | |||
sudo systemctl restart mysql | sudo systemctl restart mysql | ||
<br> | <br> | ||
164行目: | 643行目: | ||
<br> | <br> | ||
MySQLを再起動して設定を反映させる。<br> | MySQLを再起動して設定を反映させる。<br> | ||
# RHEL | |||
sudo systemctl restart mysqld | |||
# SUSE | |||
sudo systemctl restart mysql | sudo systemctl restart mysql | ||
<br> | <br> | ||
171行目: | 654行目: | ||
USE mysql; | USE mysql; | ||
ALTER USER 'root'@'localhost' identified BY 'HogeHoge1'; | ALTER USER 'root'@'localhost' identified BY 'HogeHoge1'; | ||
<br><br> | |||
== MySQL WorkBenchのインストール == | |||
==== パッケージ管理システムを使用してインストール ==== | |||
MySQL WorkBenchと依存関係のライブラリをインストールする。<br> | |||
sudo zypper install mysql-workbench libOpenCL1 libantlr4-runtime4_7_2 libfreexl1 libgdal26 libgeos-3_6_2 libgeos_c1 libgeotiff5 libhdf5-103 \ | |||
libhdf5_cpp103 libhdf5_hl100 libkea1_4 libmariadb-devel libnetcdf15 libproj19 libscintilla3 \ | |||
libspatialite7 libvsqlitepp3 proj python python-enum34 python-ipaddress python-xml python2-PyNaCl python2-appdirs \ | |||
python2-asn1crypto python2-bcrypt python2-cffi python2-cryptography python2-idna python2-packaging python2-paramiko \ | |||
python2-pexpect python2-ptyprocess python2-pyasn1 python2-pycparser python2-pyparsing python2-setuptools python2-six | |||
<br> | |||
==== ソースコードからインストール ==== | |||
[https://dev.mysql.com/downloads/ MySQLの公式Webサイト]にアクセスして、MySQL WorkBenchのソースコードをダウンロードする。<br> | |||
または、GitHubからソースコードをクローンする。<br> | |||
git clone --depth 1 https://github.com/mysql/mysql-workbench.git | |||
<br> | |||
MySQL WorkBenchのビルドに必要なライブラリをインストールする。<br> | |||
sudo zypper install cmake autoconf automake pkg-config libtool libzip-devel libxml2-devel libsigc++2-devel libglade2-devel \ | |||
Mesa-libGL1 Mesa-libGL-devel Mesa-devel libmysqlclient-dev libmysqlcppconn-devel libuuid-devel \ | |||
libpixman-1-0-devel pcre-devel pango-devel cairo-devel python-devel libboost_headers1_66_0-devel \ | |||
mysql-client python-pysqlite sqlite3-devel swig vsqlite++-devel gdal-devel gtk3-devel gtkmm3-devel \ | |||
libopenssl-devel libsecret-devel proj-devel | |||
<br> | |||
* ANTLR(推奨) | |||
*: MySQLパーサ用のファイルを生成するには、ANTLR 4.7以降が必要である。 | |||
*: [http://www.antlr.org/download.html ANTLRの公式Webサイト]にアクセスして、antlr-<バージョン>-complete.jarファイルをダウンロードする。 | |||
*: cmakeコマンドを実行する時、このjarファイルのパスをcmakeの引数として渡す必要がある。 | |||
*: -DWITH_ANTLR_JAR=<antlr-<バージョン>-complete.jarファイルのパス> | |||
*: <br> | |||
* iodbc | |||
*: ミドルウェアにおいて、iodbcの代わりにunixODBCを使用する場合を記載する。 | |||
*: まず、unixODBCをインストールする。 | |||
*: cmakeコマンドを実行する時、<code>-DUSE_UNIXODBC=True</code>オプションを付加する。<br> | |||
*: <br> | |||
* gdal | |||
*: Ubuntuの場合、unixodbcが必須である。 | |||
*: もし、iodbcを使用する場合は、MySQL WorkBenchをソースコードからビルドする必要がある。 | |||
<br> | |||
cmakeコマンドを実行して、MySQL WorkBenchをコンパイルする。<br> | |||
mkdir build && cd build | |||
cmake -DCMAKE_INSTALL_PREFIX=<MySQL WorkBenchのインストールディレクトリ> -DWITH_ANTLR_JAR=<antlr-<バージョン>-complete.jarファイルのパス> .. | |||
make -j 8 | |||
<br> | |||
MySQL WorkBenchをインストールする。<br> | |||
make install DESTDIR=<MySQL WorkBenchのインストールディレクトリ> | |||
<br><br> | |||
== トラブルシューティング == | |||
==== エラー : Public Key Retrieval is not allowed ==== | |||
クライアントがサーバから自動的に公開鍵を要求できるように、mysql-connectorに<code>allowPublicKeyRetrieval=true</code>オプションを追加する必要がある。<br> | |||
これは、悪意のあるプロキシが平文のパスワードを取得するためのMITM攻撃を行う可能性があるため、標準では<code>false</code>になっており、明示的に有効にする必要がある。<br> | |||
<br> | |||
また、テストや開発のために使用する場合は、<code>useSSL=false</code>オプションも付加して接続してもよい。<br> | |||
<br> | |||
詳細は、[https://mysql-net.github.io/MySqlConnector/connection-options/ MySQLの公式Webサイト]を参照すること。<br> | |||
# 接続コマンド | |||
jdbc:mysql://<Webサーバのホスト名>:<MySQLのポート番号>/db?allowPublicKeyRetrieval=true&useSSL=false | |||
# 例 | |||
jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false | |||
<br><br> | |||
== DBeaver == | |||
DBeaverは、Oracle、SQLServer、MySQL、MariaDB、SQLite等の計42種類のドライバに対応したSQLクライアントツールである。<br> | |||
DBeaverの詳細を知りたい場合は、[[インストール - DBeaver|インストール - DBeaverのページ]]を確認すること。<br> | |||
<br> | |||
<u>※注意</u><br> | |||
<u>データベース接続時において、以下のエラーが出力される場合がある。</u><br> | |||
SQL Error [08001]: Public Key Retrieval is not allowed | |||
<br> | |||
この時、DBeaverのメイン画面左の[データベースナビゲータ]から該当接続を右クリックして、[編集 接続]を選択する。<br> | |||
次に、[接続構成]画面右 - [ドライバのプロパティ]タブから、以下の項目を設定する。<br> | |||
* allowPublicKeyRetrieval | |||
*: trueに変更する。 | |||
* useSSL | |||
*: falseに変更する。 | |||
<br> | |||
最後に、[接続構成]画面下の[OK]ボタンを押下する。<br> | |||
<br><br> | |||
== Adminer == | |||
PHPとMySQLやPostgreSQLと連携する時、データベースの内容をグラフィカルな環境で確認する場合、Adminerを使用すると便利である。<br> | |||
<br> | |||
Adminerは、インストール不要であり、PHPファイルが1つで導入が簡単である。<br> | |||
1つのファイルで、MySQL、PostgreSQL、SQLite、MS SQL、Oracle DB、SimpleDB、Elasticsearch、MongoDBに対応している。<br> | |||
<br> | |||
<u>ただし、PCにデータベースドライバの導入は別途必要であることに注意する。</u><br> | |||
<br> | |||
phpMyAdminやphpPgAdminは、導入に手間が掛かり、ブルートフォースアタックの対象になることもある。<br> | |||
<br> | |||
[https://www.adminer.org/en/ Adminerの公式Webサイト]にアクセスして、Adminer(PHPファイル)をダウンロードする。<br> | |||
ダウンロードしたファイルを、ドキュメントルート(/var/www/htmlディレクトリ等)に配置する。 (ファイル名は自由に変更してもよい)<br> | |||
<br><br> | |||
== phpMyAdmin == | |||
==== パッケージ管理システムからインストール ==== | |||
===== phpMyAdminのインストール ===== | |||
常にコマンドラインから操作することは面倒であるので、Webブラウザから操作できるphpMyAdminをインストールする。<br> | |||
PHPからMySQLを使用するために必要なパッケージが一式インストールできるので、phpMyAdminを使用する予定がなくても、<br> | |||
インストールしておくと便利である。<br> | |||
# RHEL | |||
sudo dnf install epel-release | |||
sudo dnf install phpmyadmin php-pecl-mcrypt | |||
# SUSE | |||
sudo zypper install phpMyAdmin | |||
<br> | |||
===== phpMyAdminの設定 ===== | |||
まず、設定ファイルであるconfig.inc.phファイルを編集する。<br> | |||
config.inc.phpファイルに暗号化用のパスフレーズを設定する。これを行わないと、phpMyAdmin上でエラーが表示される。<br> | |||
(設定ファイルに暗号化(blowfish_secret)用の非公開パスフレーズの設定を必要とするようになった)<br> | |||
<br> | |||
面倒な時は以下のコマンドを実行して、32桁のパスフレーズを作成する。<br> | |||
sudo openssl rand -base64 100 | fold -w 32 | head -1 | |||
出力例 : GgP1/5FMW7Nf3iX1rXmqeQj4k/mHAZDv | |||
<br> | |||
設定ファイルはサンプルがあるので、それをコピーして編集する。<br> | |||
sudo cp -a /usr/share/doc/phpMyAdmin-<バージョン>/config.sample.inc.php /etc/phpMyAdmin/config.inc.php | |||
sudo nano /etc/phpMyAdmin/config.inc.php | |||
<br> | |||
ファイルの先頭のあたりに存在する<code>$cfg['blowfish_secret']</code>キーの値に、上記で作成したパスフレーズを入力する。<br> | |||
/** | |||
* This is needed for cookie based authentication to encrypt password in | |||
* cookie. Needs to be 32 chars long. | |||
*/ | |||
$cfg['blowfish_secret'] = <パスフレーズ>''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */ | |||
<br> | |||
次に、phpMyAdmin.confファイルの設定を行う。<br> | |||
まず、アクセス権に関する設定を行う。(この設定を行うことにより、phpMyAdminにアクセスできる)<br> | |||
sudo nano /etc/httpd/conf.d/phpMyAdmin.conf | |||
16行目と30行目にある<code>Require local</code>の1つ下の行に以下の設定を追加する。<br> | |||
# Apache 2.4 | |||
Require ip 192.168.xxx.0/24 | |||
<br> | |||
編集を完了したら、Apacheを再起動する。<br> | |||
sudo systemctl restart httpd | |||
<br> | |||
Webブラウザから、http://localost/phpmyadmin/ にアクセスし、ログイン画面が表示されることを確認する。<br> | |||
<br> | |||
'''※上記のURLでエラーが表示される場合'''<br> | |||
もし、下記のようなエラーが出力される場合は、外部と通信しないローカル環境のみのサーバなので、<br> | |||
セッション情報を保存するsessionディレクトリの権限を変更する。<br> | |||
# エラー内容 | |||
phpMyAdmin - Error | |||
Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. | |||
session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13) | |||
session_start(): Failed to read session data: files (path: /var/lib/php/session) | |||
sudo chmod 777 /var/lib/php/session | |||
<br> | |||
また、下記のようなエラーが出力される場合は、tempディレクトリの権限を変更する。<br> | |||
# エラー内容 | |||
$cfg['TempDir'] (/var/lib/phpMyAdmin/temp/)にアクセスできません。 | |||
phpMyAdmin はテンプレートをキャッシュすることができないため、低速になります。 | |||
sudo chmod 777 /var/lib/phpMyAdmin/temp | |||
<br> | |||
'''※phpMyAdminにログインできない場合'''<br> | |||
接続方式を変更するために、rootユーザでMySQLにログインする。<br> | |||
sudo mysql -u root -p | |||
<br> | |||
次に、以下のクエリを発行する。<br> | |||
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード'; | |||
mysql> FLUSH PRIVILEGES; | |||
最後に、MySQLを再起動する。<br> | |||
# RHEL | |||
sudo systemctl restart mysqld | |||
# SUSE | |||
sudo systemctl restart mysql | |||
<br> | |||
phpMyAdminにログインできるか確認する。<br> | |||
<br> | |||
==== 手動でインストール ==== | |||
[https://www.phpmyadmin.net phpMyAdminの公式Webサイト]にアクセスして、phpMyAdminをダウンロードする。<br> | |||
ダウンロードしたファイルを解凍する。<br> | |||
unzip phpMyAdmin-<バージョン>-all-languages.zip | |||
mv phpMyAdmin-<バージョン>-all-languages phpMyAdmin | |||
<br> | |||
解凍したphpMyAdminのディレクトリを、Apache2またはNginXのドキュメントルートに移動する。<br> | |||
phpMyAdmin用の仮想ホストを構築していることが望ましい。<br> | |||
mv phpMyAdmin <Apache2またはNginXのドキュメントルート> | |||
cd /<Apache2またはNginXのドキュメントルート>/phpMyAdmin | |||
<br> | |||
phpMyAdminの設定を行う。<br> | |||
cp config.sample.inc.php config.inc.php | |||
vi config.inc.php | |||
<br> | |||
<syntaxhighlight lang="php"> | |||
# config.inc.phpファイル | |||
# 編集前 | |||
$cfg['Servers'][$i]['host'] = 'localhost'; | |||
# 編集後 | |||
$cfg['Servers'][$i]['host'] = '<ホスト名またはIPアドレス>:<MySQLのポート番号>'; | |||
// 例. $cfg['Servers'][$i]['host'] = '127.0.0.1:3306'; | |||
</syntaxhighlight> | |||
<br><br> | <br><br> | ||
__FORCETOC__ | __FORCETOC__ | ||
[[カテゴリ:SUSE]] | [[カテゴリ:RHEL]][[カテゴリ:SUSE]] |
2025年2月23日 (日) 15:27時点における最新版
概要
標準でインストール可能なMySQLは、MariaDBというMySQL派生のDBである。
MySQLとほぼ同じなので、そのまま使用しても問題ないが、本番環境でMySQL8.0を使用する場合は、同じバージョンに揃えたい時がある。
ここでは、MySQL8.0をインストールする方法を記載する。
MariaDBのアンインストール
もし、既にMariaDBがインストールされている場合は、MariaDBをアンインストールする。
まず、インストールされているパッケージの確認するため、以下のコマンドを実行する。
# RHEL sudo rpm -qa | grep maria # SUSE sudo zypper search -i | grep maria
RHELの場合、mariadb-libs-<バージョン名>.el<バージョン名>.<アーキテクチャ名>
と表示されるので、このパッケージをアンインストールする。
SUSEの場合、mariadbと表示されるので、このパッケージをアンインストールする。
# RHEL sudo dnf remove mariadb-libs sudo rm -rf /var/lib/mysql/ # SUSE sudo zypper remove mariadb mariadb-client mariadb-errormessages libmariadb3 akonadi-server akonadi-server-lang libQt5Sql5-mysql python3-mysqlclient sudo rm -rf /var/lib/mysql/
依存性関連のパッケージが存在すれば、同時に削除される。
MySQL公式リポジトリの追加と設定
過去のMySQLのGPGキーがインポートされている場合は削除する。
- 削除対象の鍵を確認する。
sudo rpm -q gpg-pubkey --qf '%{name}-%{version}-%{release} --> %{summary}\n'
- 過去のMySQLのGPGキーを削除する。
sudo rpm -e gpg-pubkey-XXXXXXXX-XXXXXXXX
- 過去のMySQLのGPGキーファイルを削除する。
sudo rm "/etc/RPM-GPG-KEY-mysql*"
まず、MySQL公式Webサイトからリポジトリを登録する必要がある。
- RHEL
- SUSE
または、以下のコマンドを実行して直接インストールする。
# RHEL 9 sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el9-1.noarch.rpm # RHEL 8 sudo dnf install https://dev.mysql.com/get/mysql80-community-release-el8-5.noarch.rpm # SUSE 15 sudo zypper install https://dev.mysql.com/get/mysql80-community-release-sl15-6.noarch.rpm sudo rpm --import /etc/RPM-GPG-KEY-mysql-2022 # MySQLリポジトリのパッケージの署名チェックに使用するMySQL製品用のGnuPGキーをシステムにインポートする sudo zypper refresh または sudo rpm -ivh mysql80-community-release-sl15-6.noarch.rpm sudo rpm --import /etc/RPM-GPG-KEY-mysql-2022 # MySQLリポジトリのパッケージの署名チェックに使用するMySQL製品用のGnuPGキーをシステムにインポートする sudo zypper refresh
このリポジトリを追加することで、MySQL5.5~5.7、8.0のいずれかを選択して、インストールすることができるようになる。
リポジトリが追加されたかどうかは、以下のコマンドで確認できる。
# RHEL sudo dnf repolist all | grep mysql # SUSE sudo zypper repos | grep mysql
上記のリストで[有効]と表示されている項目が、標準でインストールされるパッケージである。
MySQL8.0のインストール
リポジトリを追加してインストール
インストールを行う前に、パッケージのバージョンを確認する。
# RHEL sudo dnf info mysql-community-server # SUSE sudo zypper search --detail mysql-community-server
表示されているパッケージのバージョンが8.0.xxであれば、インストールを開始する。
インストールの途中において、MySQLのGPG公開鍵が無いというメッセージが表示されるが、
インストール時にGPG公開鍵も同時にインストールされるので、そのまま続ける。
# RHEL sudo dnf install mysql-community-server # SUSE sudo zypper install mysql-community-server
インストール完了後、MySQLのバージョンを確認する。
mysqld –-version
最後に、自動起動の設定をしてMySQLを起動する。
# RHEL sudo systemctl enable mysqld sudo systemctl start mysqld # SUSE sudo systemctl enable mysql sudo systemctl start mysql
ソースコードからインストール
ビルドに必要なライブラリをインストールする。
# SUSE sudo zypper install bison make cmake ninja git glibc-devel ncurses-devel perl-Data-Dump perl-Data-Dump-Streamer perl-Data-Dumper-Concise krb5-devel \ perl libtirpc3 libtirpc-devel rpcgen liblz4-devel libzstd-devel protobuf-devel libicu-devel \ libevent-devel libnuma-devel libfido2-devel libudev-devel systemd-devel doxygen \ libopenssl-devel libopenssl-1_1-devel # OpenSSL 1 を使用する場合 valgrind-devel # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである)
MySQLの公式Webサイトにアクセスして、MySQLのソースコードをダウンロードする。
[Product Version]は、インストールするMySQLのバージョンを選択、[Operating System]では"Source Code"を選択する。
表示されるリストから、最も下欄にある"mysql-boost-<バージョン>.tar.gz"をダウンロードする。
MySQL 5.7.5からBoostライブラリが必要になったため、Boostライブラリ同梱のものをダウンロードすること。
ただし、MySQL 8.3以降からBoostライブラリは不要になっている。
または、wget
コマンドを使用して直接ダウンロードする。
wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-<バージョン>.tar.gz
ダウンロードしたファイルを解凍する。
tar xf mysql-boost-<バージョン>.tar.gz cd mysql-boost-<バージョン>
MySQLのビルドディレクトリを作成する。
mkdir build && cd build
MySQLをビルドおよびインストールする。
# MySQL 8.2以前 cmake .. \ -DCMAKE_C_COMPILER=<GCC 8.1以降のgcc実行ファイルのパス> \ -DCMAKE_CXX_COMPILER=<GCC 8.1以降のg++実行ファイルのパス> \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<MySQLのインストールディレクトリ> \ -DDEFAULT_CHARSET=utf8mb4 \ -DWITH_EXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DSYSCONFDIR=<MySQLのインストールディレクトリ> \ -DMYSQL_DATADIR=<MySQLのインストールディレクトリ>/data \ -DWITH_BOOST=../boost \ # MySQL 8.2以前の場合 -DWITH_SYSTEMD=ON \ # Systemdサービスを使用する場合 -DWITH_VALGRIND=ON # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである) make -j $(nproc) make install # または cmake .. -G Ninja \ -DCMAKE_C_COMPILER=<GCC 8.1以降のgcc実行ファイルのパス> \ -DCMAKE_CXX_COMPILER=<GCC 8.1以降のg++実行ファイルのパス> \ -DCMAKE_BUILD_TYPE=Release \ -DCMAKE_INSTALL_PREFIX=<MySQLのインストールディレクトリ> \ -DDEFAULT_CHARSET=utf8mb4 \ -DWITH_EXTRA_CHARSETS=all \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DSYSCONFDIR=<MySQLのインストールディレクトリ> \ -DMYSQL_DATADIR=<MySQLのインストールディレクトリ>/data \ -DWITH_BOOST=../boost \ # MySQL 8.2以前の場合 -DWITH_SYSTEMD=ON \ # Systemdサービスを使用する場合 -DWITH_VALGRIND=ON # Valgrindを使用する場合 (Valgrindとは、LinuxにおけるC++のメモリリーク等の検知ツールのことである) ninja -C . ninja -C . install
/<MySQLのインストールディレクトリ>/libディレクトリから/<MySQLのインストールディレクトリ>/lib64ディレクトリへ、シンボリックリンクを作成する。
ln -s /<MySQLのインストールディレクトリ>/lib /<MySQLのインストールディレクトリ>/lib64
MySQLのインストールディレクトリに、以下のディレクトリとファイルを作成する。
# ディレクトリを作成 mkdir <MySQLのインストールディレクトリ>/data mkdir <MySQLのインストールディレクトリ>/tmp mkdir <MySQLのインストールディレクトリ>/logs
次に、MySQLのデータディレクトリを初期化する。(MySQL 5.7.6以降、mysql_install_dbは廃止されていることに注意する)
Systemdサービスユニットファイルの作成
MySQLをソースコードからインストールした時、
SystemdサービスからMySQLを起動および停止する場合は、Systemdサービスユニットファイルを作成する。
作成するファイルを以下に示す。
- mysqld.serviceファイル
- mysqld@.serviceファイル
- システム全体で使用する場合
- /etc/systemd/systemディレクトリ
- 各ユーザで使用する場合 (ただし、各ユーザごとに使用する場合は、特権ポート0〜1023番ポートは使用できない)
- ~/.config/systemd/userディレクトリ
# mysqld.serviceファイル [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network-online.target Wants=network-online.target After=syslog.target [Install] WantedBy=multi-user.target [Service] Type=notify # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root # hence, + prefix is used # Needed to create system tables ExecStartPre=+/<MySQLのインストールディレクトリ>/bin/mysqld_pre_systemd # Start main service ExecStart=/<MySQLのインストールディレクトリ>/bin/mysqld $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 10000 Restart=on-failure RestartPreventExitStatus=1 # Set enviroment variable MYSQLD_PARENT_PID. This is required for restart. Environment=MYSQLD_PARENT_PID=1 PrivateTmp=false PIDFile=/<MySQLのインストールディレクトリ>/tmp/mysqld.pid
# mysqld@.serviceファイル [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network-online.target Wants=network-online.target After=syslog.target [Install] WantedBy=multi-user.target [Service] Type=notify # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root # hence, + prefix is used # Needed to create system tables ExecStartPre=+/<MySQLのインストールディレクトリ>/bin/mysqld_pre_systemd %I # Start main service ExecStart=/<MySQLのインストールディレクトリ>/bin/mysqld --defaults-group-suffix=@%I $MYSQLD_OPTS # Use this to switch malloc implementation EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 10000 Restart=on-failure RestartPreventExitStatus=1 # Set enviroment variable MYSQLD_PARENT_PID. This is required for restart. Environment=MYSQLD_PARENT_PID=1 PrivateTmp=false
MySQLの設定ファイルの作成
MySQLのインストールディレクトリに、MySQLの設定ファイルであるmy.cnfファイルを作成する。
my.cnfファイルの設定内容については、インストール - MySQL8#my.cnfファイルのテンプレートのセクションを参照すること。
vi /<MySQLのインストールディレクトリ>/my.cnf
作成したmy.cnfファイルを、以下に示すように編集する。
cd <MySQLのインストールディレクトリ> # 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/<MySQLのインストールディレクトリ 例. \/home\/user\/InstallSoftware\/MySQL>/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
MySQLの初期化
MySQLの初期化を行う。
# MySQLの初期化 /<MySQLのインストールディレクトリ>/bin/mysqld --initialize \ --user=<my.cnfファイルのuserキーの値(ユーザ名)> \ # 例. mysql等 --basedir=<MySQLのインストールディレクトリ> \ --datadir=/<MySQLのインストールディレクトリ>/data
この時、my.cnfファイルの[log_error]セクションに設定したファイル(例. /<MySQLインストールディレクトリ>/logs/mysql_error.logファイル)に、
MySQLのrootユーザのパスワードが保存される。
# rootユーザのパスワードを確認 grep "temporary password" <[log_error]セクションに設定したファイル> 例. grep "temporary password" /<MySQLインストールディレクトリ>/logs/mysql_error.log
MySQLの起動
MySQLを起動する。
/<MySQLのインストールディレクトリ>/support-files/mysql.server start
MySQLのユーザの設定
MySQLの初期設定を行う。
# rootユーザで接続する /<MySQLのインストールディレクトリ>/bin/mysql -u root -p (/var/log/mysql/mysqld.logファイルに保存されたパスワードを入力する) # rootユーザのパスワードを変更する ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '<任意のパスワード>'; quit;
/<MySQLのインストールディレクトリ>/binディレクトリにあるmysql_secure_installationを実行する。
詳細は、インストール - MySQL8#MySQLの初期設定を参照すること。
/<MySQLのインストールディレクトリ>/bin/mysql_secure_installation
MySQLの停止
MySQLを停止するには、以下のコマンドを実行する。
この時、/var/lock/subsys/mysqlファイルを削除する必要があるため、スーパーユーザ権限で行う必要がある。
sudo /<MySQLのインストールディレクトリ>/support-files/mysql.server stop
MySQL Router
MySQL Routerは、MySQL InnoDB ClusterやInnoDB ReplicaSetで使用可能であり、ロードバランスや障害発生時のフェイルオーバーに対応したルーティングを透過的に実現するミドルウェア製品である。
詳細は、MySQL - MySQL Routerを参照すること。
my.cnfファイル
my.cnfファイルの各セクションの意味と役割を以下に示す。
- [mysqld]セクション
- MySQLサーバデーモン (バックグラウンドで動作するサーバプロセス) の設定を定義する。
- サーバの動作に関する全ての主要な設定 (メモリ、キャッシュ、ログ、文字コード等) が含まれる。
- このセクションの設定はサーバ全体に影響を与える。
- 例: innodb_buffer_pool_sizeキー、character-set-serverキー、portキー等
- [mysql]セクション
- MySQLコマンドラインクライアント (mysqlコマンド) 特有の設定を定義する。
- コマンドラインでMySQLに接続する際に使用される設定である。
- 主に、クライアントツールの動作に関する設定が含まれる。
- 例: default-character-setキー、promptキー、auto-vertical-outputキー等
- [client]セクション
- 全てのMySQLクライアントプログラム共通の設定を定義する。
- mysqlコマンドのみではなく、mysqldumpコマンド、mysqlimportコマンド、mysqladminコマンド等のクライアントツール全てに適用される。
- 主に、接続関連の設定が含まれる。
- portキー、socketキー、default-character-setキー等
- mysqldコマンドは、[mysqld]セクションの設定を使用する。
- mysqlコマンドは、[mysql]セクションおよび[client]セクションの両方の設定を使用する。
- mysqldumpコマンド等のその他のクライアントツールは、 [client]セクションの設定を使用する。
- 共通の接続設定は[client]セクションにまとめる。
- [mysql]セクションには、CLI固有の設定のみを記述する。
- [mysqld]セクションにはサーバ固有の設定を記述する。
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 default-character-set = CHARACTER_SET # 例: プロンプトの設定やその他のCLI固有の設定 prompt = '\u@\h [\d]> ' auto-vertical-output = 1 [client] port = PORT_NO user = USER_NAME socket = MYSQL_DATA_BASE_DIR/tmp/mysql.sock default-character-set = utf8mb4
MySQLのrootパスワードの確認
MySQLのインストール時にrootのパスワードがログに出力されているので確認する。
ここでは、V9djjjWFd_wfがrootのパスワードである。
sudo grep 'temporary password' /var/log/mysql/mysqld.log # 結果 2019-02-17T01:49:46.433912Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: V9djjjWFd_wf
MySQLの初期設定
MySQLの初期設定は、いくつかの質問に答えるだけで完了する。以下に、質問箇所を抜粋して記載する。
パスワードは8文字以上+大文字小文字+数値+記号を含める必要がある。
sudo mysql_secure_installation Enter current password for root (enter for none):(何も入力せずエンター) Set root password? [Y/n] y(設定する方が良いのでy) New password:(設定したいパスワードを入力) Re-enter new password:(設定したいパスワードを再入力) Remove anonymous users? [Y/n] y(匿名ユーザーは不要なのでy) Disallow root login remotely? [Y/n] y(rootでリモートログインはNGなのでy) Remove test database and access to it? [Y/n]y(テスト用のデータベースはいらないのでy) Reload privilege tables now? [Y/n]y(ここまでの設定を反映させるのでy)
続いて、文字コードの設定を行うため、以下のファイルを開く。
この設定を行わない場合、日本語が文字化けする可能性がある。
sudo vi /etc/my.cnf
[mysqld_safe]の上部辺りに、以下の4行を追加する。
character_set_server=utf8mb4 explicit_defaults_for_timestamp=true skip-character-set-client-handshake table_definition_cache=400
MySQLを再起動するため、以下のコマンドを実行する。
# RHEL sudo systemctl restart mysqld # SUSE sudo systemctl restart mysql
もし、rootユーザのパスワードを変更する場合、MySQLにログインして以下のコマンドを実行する。
ALTER USER 'root'@'localhost' IDENTIFIED BY '<パスワード>';
パスワードポリシーの変更
非推奨ではあるが、パスワードポリシー(短いパスワードを許可する)を変更する場合、MySQLにログイン後、以下のクエリを実行する。
初期状態では、validate_password.policy
がMEDIUM
となっている。
set global validate_password.length=6; # パスワードの最低の長さを変更 set global validate_password.policy=LOW; # セキュリティレベルの変更
現在のパスワードポリシーを確認する場合、MySQLにログイン後、以下のクエリを実行する。
SHOW VARIABLES LIKE 'validate_password%';
WordPressを使用する場合は、認証をパスワード式にする必要がある。
ALTER USER 'ユーザ名'@'ホスト名または%' IDENTIFIED WITH mysql_native_password BY ‘<パスワード>’;
MySQLユーザの作成
一般的に、rootユーザでデータベースを操作しないため、データベースユーザを作成する。
まず、MySQLにログインする。
sudo mysql -p Enter password:(rootユーザに設定したパスワード)
ここでは、全ての権限を持ったユーザを作成する。(通常はこのようなユーザは作成しない)
- MySQL8をローカル環境でのみ使用する場合
mysql> CREATE USER 'ユーザ名'@'ホスト名' IDENTIFIED BY 'パスワード'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'ホスト名'; mysql> FLUSH PRIVILEGES;
- MySQL8を外部のネットワークから接続する場合
mysql> CREATE USER 'ユーザ名'@'%' IDENTIFIED BY 'パスワード'; mysql> GRANT ALL PRIVILEGES ON *.* TO 'ユーザ名'@'%'; mysql> FLUSH PRIVILEGES;
以降は、このユーザで操作をするため、再ログインする。
mysql> exit; sudo mysql -u ユーザ名 -p Enter password:(作成したユーザに設定したパスワード)
※注意
PHP7からMySQL8以降に接続する場合、以下のエラーが出力されることがある。
Warning: PDO::__construct(): The server requested authentication method unknown to the client [caching_sha2_password]
これは、MySQL8以降、データベースユーザの認証プラグインがcaching_sha2_password
に変更されたが、
PHP7では、caching_sha2_password
が未サポートであることが原因である。
そのため、データベースユーザの認証プラグインをmysql_native_password
に変更することが必要となる。
まず、MySQL8に接続して、認証プラグインを確認する。
mysql> SELECT User, Host, Plugin FROM mysql.user;
次に、ユーザの認証プラグインをcaching_sha2_password
からmysql_native_password
に変更する。
mysql> ALTER USER 'ユーザ名'@'ホスト名または%' IDENTIFIED WITH mysql_native_password BY 'パスワード';
Dockerを使用している場合、Dockerのコンテナ内でユーザの認証プラグインを変更する手順を、以下に記載する。
まず、Dockerのコンテナに入る。
# DockerのCONTAINER IDを確認 docker ps # 上記のコマンドで確認したMySQL 8のCONTAINER IDを指定して、コンテナに接続する docker exec -it <CONTAINER ID> bash # コンテナ内でMySQL 8にログインする mysql -u root -p Enter password: <database.ymlで設定したパスワード> # User、Host、Pluginを確認する(例えば、以下のような全ユーザの認証プラグイン) mysql> SELECT User, Host, Plugin FROM mysql.user; +------------------+-----------+-----------------------+ | User | Host | Plugin | +------------------+-----------+-----------------------+ | root | % | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | caching_sha2_password | +------------------+-----------+-----------------------+ # 例: rootユーザの認証プラグインを変更する mysql> ALTER USER 'ユーザ名'@'ホスト名' IDENTIFIED WITH mysql_native_password BY 'パスワード' # 正常に変更されているか確認する mysql> SELECT User, Host, Plugin FROM mysql.user; +------------------+-----------+-----------------------+ | User | Host | Plugin | +------------------+-----------+-----------------------+ | root | % | caching_sha2_password | | mysql.infoschema | localhost | caching_sha2_password | | mysql.session | localhost | caching_sha2_password | | mysql.sys | localhost | caching_sha2_password | | root | localhost | mysql_native_password | <= 変更されているか確認 +------------------+-----------+-----------------------+
コンテナを削除して、再度、ビルドを行う。
docker-compose down docker-compose build
パスワードの変更
MySQL8において、パスワードを変更するには、以下のクエリを実行する。
USE mysql; ALTER USER '<ユーザ名>'@'<ホスト名または%>' identified BY '<パスワード>';
パスワードを忘れた場合の対処
もし、パスワードを忘れてログインできない場合は、まず、MySQLをセーフモードで起動して、パスワードなしでログインする。
まず、/etc/my.cnfファイルの[mysqld]セクションに以下の設定を追記する記述する。
sudo vi /etc/my.cnf # /etc/my.cnfファイル [mysqld] skip-grant-tables ; skip-grant-tablesで認証をOFF skip-networking ; skip-networkingで外部(リモート)からの接続を禁止
MySQLを再起動をして設定を反映する。
# RHEL sudo systemctl restart mysqld # SUSE sudo systemctl restart mysql
MySQLにログインする。
mysql -u root
MySQLのテーブルに格納されているrootユーザのパスワードを空にする。
USE mysql; UPDATE mysql.user SET authentication_string=null WHERE User='root';
/etc/my.cnfファイルの[mysqld]セクションの設定を元に戻す。
sudo vi /etc/my.cnf [mysqld] # skip-grant-tables # skip-networking
MySQLを再起動して設定を反映させる。
# RHEL sudo systemctl restart mysqld # SUSE sudo systemctl restart mysql
上記で設定した空のパスワード(rootユーザ)でログインして、rootユーザのパスワードを再設定する。
mysql -u root -p USE mysql; ALTER USER 'root'@'localhost' identified BY 'HogeHoge1';
MySQL WorkBenchのインストール
パッケージ管理システムを使用してインストール
MySQL WorkBenchと依存関係のライブラリをインストールする。
sudo zypper install mysql-workbench libOpenCL1 libantlr4-runtime4_7_2 libfreexl1 libgdal26 libgeos-3_6_2 libgeos_c1 libgeotiff5 libhdf5-103 \ libhdf5_cpp103 libhdf5_hl100 libkea1_4 libmariadb-devel libnetcdf15 libproj19 libscintilla3 \ libspatialite7 libvsqlitepp3 proj python python-enum34 python-ipaddress python-xml python2-PyNaCl python2-appdirs \ python2-asn1crypto python2-bcrypt python2-cffi python2-cryptography python2-idna python2-packaging python2-paramiko \ python2-pexpect python2-ptyprocess python2-pyasn1 python2-pycparser python2-pyparsing python2-setuptools python2-six
ソースコードからインストール
MySQLの公式Webサイトにアクセスして、MySQL WorkBenchのソースコードをダウンロードする。
または、GitHubからソースコードをクローンする。
git clone --depth 1 https://github.com/mysql/mysql-workbench.git
MySQL WorkBenchのビルドに必要なライブラリをインストールする。
sudo zypper install cmake autoconf automake pkg-config libtool libzip-devel libxml2-devel libsigc++2-devel libglade2-devel \ Mesa-libGL1 Mesa-libGL-devel Mesa-devel libmysqlclient-dev libmysqlcppconn-devel libuuid-devel \ libpixman-1-0-devel pcre-devel pango-devel cairo-devel python-devel libboost_headers1_66_0-devel \ mysql-client python-pysqlite sqlite3-devel swig vsqlite++-devel gdal-devel gtk3-devel gtkmm3-devel \ libopenssl-devel libsecret-devel proj-devel
- ANTLR(推奨)
- MySQLパーサ用のファイルを生成するには、ANTLR 4.7以降が必要である。
- ANTLRの公式Webサイトにアクセスして、antlr-<バージョン>-complete.jarファイルをダウンロードする。
- cmakeコマンドを実行する時、このjarファイルのパスをcmakeの引数として渡す必要がある。
- -DWITH_ANTLR_JAR=<antlr-<バージョン>-complete.jarファイルのパス>
- iodbc
- ミドルウェアにおいて、iodbcの代わりにunixODBCを使用する場合を記載する。
- まず、unixODBCをインストールする。
- cmakeコマンドを実行する時、
-DUSE_UNIXODBC=True
オプションを付加する。
- gdal
- Ubuntuの場合、unixodbcが必須である。
- もし、iodbcを使用する場合は、MySQL WorkBenchをソースコードからビルドする必要がある。
cmakeコマンドを実行して、MySQL WorkBenchをコンパイルする。
mkdir build && cd build cmake -DCMAKE_INSTALL_PREFIX=<MySQL WorkBenchのインストールディレクトリ> -DWITH_ANTLR_JAR=<antlr-<バージョン>-complete.jarファイルのパス> .. make -j 8
MySQL WorkBenchをインストールする。
make install DESTDIR=<MySQL WorkBenchのインストールディレクトリ>
トラブルシューティング
エラー : Public Key Retrieval is not allowed
クライアントがサーバから自動的に公開鍵を要求できるように、mysql-connectorにallowPublicKeyRetrieval=true
オプションを追加する必要がある。
これは、悪意のあるプロキシが平文のパスワードを取得するためのMITM攻撃を行う可能性があるため、標準ではfalse
になっており、明示的に有効にする必要がある。
また、テストや開発のために使用する場合は、useSSL=false
オプションも付加して接続してもよい。
詳細は、MySQLの公式Webサイトを参照すること。
# 接続コマンド jdbc:mysql://<Webサーバのホスト名>:<MySQLのポート番号>/db?allowPublicKeyRetrieval=true&useSSL=false # 例 jdbc:mysql://localhost:3306/db?allowPublicKeyRetrieval=true&useSSL=false
DBeaver
DBeaverは、Oracle、SQLServer、MySQL、MariaDB、SQLite等の計42種類のドライバに対応したSQLクライアントツールである。
DBeaverの詳細を知りたい場合は、インストール - DBeaverのページを確認すること。
※注意
データベース接続時において、以下のエラーが出力される場合がある。
SQL Error [08001]: Public Key Retrieval is not allowed
この時、DBeaverのメイン画面左の[データベースナビゲータ]から該当接続を右クリックして、[編集 接続]を選択する。
次に、[接続構成]画面右 - [ドライバのプロパティ]タブから、以下の項目を設定する。
- allowPublicKeyRetrieval
- trueに変更する。
- useSSL
- falseに変更する。
最後に、[接続構成]画面下の[OK]ボタンを押下する。
Adminer
PHPとMySQLやPostgreSQLと連携する時、データベースの内容をグラフィカルな環境で確認する場合、Adminerを使用すると便利である。
Adminerは、インストール不要であり、PHPファイルが1つで導入が簡単である。
1つのファイルで、MySQL、PostgreSQL、SQLite、MS SQL、Oracle DB、SimpleDB、Elasticsearch、MongoDBに対応している。
ただし、PCにデータベースドライバの導入は別途必要であることに注意する。
phpMyAdminやphpPgAdminは、導入に手間が掛かり、ブルートフォースアタックの対象になることもある。
Adminerの公式Webサイトにアクセスして、Adminer(PHPファイル)をダウンロードする。
ダウンロードしたファイルを、ドキュメントルート(/var/www/htmlディレクトリ等)に配置する。 (ファイル名は自由に変更してもよい)
phpMyAdmin
パッケージ管理システムからインストール
phpMyAdminのインストール
常にコマンドラインから操作することは面倒であるので、Webブラウザから操作できるphpMyAdminをインストールする。
PHPからMySQLを使用するために必要なパッケージが一式インストールできるので、phpMyAdminを使用する予定がなくても、
インストールしておくと便利である。
# RHEL sudo dnf install epel-release sudo dnf install phpmyadmin php-pecl-mcrypt # SUSE sudo zypper install phpMyAdmin
phpMyAdminの設定
まず、設定ファイルであるconfig.inc.phファイルを編集する。
config.inc.phpファイルに暗号化用のパスフレーズを設定する。これを行わないと、phpMyAdmin上でエラーが表示される。
(設定ファイルに暗号化(blowfish_secret)用の非公開パスフレーズの設定を必要とするようになった)
面倒な時は以下のコマンドを実行して、32桁のパスフレーズを作成する。
sudo openssl rand -base64 100 | fold -w 32 | head -1 出力例 : GgP1/5FMW7Nf3iX1rXmqeQj4k/mHAZDv
設定ファイルはサンプルがあるので、それをコピーして編集する。
sudo cp -a /usr/share/doc/phpMyAdmin-<バージョン>/config.sample.inc.php /etc/phpMyAdmin/config.inc.php sudo nano /etc/phpMyAdmin/config.inc.php
ファイルの先頭のあたりに存在する$cfg['blowfish_secret']
キーの値に、上記で作成したパスフレーズを入力する。
/** * This is needed for cookie based authentication to encrypt password in * cookie. Needs to be 32 chars long. */ $cfg['blowfish_secret'] = <パスフレーズ>; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
次に、phpMyAdmin.confファイルの設定を行う。
まず、アクセス権に関する設定を行う。(この設定を行うことにより、phpMyAdminにアクセスできる)
sudo nano /etc/httpd/conf.d/phpMyAdmin.conf
16行目と30行目にあるRequire local
の1つ下の行に以下の設定を追加する。
# Apache 2.4 Require ip 192.168.xxx.0/24
編集を完了したら、Apacheを再起動する。
sudo systemctl restart httpd
Webブラウザから、http://localost/phpmyadmin/ にアクセスし、ログイン画面が表示されることを確認する。
※上記のURLでエラーが表示される場合
もし、下記のようなエラーが出力される場合は、外部と通信しないローカル環境のみのサーバなので、
セッション情報を保存するsessionディレクトリの権限を変更する。
# エラー内容 phpMyAdmin - Error Error during session start; please check your PHP and/or webserver log file and configure your PHP installation properly. Also ensure that cookies are enabled in your browser. session_start(): open(SESSION_FILE, O_RDWR) failed: Permission denied (13) session_start(): Failed to read session data: files (path: /var/lib/php/session) sudo chmod 777 /var/lib/php/session
また、下記のようなエラーが出力される場合は、tempディレクトリの権限を変更する。
# エラー内容 $cfg['TempDir'] (/var/lib/phpMyAdmin/temp/)にアクセスできません。 phpMyAdmin はテンプレートをキャッシュすることができないため、低速になります。 sudo chmod 777 /var/lib/phpMyAdmin/temp
※phpMyAdminにログインできない場合
接続方式を変更するために、rootユーザでMySQLにログインする。
sudo mysql -u root -p
次に、以下のクエリを発行する。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'パスワード'; mysql> FLUSH PRIVILEGES;
最後に、MySQLを再起動する。
# RHEL sudo systemctl restart mysqld # SUSE sudo systemctl restart mysql
phpMyAdminにログインできるか確認する。
手動でインストール
phpMyAdminの公式Webサイトにアクセスして、phpMyAdminをダウンロードする。
ダウンロードしたファイルを解凍する。
unzip phpMyAdmin-<バージョン>-all-languages.zip mv phpMyAdmin-<バージョン>-all-languages phpMyAdmin
解凍したphpMyAdminのディレクトリを、Apache2またはNginXのドキュメントルートに移動する。
phpMyAdmin用の仮想ホストを構築していることが望ましい。
mv phpMyAdmin <Apache2またはNginXのドキュメントルート> cd /<Apache2またはNginXのドキュメントルート>/phpMyAdmin
phpMyAdminの設定を行う。
cp config.sample.inc.php config.inc.php vi config.inc.php
# config.inc.phpファイル
# 編集前
$cfg['Servers'][$i]['host'] = 'localhost';
# 編集後
$cfg['Servers'][$i]['host'] = '<ホスト名またはIPアドレス>:<MySQLのポート番号>';
// 例. $cfg['Servers'][$i]['host'] = '127.0.0.1:3306';