Pomoc Automatyczny backup bazy danych i transfer danych na drugiego QNAP'a TS-209

SecNetPL

Passing Basics
Beginner
11 Luty 2017
13
1
3
QNAP
TS-x59 Pro
Ethernet
1 GbE
Cześć,
Przymierzam się do stworzenia skryptu w bash'u, który zatrzymywał by zapis w bazie danych, dokonywał jej zrzutu/kopii i przesyłał do drugiego QNAP'a. Czy ktoś z was ma już jakiś doświadczenie w tworzeniu tego typu rozwiązań ? Tabele w bazie danych są bardzo ważne, więc oprócz przechowywania kopii na oddzielnym dysku w ramach jednego QNAP TS-469, chciałbym również transferować kopię na drugiego QNAP'a. QNAP TS-209 wykorzystywany byłby do przechowywania kopi bazy spakowanej do pliku *.zip.

Wersja oprogramowania Firmware: 4.2.3 Build 20170121
Model serwera: QNAP TS-469
 
burdel się zrobił:
1. operacja wymiany kluczy przeprowadza sie tylko raz - należy pamiętać że działa to w jedna strone, np z A -> B, w druga strone trzeba zrobic kolejna wymiane

np u mnie mam QNAPa i Debiana
z Debiana do qnapa wymiana kluczy jest prosta bo klepię ssh-keygen; ssh-copy-id admin@QNAP i wklepuje haslo admina w QNAP i następnie testuje połaczenie, wpisujac ssh admin@qnap powinno mnie wpuscic bez pytania o hasło.

Jest myk w QNAPie - trzeba puścić chmod'a na pewnym pliku/folderze ale to @grzenio zna.

2. dodac linijke z kopiowaniem do jakiegos lokalnego katalogu czy co tam potrzeba.
 
Co do chmod to
Kod:
chmod 755 /mnt/HDA_ROOT/.config
też trzeba pamiętać iż ssh-copy-id nie działa na qnap-ie
Panie Kolego pigers wymianę klucza wystarczy tylko w jednym kierunku, czyli klucz publiczny dawcy wrzucamy tylko tam gdzie mają się backupy odkładać, nie ma potrzeby biorcy klucza wrzucać na dawce :) chyba że dla wygody to i owszem :)
 
też trzeba pamiętać iż ssh-copy-id nie działa na qnap-ie
Panie Kolego pigers wymianę klucza wystarczy tylko w jednym kierunku, czyli klucz publiczny dawcy wrzucamy tylko tam gdzie mają się backupy odkładać, nie ma potrzeby biorcy klucza wrzucać na dawce :) chyba że dla wygody to i owszem :)

Wygenerowałem poniższy klucz publiczny, który skopiowałem do pliku authorized na drugim qnapie B. Zastanawiam się który plik czyta zawartość pliku authorized. Przypomnę, że nie było tego pliku na QNAPie B więc przekopiowałem go. Być może plik te nie może być odczytany poprawnie.

Próbowałem uruchomić skrypt wykorzystując nazwę NASBF0DFE, która widoczna jest w kluczu ale nie pomogło. Jedna opcja żeby zapisać pliki zdalnie na qnapie B jest wykorzystanie adresu IP. Jednak w dalszym ciągu przy tworzeniu backup, pyta o hasło admina....

[~/.ssh] # vim id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAzDVgJ5BEoBwuu/TVKITB9W2szPUR5fK4qs1z+Ha2MPWjRACpMTtE/zn5Voh3JXLbICwoB5T0KlBiq65flFclE6aPRkp9Y86gc3WTKXtI6+UPGOmOERpl4GYm0pAHQBaixrEwPhRZLG5EFmJ9Y0o7PVLO5l7B20OCE1NDoQ987erbLQ/uHKGxRagVtQc1SE4nSzC/gQl2tBe7NMGeOxL/nmJCdDBMCCZeEde0w6d/xG7nZN+/UPBj8V+ALQv+SM9gtX/e57DPRNTVfKB5h8yyhuKU2nKjssvkMrTTBmtinnFQJAzdrPbDjPjrlOtdXClZ4fdCqjHdRhjwJyLyME+n6Q== admin@NASBF0DFE

Co do chmod to
Kod:
chmod 755 /mnt/HDA_ROOT/.config
powinien być on uruchomiony na qnapie dawcy A czy biorcy B ?
 
Wygenerowałem poniższy klucz publiczny, który skopiowałem do pliku authorized na drugim qnapie B. Zastanawiam się który plik czyta zawartość pliku authorized. Przypomnę, że nie było tego pliku na QNAPie B więc przekopiowałem go. Być może plik te nie może być odczytany poprawnie.

Próbowałem uruchomić skrypt wykorzystując nazwę NASBF0DFE, która widoczna jest w kluczu ale nie pomogło. Jedna opcja żeby zapisać pliki zdalnie na qnapie B jest wykorzystanie adresu IP. Jednak w dalszym ciągu przy tworzeniu backup, pyta o hasło admina....

[ROZWIĄZANIE PROBLEMU]:Dumny:

Wyrzuciłem wszystkie pliki z folderu .ssh na obu QNAP'ach i wygenerowałem nowe klucze. Plik known_hosts in authorized_keys wygenerowałem sam przerzucając klucz publiczny z jednego Qnapa B do drugiego A poleceniem:
cat ~/.ssh/id_rsa.pub | ssh user@123.45.56.78 "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys" tak rozwiązałem problem z połączeniem pomiędzy QNAPem B do A.

Dalej jednak istniał problem z połączeniem pomiędzy A do B. Rozwiązaniem problemu było przeniesieniu plików id_rsa.pub do innego folderu .ssh. Zauważyłem, że lokalizacja plików id_rsa.pub dla dwóch QNAPów jest różna. Dla A było to /share/homes/admin/.ssh natomiast dla B było to /root/.ssh/. Połączenie z B do A było możliwe, ponieważ plik authorized_keys było umiejscowiony w /root/.ssh na QNAPie A. W momencie kiedy przeniosłem dwa klucze do lokalizacji /root/.ssh na QNAPie A połączenie zostało zestawione bez pytania o hasło !!! B-)B-)
Kod:
#!/bin/bash
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/mariadb/bin"
SSH=$1
#zmienne
BACKUPDIR="/share/Dane/backup/wersja"
BACKUPLOG="/dev/null"
DATA=`date -I`
MYSQLDUMPBIN=$(which mysqldump)
SCPBIN=$(which scp)
SSHBIN=$(which ssh)
MYSQLBIN=$(which mysql)
OUTPUTTMP="/share/Dane/backup/tmp"
SQLPASS="admin"

$SSHBIN -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" $SSH 'mkdir -p '$BACKUPDIR'/'$DATA''

rm -rf $OUTPUTTMP
mkdir $OUTPUTTMP

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
        mkdir -p $BACKUPDIR/$DATA
$SCPBIN -o "StrictHostKeyChecking=no" -o "UserKnownHostsFile=/dev/null" $OUTPUTTMP/$db.sql.gz $SSH:$BACKUPDIR/$DATA/$db.sql.gz >> $BACKUPLOG 2>&1

rm -f $OUTPUTTMP/$db.sql.gz
    fi
done

@grzenio potrzebuję dodać do kodu możliwość usunięcia/nadpisania najstarszej np. 5 wersji kopii. Umożliwi to utrzymanie więcej wolnego miejsca na dysku. Na forum widziałem kilka możliwość, jednak zależałoby mi aby dodać tą linię kodu to już istniejącego kodu powyżej. Chyba, że w tej sytuacji, lepiej będzie stworzyć oddzielny skrypt na usuwanie ostatniej kopii danych. Jednak chciałbym zapobiec sytacji, kiedy skrypt tworzący backup przestanie działać, a drugi skrypt zacznie usuwać następne kopie bazy.
 
  • Wow
Reakcje: 1 osoba
Kod:
#!/bin/bash

find /share/Dane/backup/wersja/ -mtime +2 -exec rm -f {} \;

Próbuje uruchomić powyższy skrypt, jednak po jego wykonaniu, pojawia mi się poniższy komunikat:
Kod:
BusyBox v1.01 (2017.02.12-18:50+0000) multi-call binary

Usage: find [PATH...] [EXPRESSION]

Search for files in a directory hierarchy.  The default PATH is
the current directory; default EXPRESSION is '-print'

EXPRESSION may consist of:
        -follow         Dereference symbolic links.
        -name PATTERN   File name (leading directories removed) matches PATTERN.
        -print          Print (default and assumed).

        -type X         Filetype matches X (where X is one of: f,d,l,b,c,...)
        -perm PERMS     Permissions match any of (+NNN); all of (-NNN);
                        or exactly (NNN)
        -mtime TIME     Modified time is greater than (+N); less than (-N);
                        or exactly (N) days

Zawartość folderu w którym znajdują się podfoldery kopii bazy, które powinny zostać usunięte.
Kod:
[/share/Dane/backup/wersja] # ls -al
drwxr-xr-x    7 admin    administ      4096 Feb 22 12:55 ./
drwxr-xr-x    5 admin    administ      4096 Feb 22 12:55 ../
drwxr-xr-x    2 admin    administ      4096 Feb 17 20:38 2017-02-17/
drwxr-xr-x    2 admin    administ      4096 Feb 18 18:39 2017-02-18/
drwxr-xr-x    2 admin    administ      4096 Feb 19 19:23 2017-02-19/
drwxr-xr-x    2 admin    administ      4096 Feb 21 14:37 2017-02-21/
drwxr-xr-x    2 admin    administ      4096 Feb 22 12:55 2017-02-22/

Użyłem parametr rm -f, żeby usuwane były foldery wraz z zawartością, ale coś w tej materii nie chce zaskoczyć. Próbowałem wprowadzić zmiany i usuwac pliki już w danych folderach, ale też nie chce tego załapać.
 
aprzestano dalszego wspierania ipkq/opkg ze względu na problem z OpenSSH
ale to jedna paczka pośród wielu !

Qnapware [x86]

Ok, problem rozwiązałem instalując manualnie paczkę Entware ze strony: Install on QNAP NAS · Entware-ng/Entware-ng Wiki · GitHub. Później już tylko restart QNAP'a i puszczeniu instalacji polecenem opkg update. Komenda find działa poprawnie więc myślę że w chwili obecnej temat został wyczerpany ;) bardzo dziękuję za pomoc w tej sprawie. Myślę, że jeszcze nie raz skorzystam z waszej wiedzy :) myślę, że sam już trochę się nauczyłem. Mega dziękuję za szybko i sprawną a co najważniejsze wartościową wiedzę, którą zechcieliście się podzielić !! B-)
 

Użytkownicy znaleźli tą stronę używając tych słów:

  1. authorized_keys
  2. kopia mariadb