概要
この記事では、Linux環境にMySQLを導入する手順について詳しく説明します。MySQLは、Webアプリケーションやサーバー環境で広く使用されるオープンソースのリレーショナルデータベース管理システム(RDBMS)です。初めてMySQLをインストールする場合、いくつかのステップを踏む必要がありますが、本記事を参考にすることで、LinuxにMySQLを簡単に導入することができます。インストールからセキュリティ設定、サービスの起動までをカバーしています。これにより、LinuxでMySQLを使用する準備が整います。
以下の手順は、CentOS 7およびAlmaLinux 8で検証済みです。
1. 事前確認
MySQLがインストールされているかの確認
rpm -qa | grep mysql
インストール済の古いバージョンの削除
rpm -e --nodeps {mysqlのバージョン}
OSのビット数の確認
getconf LONG_BIT
2. インストーラのダウンロード
以下のページからインストーラをダウンロードします。
MySQLインストーラ
私がインストールしたバージョンの設定情報は以下の通りです。
3. 圧縮解凍
cd /usr/local/
tar -xvf /tmp/mysql-8.0.25-linux-glibc2.17-x86_64.tar.xz
mv mysql-8.0.25-linux-glibc2.17-x86_64 mysql
4. MySQL用データディレクトリの作成
mkdir /usr/local/mysql/data
5. MySQL用グループとユーザの作成
cd /usr/local/mysql
groupadd mysql
useradd -g mysql mysql
chown -R mysql:mysql /usr/local/mysql
6. 設定情報の変更
/etc/my.cnf
ファイルを開き、既存の設定情報を全て削除し、以下の設定情報を追加します。
[mysql]
default-character-set=utf8
[mysqld]
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=200
character-set-server=utf8
default-storage-engine=INNODB
lower_case_table_names=1
max_allowed_packet=16M
socket=/usr/local/mysql/mysql.sock
symbolic-links=0
[client]
port=3306
socket=/usr/local/mysql/mysql.sock
!includedir /etc/my.cnf.d
7. 初期化
cd /usr/local/mysql/bin/
./mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize
初期化後、rootユーザのパスワードが生成されます。このパスワードをメモしてください。
8. サービスの有効化
サービスを起動時に自動的に起動するように設定します。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
chkconfig --add mysql
9. MySQLの起動とrootユーザのパスワード変更
# MySQLの起動
service mysql start
# MySQLに接続
cd /usr/local/mysql/bin/
./mysql -u root -p
# rootユーザのパスワード変更
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';
flush privileges;
10. リモートアクセス設定
MySQLデータベースに対してusernameユーザを使用してリモートアクセスできるように設定します。
mysql> use mysql;
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| username | localhost |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
mysql> update user set host = '%' where user = 'username';
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| username | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
5 rows in set (0.00 sec)
セキュリティ対策
Rootユーザのパスワード設定
MySQLのrootユーザに強力なパスワードを設定して、不正アクセスを防ぎます。
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新しいパスワード';
不要なユーザと権限の削除
不要なユーザアカウントや不必要な権限を削除して、攻撃者の侵入経路を制限します。
DROP USER 'username'@'localhost';
アクセス制御の設定
MySQLのアクセス制御機能を使用して、許可されたホストからのみ接続を許可します。
GRANT ALL PRIVILEGES ON *.* TO 'username'@'hostname' IDENTIFIED BY 'password' WITH GRANT OPTION;
暗号化の有効化
MySQLの通信を暗号化して、データの盗聴や改ざんを防ぎます。
SET GLOBAL require_secure_transport = ON;
ログの設定
MySQLのログを適切に設定して、セキュリティイベントを追跡し、潜在的な脆弱性を検出します。
[mysqld]
log_error = /var/log/mysql/error.log