Haussteuerung - Backup/Restore der Log-Datenbank (MariaDB)
_________________________________________________________
BACKUP der Datenbank einrichten
_________________________________________________________

1. Script backup.sh anlegen

#!/bin/bash
#
# dieses Skript kann man beliebig oft ausführen
#
# Anzahl der Sicherungen die aufgehoben werden sollen
KEEP=3
BACKUPS=`find /volume1/Backup/DBBackup/backup -name "mysqldump-*.gz" | wc -l | sed 's/\ //g'`
while [ $BACKUPS -ge $KEEP ]
do
ls -tr1 /volume1/Backup/DBBackup/mysqldump-*.gz | head -n 1 | xargs rm -f
BACKUPS=`expr $BACKUPS - 1`
done
DATE=`date +%Y%m%d%H%M%S`
rm -f /volume1/Backup/DBBackup/.mysqldump-${DATE}.gz_INPROGRESS
/usr/syno/mysql/bin/mysqldump --opt -uroot -phomer_2009 --all-databases | gzip -c -9 > /volume1/Backup/DBBackup/.mysqldump-${DATE}.gz_INPROGRESS
mv -f /volume1/Backup/DBBackup/.mysqldump-${DATE}.gz_INPROGRESS /volume1/Backup/DBBackup/mysqldump-${DATE}.gz
exit 0

2. anpassen /etc/crontab

# Jeden Tag um 5:00 h ausführen
0 5 * * * root sh /volume1/Backup/DBBackup/backup.sh

3. restart cron

synoservicecfg --restart crond

_________________________________________________________
tägliches CLEANUP der Datenbank
________________________________________________________
Da es einige Aktoren/Sensoren gibt, die sehr gesprächig sind, wo ich es bis aber zeitlich nicht geschafft habe, das in FHEM mal anzupassen, war es notwendig dafür zu sorgen, dass die Datenbank nicht so schnell ins unermessliche wächst. Die einfachste Methode dafür - einfach einmal täglich unbenutze Logeinträge per SQL zu löschen.

1. Scheduler einschalten

Dazu in etc/mysql/my.cnf unter mysqld folgendes eintragen:

event_scheduler = on

Danach Restart der DB: /usr/share/mysql/mysql.server restart

2. über phpmyadmin ein cleanup Event erstellen

CREATE EVENT cleanup_fhem

ON SCHEDULE EVERY 1 DAY

DO

delete from history where device like 'iPhone%' or device like 'iphone%' or device like 'HK.Wasch%' or device like 'st_anwe%' or (device like '%Sauna%' and device not like '%Saunag%') or device like 'HMLAN%' or device like 'E_WS%' or device like 'WS1%' or device like 'Weihna%' or device like 'Action%' or device like 'FSB14%' or device like 'Fenster%' or device like 'HM_%' or device like 'HR%' or device like 'Lampe%' or device like 'Mac%' or device like 'Stehl%' or (device = 'Zisterne' and reading <> 'level') or device like 'DS18B20%' or device = 'CCU' or device = 'CUL1' or device = 'CUL_0' or device like 'TC_TWI%' or device = 'fronthem' or device like 'TCM%' or device like 'EnO%' or device like 'Stern%' or device like '%Wasch%' or (device like 'DS2423%' and event like 'counters.B%') or device like 'Auto_Raff%' or device like 'Securasp%' or device = 'global' or device = 'OWSERVER' or device like 'Raff%' or device like 'Rasen%' or device like '%Temp'

-> Das Script ist nicht sonderlich elegant, erfüllt aber seinen Zweck. Ihr müsst über phpadmin oder ein gescheites Analysetool einfach mal Eure Logtabelle mal analysieren und die nicht benötigten Einträge identifizieren.

________________________________________________________
MYSQL - Log File für cron jobs einrichten:
________________________________________________________

mysql -u root -p fhem
SHOW PROCESSLIST\G

Datei öffnen: /etc/syslog-ng/syslog-ng.conf
folgende Zeilen hinzufügen:

destination cron { file("/var/log/cron.log"); };
filter f_cron { facility(cron); };
log { source(src); filter(f_cron); destination(cron); };

________________________________________________________
Tuning der MariaDB
________________________________________________________

in etc/mysql/my.cnf unter mysqld folgendes eintragen:

query_cache_type = 1
query_cache_limit = 256K
query_cache_min_res_unit = 2k
query_cache_size = 20M

________________________________________________________
Backup/Restore
________________________________________________________

#backup all databases in one file (eventually add the option --add-locks):
mysqldump -u username -p -–all-databases > file.sql

#backup all databases in one gzipped file:
mysqldump -u username -p -–all-databases | gzip > file.sql.gz

#restore all databases:
mysql -u username -p < file.sql