2025年08月12日

Nextcloud のメンテナンス(1):MySQLを5.7から8.0に切り替える

 いつも黙々と働いてくれている Nextcloud ですが、ふと気がつくとバージョンがはるか先まで進んでおりました。31.0.7 ってマジ?? うちで動かしてるの 28.0.7 だよ。放置しすぎやな。

20250812-1.jpg

 ちょうど夏休み中なので、アップグレード祭りをやります。その前に、前からずーーーーっと文句を言われ続けている、MySQL のバージョンをなんとかしたいな。(Nextcloud 21 以降はサポートしないぞ、と脅かされているんですが、そのまま放置している)

20250812-2.jpg

 ロリポップは MySQL 8.0 を提供しているので、対応できるはずなのですが、やり方がよくわからないのです。Nextcloud のサポートコミュニティで質問している人がいました。データベースのバックアップ/復元の手順を踏めばよいようですね。

I can register a new MySQL 8.0 or MariaDB 10.2 DB in my Ionos Web Interface.
But how can I create the correct DB scheme and copy the relevant data?

If you're unable to upgrade the db server itself (which is what it sounds like since it's semi-outsourced), you should be able to treat it as a backup+restore scenario (database only!). There are several sections in the Admin Manual describing the process (at least from the command line).
E.g.
https://docs.nextcloud.com/server/latest/admin_manual/maintenance/backup.html
https://docs.nextcloud.com/server/latest/admin_manual/maintenance/restore.html
Just only do the stuff that is database specific (well, and also put NC into maintenance mode throughout).

How to upgrade/migrate the SQL Database (5.7.41-log => 8.0+)?

 まず、Nextcloud をメンテナンスモードにします。config/config.php"maintenance" => false, の行を "maintenance" => true に書き換えます。ロリポップFTP を使えば、オンラインで編集できます。

20250812-8.jpg

 Nextcloud のマニュアルでは、コマンドラインで mysqldump を使ってバックアップを作成しています。しかし、ロリポップのライトプランは ssh アクセスをサポートしていないので、このやり方は使えません。代わりに、phpMyAdmin を使います。ロリポップのサーバ管理ページから、「データベース」→「操作する」→「phpMyAdminを開く」と進みます。

20250812-4.jpg

20250812-5.jpg

 ユーザー名とパスワードを入れて、サーバを選択して(忘れがち)、phpMyAdmin の画面を開きます。

20250812-6.jpg

20250812-3.jpg

 「エキスポート」でデータベースの内容をファイルに書き出します。エキスポート方法は「簡易」でよいと思います。ブラウザによって sql ファイルがダウンロードされます。サイズは 47 MB でした。

20250812-7.jpg

 ロリポップのサーバ管理ページに戻って、データベースを新しく作成します。現在は MySQL 8.0 のみ選択できるようです。

20250812-9.jpg

 新しいデータベースを phpMyAdmin で開き、「インポート」を選択します。

20250812-10.jpg

 先ほど作成したファイルの最初の方に、データベース名があります。これを、新しいデータベース名に書き換えておきます。

--
-- データベース: `XXX0123456-xy`
--
CREATE DATABASE IF NOT EXISTS `XXX0123456-xy` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
USE `XXX0123456-xy`;

 修正済みのファイルをインポートすると、元のデータベースが復活しました!(と思われる)

20250812-12.jpg

 さて、config/config.php を書き換えて、新しいデータベースで運用します。書き換えるところは、dbname, dbhost です。maintenancefalse に戻します。

20250812-13.jpg

 無事起動しました! MySQL のバージョンはちゃんと 8.0 になっています。

20250812-14.jpg

Posted at 2025年08月12日 14:25:50
email.png