Beiträge von nexxx85
-
-
-
-
Hallo zusammen!
Vorwort
Ich habe mir vor ca. 1 Monat einen Raspberry 3 gekauft um ihn als zentrale MYSQL Datenbank zu verwenden. Leider war ich mit der Performance nicht zufrieden. Also habe ich mich einige Abende damit beschäftigt, den Raspberry Kodi-DB tauglich zu machen.Mein Pi3 MYSQL Server läuft jetzt mit Raspbian LITE (Headless - bedient über SSH mittels MobaXTerm). Idee war es, soviel wie möglich in den RAM auszulagern, um die IO Performance des "Kleinen" zu steigern und die SD Karten Lebensdauer zu erhöhen. Es wird mittels CRONJOB alle 2h das TMPFS auf die SD Karte synchronisiert. Zusätzlich wird 1mal pro Tag ein MYSQL Dump auf meine NAS gelegt und 10 Tage behalten.
Die Daten (Filme, Musik, Bilder, etc) liegen zentralisiert auf dem NAS. Zugriff auf die Daten kann von mehreren Geräten aus erfolgen, daher die Anforderung an die zentrale Datenbank.
Das Setup läuft jetzt seit ca 3 Wochen stabil ohne Datenverlust.In diesem Beitrag möchte ich meine Erkenntnisse mit euch teilen.
ACHTUNG: Es wird eine gewisse Linux Kenntnis vorausgesetzt.
Wenn ich Zeit habe, werde ich den Leitfaden ausführlicher gestalten.Voraussetzungen:
Generell:- Linuxkenntnisse
- Sicherung des Kodi Verzeichnisses (better safe than sorry)
- Sicherung der SD Karte als IMG (better safe than sorry)
- Export der Bibliothek (OPTIONAL: http://kodi.wiki/view/HOW-TO:Backup_the_video_library)
Hadware:
- Raspberry Pi3 Model B
- 2.5A Netzteil
- 16GB microSDHC UHS-1 Class 3 (Samsung Pro+ 16GB funktioniert super mit Übertakten). Mit Übertaktung werden 40MB/sec erreicht.
- Kühlkörper (notwendig, da übertaktet wird)
- Raspberry mit Ethernet am Netzwerk (nicht WLAN)
Software:
- MobaXTerm (OPTIONAL für Headless Setup)
- RASPBIAN JESSIE LITE vorinstalliert und auf aktuellem Stand
Übertakten:
Es ist keine extreme Übertaktung welche einen Garantieverlust zur Folge hat. Mein Pi läuft in einem (geschlossenen) Kasten komplett stabil und überschreit nie 52°C
Im /boot Verzeichnis die config.txt editieren und folgende Einträge hinzufügCodearm_freq=1350 core_freq=500 over_voltage=4 disable_splash=1 gpu_mem=16 dtoverlay=sdhost,overclock_50=100
TMPFS einrichten
Temporäre bzw Log Verzeichnisse werden in den RAM gelegt um ein permanentes Schreiben auf die SD Karte zu verhindern (erhöht die Lebensdauer und auch minimal die Performance). Aber Achtung, durch diese Änderung werden Log Dateien bei jedem Neustart gelöscht!
Hierzu fügen wir folgende Einträge der Datei /etc/fstab hinzuCodetmpfs /tmp tmpfs defaults,noatime,nosuid,size=128M 0 0 tmpfs /var/tmp tmpfs defaults,noatime,nosuid,size=64M 0 0 tmpfs /var/[definition='1','0']log[/definition] tmpfs defaults,noatime,nosuid,mode=0755,size=128M 0 0
MYSQL einrichten
Installation
Falls noch nicht geschehen, MYSQL aus dem Repository installieren
sudo apt-get install mysql-serverKonfiguration
Jetzt wird eine eigene MYSQL Config benötig. Bitte nicht die my.cnf Datei editieren, diese kann bei einem Update überschrieben werden.
Dazu legen wir die Datei /etc/mysql/conf.d/99kodi.cnf an und fügen folgende Einträge hinzMYSQL User und Rechte
Als nächstes starten wir die MYSQL Shell
mysql -uroot -p
Hier wird der Kodi User angelegt
CREATE USER 'kodi' IDENTIFIED BY 'password';
und mit den notwendigen Rechten versorgt
GRANT ALL ON *.* TO 'kodi';
Danach kann MYSQL neu gestartet werden
sudo /etc/init.d/mysql restartMYSQL Backup
Um Datenverlust zu vermeiden erstellen wir ein Backup Script, welches später 1-mal täglich mittels cronjob ausgeführt wird. Es wird ein mysql Dump erzeugt und auf ein NAS (SMB Share) gelegt. Dieses Script kann jedoch nach eigenen Vorlieben und Anforderungen angepasst werden.
Backup Script /opt/scripts/db-backup.sh erstellen und folgende Inhalte anpassen und einfügenBash
Alles anzeigenMHOST=localhost MUSER=kodi MPASS=password SMBPATH=//NAS-IP/DB-Backup BACKUPDIR="/media/db-backup" sudo umount $BACKUPDIR >/dev/null 2>&1 sudo mkdir -p $BACKUPDIR sudo mount -t cifs -o guest,uid=1000 $SMBPATH $BACKUPDIR if [ $? -eq 0 ]; then echo Mounting Backup Directory Successful else echo Mounting Backup Directory Failed exit fi MYSQL="$(which mysql)" MYSQLDUMP="$(which mysqldump)" GZIP="$(which gzip)" DBPREFIX="kodi_videos.mysqldb" echo "Run MySQL backup" DBS="$($MYSQL -u $MUSER -h $MHOST -p$MPASS -Bse 'show databases like "kodi%"')" #db=kodi_video107 for db in $DBS do FILE=${BACKUPDIR}/${DBPREFIX}.${db}.`date +%Y%m%d`.gz $MYSQLDUMP --no-tablespaces --skip-lock-tables -u $MUSER -h $MHOST -p$MPASS $db | $GZIP -9 > $FILE echo Created Backup ${DBPREFIX}.${db}.`date +%Y%m%d`.gz done sudo find / -type f -wholename "${BACKUPDIR}/${DBPREFIX}*" -mtime +10 -exec rm -f '{}' ';' echo Deleted Backups older than 10 days sudo umount $BACKUPDIR echo Unmounting Backup Directory Successful echo Backup Finished
Jetzt noch das Script ausführbar machen
sudo chmod +x /opt/scripts/db-backup.sh
und nach /usr/bin/ Softlinken
sudo ln -s /opt/scripts/db-backup.sh /usr/bin/db-backup
Ein cronjob (1mal täglich um 04:00) stellt sicher, dass das Backup regelmäßig ausgeführt wird
Crontab öffnen
sudo crontab -e
und den Job hinzufügen
0 4 * * * /usr/bin/db-backupMYSQL TMPFS
Zunächst müssen wir die UserID und GruppenID vom mysql User ermitteln
sudo id mysql
TMPFS Verzeichnis anlegen und Berechtigungen anpassen
sudo mkdir -p /var/mysqlramdisk
sudo chown mysql:mysql /var/mysqlramdisk
TMPFS Backupverzeichnis anlegen und Berechtigungen anpassen
sudo mkdir -p /var/mysqlpersistence
sudo chown mysql:mysql /var/mysqlpersistence
MYSQL Daten in das Persistenzverzeichnis kopieren
sudo rsync -av --delete /var/lib/mysql/ /var/mysqlpersistence/
/etc/fstab editieren und folgenden Eintrag hinzufügen (ids von User mysql)
tmpfs /var/mysqlramdisk tmpfs rw,gid=114,uid=109,size=512M,nr_inodes=10k,mode=0700 0 0
So und jetzt das Herzstück: Das MYSQL-TMPFS Wrapperscript
Script in /etc/init.d/mysql-tmpfs erstellen und folgende Inhalte einfügeBash
Alles anzeigen#!/bin/bash # ### BEGIN INIT INFO # Provides: mysql-tmpfs # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Should-Start: $network $time # Should-Stop: $network $time # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: Start and stop the mysql database server daemon # Description: Controls the main MySQL database server daemon "mysqld" # and its tmpfs directory ### END INIT INFO # case "$1" in start) rsync -av /var/mysqlpersistence/ /var/mysqlramdisk/ /etc/init.d/mysql start ;; stop) /etc/init.d/mysql stop rsync -av --delete /var/mysqlramdisk/ /var/mysqlpersistence/ ;; sync) rsync -av --delete /var/mysqlramdisk/ /var/mysqlpersistence/ ;; restart) /etc/init.d/mysql restart ;; *) echo $"Usage: mysql-tmpfs {start|stop|restart|sync}" exit esac
Script ausführbar machen
sudo chmod +x /etc/init.d/mysql-tmpfs
MYSQL Service entfernen
sudo update-rc.d mysql remove
mysql-tmpfs Service aktivieren
sudo update-rc.d mysql-tmpfs defaults
MYSQL Persistenz cronjob einrichten
Crontab öffnen
sudo crontab -e
Cronjob hinzufügen (sync alle 2h um xx:30)
30 */2 * * * /etc/init.d/mysql-tmpfs sync
Editieren von /etc/mysql/conf.d/99kodi.cnf und hinzufügen des datadir Eintrages
datadir = /var/mysqlramdisk
Pi neustartenKODI einrichten
Am Kodi-PC die Datei [definition='2','1']advancedsettings[/definition].xml im userdata Verzeichnis anlegen oder editieren und folgende Einträge hinzufügenCode
Alles anzeigen<[definition='2','1']advancedsettings[/definition]> <videodatabase> <type>mysql</type> <host>{IP address of RPi3}</host> <port>3306</port> <name>kodi_video</name> <user>kodi</user> <pass>password</pass> </videodatabase> <musicdatabase> <type>mysql</type> <host>{IP address of RPi3}</host> <port>3306</port> <name>kodi_music</name> <user>kodi>/user> <pass>password</pass> </musicdatabase> </[definition='2','1']advancedsettings[/definition]>
MYSQL wieder absichern (OPTIONAL aber empfohlen)
Als nächstes starten wir die MYSQL Shell
mysql -uroot -p
Wir entziehen dem Kodi User alle Rechte
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'kodi';
und fügen die Rechte für die kodi Tabellen wieder hinzu
GRANT ALL ON `kodi%`.* TO 'kodi';
Übernehmen der Änderungen
flush privileges;Wartung
TODO: Genauer ausarbeiten
MYSQL ibdata1 Größe regelmäßig prüfen -> Abhilfe schafft MYSQL Dump + Restore
TMPFS Auslastung regelmäßig prüfen
Log Größe
Updates
Backups prüfen
Persistenz prüfenIdeen
- Sende ein EMail wenn ein CRONJOB fehlschlägt
- Sende ein EMail wenn ein TMPFS zu klein wird
- MariaDB Performance untersuchen und ggf Leitfaden anpassen
Schlusswort
Ich hoffe ich kann mit diesem Leitfaden einigen Leuten helfen. Falls ich neue Kniffe im Bezug auf die zentrale Datenbank für Kodi habe, werde ich den Beitrag hier updaten.Auf Verbesserungsvorschläge, Ideen und Kritik würde ich mich freuen.
Falls Fragen aufkommen oder Unklarheiten herrschen, werde ich versuchen diese gerne zu beantworten.
LG
Nexxx -
Ein http://geizhals.de/asrock-j4205-i…hloc=at&hloc=de ASRock J4205-ITX (90-MXB270-A0UAYZ) für 120,00 und 8gb Ram 55,00€ geht auch , hier gibt es Probleme mit 4K trotz HDMI2.0,
da dies per Konvertierung von DisplayPort zu HDMI2.0 gemacht wird.
Also heißt es warten ??? und hoffe auf AMD RYZEN 3 mit GPU.Also ich habe ein J4205 Board mit 120GB SSD und 8GB Ram. Habe mit der 4k Wiedergabe garkeine Probleme unter WIN10. Passthrough funktioniert auch tadellos.
-
Welches Betriebssystem würdet ihr Empfehlen? Windows,Openelec,LibreELEC?
Anhand deiner Anforderungen ist es relativ egal für welches OS du dich entscheidest. Jedoch musst du die Kompatibilität der Hardware mit dem OS prüfen (meine Aussage vorhin bzw J4205 und *Elec).
Wenn du jedoch deine Filme/Serien auf 2 HTPCs verfügbar haben willst, solltest du die Datenbank auslagern. Idealerweise auf deine NAS, falls diese MYSQL unterstüzt und dort deine Filme abgespeichert sind.??? das kommt drauf an also mein HTCP mit Win ist in 5-6 sec oben. Alles sache der komponenten und des Wissens.Asrock wäre mir zu unsicher, ich würde liebr 50 € mehr aus geben und beim Papa Asus kaufen.
Auf die Bootzeit habe ich noch nicht geachtet, jedoch kann ich mit Sicherheit sagen, dass sie nicht störend ist (ansonst wäre sie mir aufgefallen).
Bezüglich Asus/Asrock:
Also mit ASRock hatte ich noch nie schlechte Erfahrungen, eher im Gegenteil. Und meines Wissens nach, ist das ASRock J4205-ITX derzeit das einzige J4205 MB am Markt (bitte um Korrektur falls diese Info Out-Of-Date ist). -
Naja, habe gelesen dass es derzeit mit LE/OE noch Probleme mit DTS-HD gibt. Deswegen die Entscheidung von Win10.
Falls jemand berichten kann, dass Passthrough mit dem J4205 und LE/OE funktioniert, wäre es mir einen Test wert (bin ein alter Linux Liebhaber - Archlinux YAY) -
Hallo
ich habe mir vor kurzem einen fertigen J4205 bei tschalli gekauft:
- J4205 ASRock MB
- 8GB RAM
- 120GB SSD
- Lüfterlos
- Win10
Funktioniert super. Lieferung innerhalb 1 Tages nach Österreich.
1080p (4k nicht getestet), Passthrough über WASAPI (DTS-HD) ruckelfrei.
Preis war auch ganz OK -> ~350€