BASH FTP Backup Script

BASH FTP Backup Script

Jeg har kodet dette BASH script til min Ubuntu server. Det tager backup af valgte mapper. - Yderlig tager det også backup af div. SQL databaser - Det hele bliver pakket og flyttet til en remote FTP server.

Jeg har kodet dette BASH script til min Ubuntu server. Det tager backup af valgte mapper. - Yderlig tager det også backup af div. SQL-databaser - Det hele bliver pakket og flyttet til en remote FTP server.

Alle backups over 14 dage bliver slettet automatisk på FTP serveren.

Scripet virker super godt, derfor har jeg valgt at dele det med mine besøgende på FutureNode.dk! ENJOY  :)

Hvad skal du bruge for at komme i gang?

  • En Remote FTP server (Her anbefaler jeg: Hetzner storage box)
  • En lokal server til at tage backup fra
  • sudo / root

OBS.. Dette script er kun testet på Ubuntu 20.04 LTS samt Ubuntu 22.04 LTS, men virker nok også med andre versioner / Linux Distros :)

Inden du går i gang skal du opdatere din lokale server samt installere nogle pakker!

Opdater din lokale server

# sudo apt-get update && sudo apt-get upgrade

Installer følgende pakker på den lokale server

# sudo apt install sshpass mysql-client unzip

Tilføj et "Fingerprint"

Hvad er et SSH-Fingerprint?

Et fingerprint er en nøgle, der bekræftes, når du forsøger at logge ind på en fjerncomputer ved hjælp af SSH. Dette skal altid gøres første gang når du logger på en ny SSH-server!

Næste kommando skal køres som ROOT!

Den kommando du skal skrive vil se sådan ud:

# ssh-keyscan -H IP-ELLER-HOSTNAME-TIL-FTP-SERVER >> ~/.ssh/known_hosts

Hvis du ikke får en fejl - skulle det gerne være lykkedes.

Næste skridt er at oprette en MySQL backup user

Først skal du logge ind med ROOT på MySQL serveren - Det gør du med denne kommando:

# mysql -u root -p

Indtast nu dit MySQL ROOT password - Hvis det lykkes vil det se sådan ud:

mysql>

Opret nu en SQL bruger på den lokale server  - Her kan du bruge følgende kommandoer:

OBS: Udskift "MIN-BRUGER" samt "MIT-PASSWORD" med noget du selv vælger!

CREATE USER 'MIN-BRUGER'@'localhost' IDENTIFIED BY 'MIT-PASSWORD';

GRANT SELECT, RELOAD, PROCESS, LOCK TABLES on *.* TO 'MIN-BRUGER'@'localhost';

FLUSH PRIVILEGES;

EXIT

Du skal nu downloade scriptet samt tilpasse det

Start med at gå til denne mappe:

# cd /usr/local

Download scriptet:

# wget https://www.futurenode.dk/content/files/2022/09/Backup-v3-FutureNode.dk.zip

Udpak filerne med denne kommando:

# sudo unzip Backup-v3-FutureNode.dk.zip -d /usr/local/backup

Du kan også downloade scriptet manuelt her:

Ret nu i "script.sh"

Du skal nu rette nogle ting i scriptet. De eksempler der er vist i scriptet, skal selvfølgelig skiftes ud med dine egne informationer.

Du kan bruge nano

# sudo nano /usr/local/backup/script.sh

Ret nu følgende ting:

FTP Credentials: Linje 20 til 22 (INFO OM REMOTE FTP SERVER)

FTP_SERVER="IP TIL FTP SERVEREN"
FTP_USER="MIN-FTP-BRUGER"
FTP_PASSWORD="MIT-FTP-PASSWORD"

DB Credentials:  Linje 26 til 29  - Du skal bruge den nyoprettet MySQL bruger vi lavet tidligere i guiden)

DB_SERVER="localhost"
DB_PORT="3306"
DB_USER="MIN-BRUGER"
DB_PASSWORD="MIT-PASSWORD"

Du skal nu vælge hvilke mapper / MySQL databaser du vil tage backup af

Der findes 3 txt filer i mappen, der bestemmer hvad der bliver taget backup af:

  • website_dirs.txt - Liste over "www" mapper som der vil blive taget backup af.
  • otherfiles.txt  - Liste over "andre" mapper som der vil blive taget backup af.
  • dbs.txt  - Liste over "Databaser" som der vil blive taget backup af.

Igen kan du bruge nano til at rette i dem.

# sudo nano /usr/local/backup/website_dirs.txt
# sudo nano /usr/local/backup/otherfiles.txt
# sudo nano /usr/local/backup/dbs.txt

OBS. De eksempler der er i ovenstående filer, skal selvfølgelig skiftes ud med dine egne informationer

Opret biblioteker på din remote FTP server.

Du skal nu oprette følgende biblioteker på din FTP remote server! (Du kan logge på med en FTP client)

website_backup
otherfile_backup
db_backup

Hvis dette ikke bliver gjort rigtig véd scriptet ikke hvor filerne skal lægges henne, og det vil lave fejl!

Det skal se sådan ud:

Crontab (root):

Du skal nu gøre så scriptet kører automatisk via crontab

Næste kommando skal køres som ROOT

skriv denne kommando: # crontab -e

Sæt følgende ind:

0 0 * * * cd /usr/local/backup && ./script.sh

Med ovenstående linje vil scripet blive kørt ved midnat, hver dag.

Hvis du vil ændre tidspunket hvor scripet bliver kørt skal du rettet: 0 0 * * * inde i crontab..

Hvis du ikke har styr på crontab, kan du læse denne artikel som vi har skrevet tidligere.

Til sidst

Inden du er færdig skal du gøre dit script eksekverbart med denne kommando:

sudo chmod +x /usr/local/backup/script.sh

Done :)

Hvis du har problemer kontakt mig gerne i en kommentar, og jeg vil forsøge at hjælpe dig.

Sådan! Betal dernæst for at få fuld adgang til FutureNode.dk.
Velkommen tilbage! Du er nu logget ind.
Du er nu medlem på FutureNode.dk.
Sådan! Din konto er fuldt aktiveret. Du har nu adgang til alt indholdet samt alle funktioner.
Sådan! Dine faktureringsoplysninger er blevet opdateret.
Dine faktureringsoplysninger blev ikke opdateret.