LoginSignup
18
27

遂にLinuxにMySQLを導入完了!

Last updated at Posted at 2024-02-16

概要

この記事では、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インストーラ
私がインストールしたバージョンの設定情報は以下の通りです。
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
18
27
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
27