MySQL8.4.8インストールから初期設定

 MYSQLを久しぶりに使おうとしたところ、テスト環境でmysqlが起動しなくなっていることに気づき再インストールしました。もう一度インストールからテーブルの作成まで備忘録を残しておきます。
※私の環境では過去のバージョンが残っていたようで、うまく起動しませんでしたが、過去のデータを削除したところ正常に起動しました。
[mysql_secure_installation]は使えなくなったようです。

環境

OS Ubuntu 25.10
MYSQL 8.4.8

インストール手順

①インストール

 APTコマンド便利ですね。Windowsもこんな感じにすればいいのにと思う今日この頃です。
 windowsではコマンドプロンプトに慣れてしまったので、PowerShellのコマンドが全く頭に入ってきません。
 だいたいコマンド名が長すぎるのが悪いと思っています。覚えられる人がうらやましい。

# bash
$ > sudo apt update
$ > sudo apt upgrade   # 全部をバージョンアップします
$ > sudo apt search mysql-serve
:
mysql-server/questing-updates,questing-security,now 8.4.8-0ubuntu0.25.10.1 amd64 [インストール済み]
  MySQL database server and system database setup
mysql-server-8.0/now 8.0.41-0ubuntu0.24.10.1 amd64 [設定が残存]
  (none)
:
# 執筆時の最新バージョンが8.4.8でした

$ > sudo apt install mysql-serve
$ > mysql --version
mysql  Ver 8.4.8-0ubuntu0.25.10.1 for Linux on x86_64 ((Ubuntu))
$ > sudo mysql 
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded

②初期設定(失敗 → 過去バージョン削除 → 初期設定)
 私の環境ではなぜか初期設定がうまくいかず、起動しませんでした。
 どうも過去のバージョンと混ざってしまい、起動を妨げている様子でしたので、いったん過去のバージョンをすべて削除することにしました。

# bash
# MYSQLを一旦止めてセーフモードでログイン
$ > sudo systemctl stop mysql
$ > sudo mysqld_safe --skip-grant-tables --skip-networking &
$ > sudo mysql 
ERROR 1524 (HY000): Plugin 'mysql_native_password' is not loaded
# 起動できない → 完全再インストールを検討

# 過去のバージョンを完全削除 -> 再初期設定
$ > sudo systemctl stop mysql
$ > sudo killall mysqld    # 念のためプロセスも削除
mysqld: no process found
$ > sudo rm -rf /var/lib/mysql
$ > sudo mkdir /var/lib/mysql
$ > sudo chown mysql:mysql /var/lib/mysql
$ > sudo chmod 750 /var/lib/mysql
$ > sudo mysqld --initialize --user=mysql --datadir=/var/lib/mysql
$ > sudo systemctl start mysql
$ > sudo mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO)
# 動きそう!

# 初期設定(初期パスワードの確認)
$ > sudo grep 'temporary password' /var/log/mysql/error.log
2026-02-22T09:04:24.279729Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ????????

$ > mysql -u root -p
Enter password: ????????  # パスワードを入力
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.4.8-0ubuntu0.25.10.1
:
mysql > 

# 正常に起動しました。 
# 起動後のパスワード変更は必ず行ってください

mysql > ALTER USER 'root'@'localhost' IDENTIFIED BY 'newpassword';
# rootユーザのパスワード設定

# 登録ユーザの確認 初期状態だとこのようになっていると思います
mysql > select user from mysql.user;
+------------------+
| user             |
+------------------+
| mysql.infoschema |
| mysql.session    |
| mysql.sys        |
| root             |
+------------------+
4 rows in set (0.01 sec)

# 終了
mysql > exit
Bye
$ >

ユーザ登録

 新しいdatabaseを作成して、このデータベースを使えるユーザを登録します。

# bash
$ > mysql -u root -p
Enter password: 作成したパスワードを入力
:

# 新しいデータベースの作成
mysql > CREATE DATABASE testdb;
Query OK, 1 row affected (0.00 sec)

# 確認
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| testdb             |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

# データベースの切替
mysql> use testdb;
Database changed
mysql> CREATE USER 'remortuser'@'%' IDENTIFIED BY '********';

# リモートユーザの追加
mysql> select user from mysql.user;
+------------------+
| user             |
+------------------+
| remortuser       | # リモートユーザが追加された
:
| root             |
+------------------+

# 権限の追加
mysql> GRANT ALL PRIVILEGES ON testdb.* TO 'remortuser'@'%';
mysql> FLUSH PRIVILEGES;
# % はどこからでも接続可能。
# 接続元IPの固定ができるなら 192.168.0.105 等としてください

外部接続の設定

 初期状態ではMYSQLに外部から接続できなくなっていますので、がいぶから接続できるように変更します。

# bash

# MYSQLの設定ファイルを開く
$ > sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

# nano による編集
bind-address = 127.0.0.1
↓
bind-address = 0.0.0.0
# に変更

# MYSQLの再起動
$ > sudo systemctl restart mysql

# IPの確認
$ > hostname -I
192.168.254.128

別のPCからリモート接続ができるか確認

# cmd (windows)
c:\ > ssh リモートユーザ@192.168.254.128
:
$ > mysql -u remortuser -p -h 192.168.254.128
Enter password:********
Welcome to the MySQL monitor.  Commands end with ; or \g.
:
mysql>

# リモートログインが成功しました

テーブルの作成

# bash
$ > mysql -u remortuser -p
Enter password:********
:
mysql > use testdb;
mysql > CREATE TABLE test_user (
  user_id INT AUTO_INCREMENT PRIMARY KEY,
  number INT,
  name VARCHAR(50),
  pass VARCHAR(255),
  score INT DEFAULT 0,
  registered_at DATETIME DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

 これでテーブルができました。
 さてプロジェクト始めましょうか。

感想

 MYSQLのインストールはプロジェクトを始めるたびにやってる気がします。
 バージョンが上がると、仕様が結構変わっているので、命令とかあんまり変えないでほしいと思っているのは私だけではないはず。
 業界ではよくあることなので仕方ないのでしょうね。