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](https://www.hetzner.com/storage/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 wget
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/wp-content/uploads/tmp/Backup-v3-FutureNode.dk.zip
Udpak filerne med denne kommando:
sudo unzip Backup-v3-FutureNode.dk.zip -d /usr/local/backup
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
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:
backup1
Crontab (root):
Du skal nu gøre så scriptet kører automatisk via “crontab”
Skriv denne kommando som root: $ crontab -e
og sæt følgende tekst ind:
0 0 * * * cd /usr/local/backup && ./script.sh
Med ovenstående linje vil scripet blive kørt dagligt ved midnat.
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 guide som vi har skrevet tidligere
Done 🙂
Hvis du har problemer kontakt mig gerne i en kommentar, og jeg vil forsøge at hjælpe dig.