Fare più o meno le stesse cose di molte persone.
-
Lo script deve essere eseguito sulla macchina che ospita il database MySql (è una macchina Linux).
=> Crea uno script bash o perl locale (o qualsiasi altra cosa) "myscript" su questa macchina "A" -
I backup devono essere salvati sullo stesso server su cui si trova il database.
=> nello script "myscript", puoi semplicemente usare mysqldump . Dal backup locale, puoi creare un tarball che invii tramite scp alla tua macchina remota. Finalmente puoi inserire il tuo script di backup nel crontab (crontab -e).
Alcuni suggerimenti e funzioni per iniziare poiché non pubblicherò l'intero script, non svolge completamente il trucco ma non molto lontano:
#!/bin/sh
...
MYSQLDUMP="$(which mysqldump)"
FILE="$LOCAL_TARBALLS/$TARBALL/mysqldump_$db-$SNAPSHOT_DATE.sql"
$MYSQLDUMP -u $MUSER -h $MHOST -p$MPASS $db > $FILE && $GZIP $GZ_COMPRESSION_LEVEL $FILE
function create_tarball()
{
local tarball_dir=$1
tar -zpcvf $tarball_dir"_"$SNAPSHOT_DATE".tar.gz" $tarball_dir >/dev/null
return $?
}
function send_tarball()
{
local PROTOCOLE_="2"
local IPV_="4"
local PRESERVE_="p"
local COMPRESSED_="C"
local PORT="-P $DESTINATION_PORT"
local EXECMODE="B"
local SRC=$1
local DESTINATION_DIR=$2
local DESTINATION_HOST=$DESTINATION_USER"@"$DESTINATION_MACHINE":"$DESTINATION_DIR
local COMMAND="scp -$PROTOCOLE_$IPV_$PRESERVE_$COMPRESSED_$EXECMODE $PORT $SRC $DESTINATION_HOST &"
echo "remote copy command: "$COMMAND
[[ $REMOTE_COPY_ACTIVATED = "Yes" ]] && eval $COMMAND
}
Quindi per eliminare i file più vecchi di "date", puoi guardare man find e concentrati sul mtime e più recenti opzioni.
Modifica:come detto in precedenza, non c'è alcun interesse particolare nel fare un backup locale tranne un file temproray per poter inviare facilmente un tarball ed eliminarlo quando viene inviato.
Crea uno script di shell come quello qui sotto:
#!/bin/bash
mysqldump -u username -p'password' dbname > /my_dir/db_$(date+%m-%d-%Y_%H-%M-%S).sql
find /mydir -mtime +10 -type f -delete
Sostituisci nome utente, password e la tua directory di backup (my_dir). Salvalo in una directory (shell_dir) come filename.sh
Pianificalo in modo che venga eseguito tutti i giorni utilizzando crontab -e come:
30 8 * * * /shell_dir/filename.sh
Questo verrà eseguito tutti i giorni alle 8:30 ed eseguirà il backup del database. Elimina anche il backup che è più vecchio di 10 giorni. Se non vuoi farlo, cancella l'ultima riga dallo script.
Rispondi :Un cron
Descrizione :
Prova a creare un file something.sh con questo:
#!/bin/sh
mysqldump -u root -p pwd --opt db1.sql > /respaldosql/db1.sql
mysqldump -u root -p pwd --opt db2.sql > /respaldosql/db2.sql
cd /home/youuser/backupsql/
tar -zcvf backupsql_$(date +%d%m%y).tgz *.sql
find -name '*.tgz' -type f -mtime +2 -exec rm -f {} \;
Dare i permessi adeguati al file
chmod 700 mysqlrespaldo.sh
o
sudo chmod 700 something.sh
e poi crea un cron con
crontab -e
impostandolo come
**0 1 * * *** /home/youruser/coolscripts/something.sh
Ricorda che i numeri oi caratteri '*' hanno questa struttura:
Minutes (range 0-59) Hours (0-23) Day of month (1-31) Month (1-12) Day of the week (0-6 being 0=Domingo) Absolute path to script or program to run