Migrating Nextcloud from SQLite to MySQL with Docker
Ferdinand Mütsch 02.10.2020
Einleitung:
Es gibt sicherlich schon unzählige Tutorials zu diesem Thema, und auch die Nextcloud-Dokumentation ist hervorragend. Ich möchte hier jedoch kurz den Prozess der Migration einer Nextcloud-19-Instanz von SQLite zu MySQL als Datenbank-Backend dokumentieren.
Weitere Informationen finden Sie im offiziellen Leitfaden.
Setup:
Meine Ausgangssituation besteht aus zwei bestehenden, laufenden Docker-Containern: einem für Nextcloud und einem für einen MySQL-Server , den ich auch für andere Anwendungen nutze.
$ docker ps
3bea098afb11 nextcloud:19 "/entrypoint.sh apac…" vor 6 Wochen Aktiv seit 7 Tagen 127.0.0.1:9000->80/tcp nextcloud
a140a0ba21d3 mysql:5.7 "docker-entrypoint.s…" vor 11 Monaten Aktiv seit 8 Tagen 127.0.0.1:3306->3306/tcp, 33060/tcp mysql
Migration:
Erstellen einer neuen Datenbank Zuerst wird eine neue Datenbank benötigt, die später von Nextcloud befüllt werden kann. Verwenden Sie dazu den vom Docker-Container bereitgestellten MySQL-Befehlszeilenclient, um interaktiv eine neue Datenbank und einen entsprechenden Benutzer zu erstellen.
$ docker exec -it nextcloud mysql -u root -p;
Nach Eingabe Ihres Root-Passworts sind Sie in der interaktiven SQL-Konsole angemeldet. Führen Sie die folgenden Abfragen aus:
CREATE DATABASE 'nextcloud';
CREATE USER 'nextcloud_user'@'%' IDENTIFIED BY 'some-secret-password';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'%';
ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
FLUSH PRIVILEGES;
Wie in der Nextcloud-Dokumentation beschrieben, müssen Sie die Unterstützung für 4-Byte-UTF-8 in MySQL explizit aktivieren. Dies geschieht mit der letzten der oben genannten Abfragen.
Docker-Netzwerk konfigurieren:
Wenn Sie Docker verwenden, benötigt Ihr Nextcloud-Container eine Möglichkeit zur Kommunikation mit Ihrem Datenbank-Container. Dazu müssen sich beide im selben virtuellen Netzwerk befinden. Im Folgenden wird gezeigt, wie Sie ein neues Netzwerk (namens „mysql“) erstellen und beide Container damit verbinden.
$ docker network create mysql
$ docker network connect mysql mysql
$ docker network connect mysql nextcloud
Angenommen, der Datenbank-Container hat den Namen mysql, wie in diesem Beispiel, kann der Nextcloud-Container nun einfach über den DNS-Namen mysql darauf zugreifen.
Datenmigration:
Im zweiten Schritt kommt das hervorragende Nextcloud-Befehlszeilentool occ zum Einsatz. Es übernimmt im Wesentlichen die gesamte Arbeit für Sie. Folgen Sie einfach diesen Schritten.
Hinweis: Wenn Sie keine Docker-Umgebung, sondern eine native Nextcloud-Installation verwenden, lassen Sie den Befehl docker exec einfach weg und führen Sie php occ direkt aus.
Zuerst aktivieren wir den Wartungsmodus, um die Daten einzufrieren.
$ docker exec -it -u www-data nextcloud php occ maintenance:mode --on
Als Nächstes führen wir den serverseitigen Teil der oben erwähnten Migration zur 4-Byte-UTF-8-Unterstützung durch.
$ docker exec -it -u www-data nextcloud php occ config:system:set mysql.utf8mb4 --type boolean --value="true"
$ docker exec -it -u www-data nextcloud php occ maintenance:repair
Nun können wir die eigentliche Migration von SQLite zu MySQL durchführen. Dies kann je nach Größe Ihrer Datenbank einige Zeit dauern. Meine Datenbank war glücklicherweise nur etwa 27 MB groß.
$ docker exec -it -u www-data nextcloud php occ db:convert-type --all-apps --clear-schema mysql nextcloud_user mysql nextcloud
Deaktivieren Sie schließlich den Wartungsmodus wieder.
$ docker exec -it -u www-data nextcloud php occ maintenance:mode --off
Wenn alles geklappt hat, hat Nextcloud seine Konfiguration aktualisiert und verwendet nun die MySQL-Datenbank anstelle von SQLite. Sie können dies unter http://your-nextcloud-server.tld/settings/admin/serverinfo überprüfen.
Fazit: Dank der hervorragenden Tools und Dokumentation der Nextcloud-Community konnte ich meine Nextcloud-Instanz mithilfe des oben beschriebenen Prozesses erfolgreich von der als „langsam“ geltenden SQLite-Datenbank auf MySQL umstellen. Ich hoffe, es funktioniert auch bei Ihnen.
Viel Erfolg!
P.S.: Bitte beachten Sie, dass sich der Startbefehl für Ihren Nextcloud-Container geändert hat. Wenn Sie beispielsweise Ihren Container aktualisieren möchten, müssen Sie andere Parameter als zuvor angeben. Folgendes funktioniert bei mir:
$ docker run -d -v /var/data/nextcloud:/var/www/html -v /var/data/nextcloud/data/:/var/www/html/data -p 127.0.0.1:9000:80 --network mysql -e MYSQL_DATABASE=nextcloud -e MYSQL_USER=nextcloud_user -e MYSQL_PASSWORD=iwonttellyouthis -e MYSQL_HOST=mysql --name nextcloud nextcloud:33
(Noch besser wäre es, hier keine Dateisystem-Mounts, sondern echte Docker-Volumes zu verwenden.)
Quelle: https://muetsch.io/migrating-nextcloud-from-sqlite-to-mysql-with-docker.html
Übersetzung: Francisco Sanchez
Deutsch
English
Español
Commentaires (0)
Laisser un commentaire