Codzienna automatyczna kopia baz MySQL/MariaDB używanych na serwerze QNAP NAS

Ok. Dziś szalejemy tylko w konsoli via ssh :)
Tak więc na start logujemy się na naszego QNAP-a via ssh jako user admin
W moim przypadku zakładkam 2 katalogi – jeden gdzie trzymam sobie różne skrypty oraz drugi gdzie będe trzymał backup baz – dumpy.
mkdir /share/CACHEDEV1_DATA/scripts mkdir /share/CACHEDEV1_DATA/mysqldump
Teraz musimy utworzyć skrypt który nam wykona backup :)
vim /share/CACHEDEV1_DATA/scripts/sqlbkp.sh
Zawartość:
#!/bin/bash PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/mariadb/bin" #zmienne BACKUPDIR="/share/CACHEDEV1_DATA/mysqldump" BACKUPLOG="/dev/null" DATA=`date -I` MYSQLDUMPBIN=$(which mysqldump) MYSQLBIN=$(which mysql) OUTPUTTMP="/share/CACHEDEV1_DATA/mysqldump/tmp" SQLPASS="admin" rm -rf $OUTPUTTMP mkdir $OUTPUTTMP mkdir $BACKUPDIR/$DATA for db in $($MYSQLBIN -p$SQLPASS -e "SHOW DATABASES;" | tr -d "| " | grep -v Database); do if [[ "$db" != "information_schema" ]] && [[ "$db" != _* ]] ; then echo "Dumping database: $db" $MYSQLDUMPBIN -p$SQLPASS --force --opt --routines --databases $db | gzip > $OUTPUTTMP/$db.sql.gz cp $OUTPUTTMP/$db.sql.gz $BACKUPDIR/$DATA/$db.sql.gz >> $BACKUPLOG 2>&1 rm -f $OUTPUTTMP/$db.sql.gz fi done
Oczywiście powyższy skrypt to pewna modyfikacja tego co już używam, więc można go też przerobić bez zbędnego kopiowania :) albo zmodyfikować skrypt aby robił upload na inny qnap via ssh :) – ale o tym będzie następnym razem :)
Prawa wykonywania skryptu:
chmod +x /share/CACHEDEV1_DATA/scripts/sqlbkp.sh
Gdy odpalimy skrypt wynik będzie jak poniżej:
/share/CACHEDEV1_DATA/scripts/sqlbkp.sh Dumping database: mysql Dumping database: performance_schema mysqldump: Got error: 1142: "SELECT,LOCK TABL command denied to user 'root'@'localhost' for table 'cond_instances'" when using LOCK TABLES Dumping database: qnap Dumping database: test
Błędem się nie przejmujemy :)
Sprawdzamy wykonanie się backupu:
ls -al ../mysqldump/2017-02-10/ total 156 drwxr-xr-x 2 admin administ 4096 Feb 10 09:52 ./ drwxr-xr-x 4 admin administ 4096 Feb 10 09:52 ../ -rw-r--r-- 1 admin administ 139204 Feb 10 09:52 mysql.sql.gz -rw-r--r-- 1 admin administ 1909 Feb 10 09:52 performance_schema.sql.gz -rw-r--r-- 1 admin administ 537 Feb 10 09:52 qnap.sql.gz -rw-r--r-- 1 admin administ 537 Feb 10 09:52 test.sql.gz
Teraz pozostaje nam to dodać do cron-a aby kopia robiła się codziennie:
vim /etc/config/crontab
Dodajemy wpis:
0 1 * * * /share/CACHEDEV1_DATA/scripts/sqlbkp.sh
Restartujemy cron-a aby widział zmiany:
crontab /etc/config/crontab && /etc/init.d/crond.sh restart
I to wszystko :)
Teraz mamy codzienna kopie bazy. Oczywiście można dodać modyfikacje, np.: dla katalogu dnia oddać godzinę i wykonywać kilka razy na dzień kopię jeżeli jest taka potrzeba.