MIGRATION ROADMAP — 全17工程
- ① SSH、ユーザー追加
- ② IPv4/IPv6追加、netplan、ufw
- ③ Apache2
- ④ Let's Encrypt
- ⑤ PHP
- ⑥ MariaDB
- ⑦ WordPress
- ⑧ Dovecot、Postfix
- ⑨ Vsftpd
- ⑩ Python
- ⑪ llama.cpp、ChromaDB
- ⑫ Anaconda、Keras、TensorFlow
- ⑬ Node.js
- ⑭ MongoDB
- ⑮ Mosquitto
- ⑯ RabbitMQ
- ⑰ Supervisor
01「MySQL」のつもりが、実はMariaDBだった
当初はロードマップ通り「MySQL」として計画していたが、mysqldumpのヘッダーを確認したところ、旧サーバーは実際にはMariaDB 10.11だった。
appw_dump.sql(先頭部分)
/*M!999999\- enable the sandbox mode */
-- MariaDB dump 10.19 Distrib 10.11.14-MariaDB, for debian-linux-gnu (x86_64)
--
-- Host: localhost Database: appw
-- Server version 10.11.14-MariaDB-0ubuntu0.24.04.1
/*M!999999...*/というMariaDB独自のバージョン条件付きコメント記法が使われている時点で、これはMariaDB前提のダンプだと分かる。
MySQLでも大半は問題なく読み込める可能性はあるが、GROUP BYの挙動やSQL_MODEの既定値、JSON関連の実装差など細部で挙動が異なるため、
わざわざ製品自体を乗り換えるリスクを取る理由はない。旧サーバーと同じMariaDB系統で進めることにした。
02インストール
Ubuntu 26.04の標準リポジトリにはMySQL 8.4とMariaDB 11.8の両方が入っている。今回はMariaDBを選択。
旧サーバーの10.11から11.8への、同系統内でのバージョンアップという位置づけになる。
login-user@新サーバー
$ sudo apt update
$ sudo apt install mariadb-server
$ sudo mysql_secure_installation
sudo: mysql_secure_installation: command not found
mysql_secure_installationが見つからない
MariaDB 10.4.6以降、mariadb-secure-installationが正式なコマンド名になっており、mysql_secure_installationは互換用のシンボリックリンクとして提供されてきた。
新しいパッケージではこの互換リンク自体が省かれていることがあり、今回はまさにそのケースだった。
login-user@新サーバー
$ sudo mariadb-secure-installation
036データベース、サイトごとのユーザーで分離
③⑤で続けてきたサイトごとの分離方針を踏襲し、データベースもサイト単位でユーザーを分けた。
gwaw.jpだけ3データベースあるが、1サイト=1ユーザーとし、そのユーザーに3データベースぶんの権限を付与する形にした。
| サイト | データベース | ユーザー |
| appw.jp | appw | appw |
| gwaw.jp | gwaw_01_db / gwaw_02_db / gwaw_03_db | gwaw |
| ibe.tokyo | ibe | ibe |
| iseeit.jp | iseeit | iseeit |
login-user@新サーバー
$ sudo mariadb -u root -p
MariaDB [(none)]> CREATE DATABASE appw CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE USER 'appw'@'localhost' IDENTIFIED BY '****';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON appw.* TO 'appw'@'localhost';
MariaDB [(none)]> CREATE DATABASE gwaw_01_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE DATABASE gwaw_02_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE DATABASE gwaw_03_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE USER 'gwaw'@'localhost' IDENTIFIED BY '****';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON gwaw_01_db.* TO 'gwaw'@'localhost';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON gwaw_02_db.* TO 'gwaw'@'localhost';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON gwaw_03_db.* TO 'gwaw'@'localhost';
MariaDB [(none)]> CREATE DATABASE ibe CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE USER 'ibe'@'localhost' IDENTIFIED BY '****';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON ibe.* TO 'ibe'@'localhost';
MariaDB [(none)]> CREATE DATABASE iseeit CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
MariaDB [(none)]> CREATE USER 'iseeit'@'localhost' IDENTIFIED BY '****';
MariaDB [(none)]> GRANT ALL PRIVILEGES ON iseeit.* TO 'iseeit'@'localhost';
MariaDB [(none)]> FLUSH PRIVILEGES;
04復元
ダンプ側にSET NAMES utf8mb4が最初から入っていたため、文字コード変換の作業は不要だった。データベースをutf8mb4で作成しておくだけで済んだ。
login-user@新サーバー
$ mariadb -u appw -p appw < /path/to/appw_dump.sql
$ mariadb -u gwaw -p gwaw_01_db < /path/to/gwaw_01_dump.sql
$ mariadb -u gwaw -p gwaw_02_db < /path/to/gwaw_02_dump.sql
$ mariadb -u gwaw -p gwaw_03_db < /path/to/gwaw_03_dump.sql
$ mariadb -u ibe -p ibe < /path/to/ibe_dump.sql
$ mariadb -u iseeit -p iseeit < /path/to/iseeit_dump.sql
確認完了
6データベースすべてインポート完了。各サイトの接続設定(wp-config.php等)のDB名・ユーザー名・パスワードとの整合はここで確認済み。
05ここまでの状態
- 旧サーバーがMariaDB 10.11だったと判明し、Ubuntu 26.04標準のMariaDB 11.8で継続する方針に修正
mariadb-secure-installationで初期セキュア化
- appw、gwaw(3DB)、ibe、iseeitの6データベースを、サイトごとのユーザーで作成・復元