OpenBiblio Migration¶
Du nutzt das alte OpenBiblio? So migrierst du alle Daten zu OpenLibry.
Fortgeschritten
Diese Anleitung erfordert Kenntnisse in SQL, Docker/Podman und der Kommandozeile. Falls du unsicher bist, hol dir Hilfe von jemandem mit IT-Erfahrung.
Übersicht¶
OpenBiblio speichert Daten in einer MySQL-Datenbank mit einem speziellen Schema. Wir:
- Starten eine temporäre MySQL-Instanz
- Importieren die alten Daten
- Exportieren als JSON
- Importieren in OpenLibry via API
Voraussetzungen¶
- OpenBiblio-Backup (MySQL-Dateien)
- Docker oder Podman installiert
- Laufende OpenLibry-Installation
Schritt 1: MySQL-Container starten¶
Erstelle eine docker-compose.yaml:
version: "3.1"
services:
db:
container_name: mysql-server-db
image: biarms/mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: test_db
ports:
- "3308:3306"
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
restart: always
environment:
PMA_HOST: db
PMA_USER: root
PMA_PASSWORD: root
ports:
- "8080:80"
Starten:
Schritt 2: OpenBiblio-Daten importieren¶
Datenbank erstellen¶
- Öffne phpMyAdmin: http://localhost:8080
- Erstelle eine Datenbank namens
openbiblio
Dateien kopieren¶
Kopiere die OpenBiblio-Backup-Dateien in den Container:
# Für jede Tabellen-Datei (Beispiel):
docker cp ./input/member.frm mysql-server-db:/var/lib/mysql/openbiblio/
docker cp ./input/member.MYD mysql-server-db:/var/lib/mysql/openbiblio/
docker cp ./input/member.MYI mysql-server-db:/var/lib/mysql/openbiblio/
# Wiederholen für: biblio, biblio_copy, biblio_field, biblio_status_hist, etc.
Berechtigungen setzen¶
Schritt 3: Daten als JSON exportieren¶
In phpMyAdmin:
Wichtig: Sortiert exportieren!
Exportiere die Daten sortiert nach create_dt (älteste zuerst), damit die Ausleihhistorie stimmt.
Member exportieren¶
- SQL ausführen:
SELECT * FROM member ORDER BY member.create_dt ASC - Export → JSON
- Als
member.jsonspeichern
Bücher exportieren¶
Exportiere diese Tabellen als JSON:
biblio→biblio.jsonbiblio_field→biblio_field.jsonbiblio_copy→biblio_copy.jsonbiblio_status_hist→biblio_status_hist.json
JSON zusammenführen¶
Erstelle eine Datei book_all.json mit dieser Struktur:
{
"biblio": [ /* Inhalt von biblio.json */ ],
"biblio_field": [ /* Inhalt von biblio_field.json */ ],
"biblio_copy": [ /* Inhalt von biblio_copy.json */ ],
"biblio_status_hist": [ /* Inhalt von biblio_status_hist.json */ ]
}
Validieren
Prüfe das JSON mit einem Validator, bevor du importierst.
Schritt 4: In OpenLibry importieren¶
OpenLibry vorbereiten¶
Falls du eine frische Installation möchtest:
cd openlibry
rm database/dev.db
rm -rf prisma/migrations
npx prisma migrate dev --name init
npm run dev
Nutzer importieren¶
curl -X POST \
-H "Content-Type: application/json" \
-d @member.json \
http://localhost:3000/api/openbiblioimport/migrateUsers
Bücher importieren¶
curl -X POST \
-H "Content-Type: application/json" \
-d @book_all.json \
http://localhost:3000/api/openbiblioimport/migrateBooks
Migrierte Felder¶
Bücher¶
OpenBiblio-Felder werden so übertragen:
| OpenBiblio | OpenLibry |
|---|---|
| 20a | isbn |
| 20c | supplierComment (Beschaffungsangaben) |
| 250a | editionDescription (Ausgabebezeichnung) |
| 260a | publisherLocation (Erscheinungsort) |
| 260b | publisherName (Verlag) |
| 260c | publisherDate (Erscheinungsjahr) |
| 300a | pages (Umfang) |
| 300b | otherPhysicalAttributes |
| 300c | physicalSize (Ausmaße) |
| 300e | additionalMaterial (Begleitmaterial) |
| 520a | summary (Zusammenfassung) |
| 541h | price (Kaufpreis) |
| 901a | minPlayers |
| 901c | minAge |
| 901d | maxAge |
Ausleihstatus¶
| OpenBiblio | OpenLibry |
|---|---|
| in | available |
| out | rented |
| mnd | broken |
| dis | presentation |
| hld | ordered |
| lst | lost |
| ln | remote |
| ord | ordered |
| crt | available |
Fehlerbehebung¶
"Body exceeds limit"¶
Die maximale Importgröße ist auf 250 MB begrenzt. Anpassen:
Import bricht ab¶
- JSON validieren
- Kleinere Batches versuchen
- Logs prüfen
Ausleihhistorie stimmt nicht¶
- Sortierung prüfen (älteste zuerst)
biblio_status_histvollständig exportiert?
Nach der Migration¶
- ✅ Stichproben prüfen (Bücher, Nutzer, aktuelle Ausleihen)
- ✅ Backup der neuen Datenbank erstellen
- ✅ Container aufräumen:
docker compose down - ✅ Cover-Bilder per ISBN nachladen
Hilfe¶
Bei Problemen: