PDA

View Full Version : [help] MySQL: backup di DB remoto


toniocartonio
20-01-2005, 16:45
hola amigos,
per fare i backup in locale sul mio serverino casalingo utilizzo questo script:

#!/bin/sh
#
# MySQL database backup script
#

##### CONFIG ###################################################################
MYSQLUSER="root"
MYSQLPW="`cat /etc/mysql/mysql.passwd`" # MySQL admin password
MYSQLDB="/var/lib/mysql" # MySQL database directory
BACKDIR="/var/backup/mysql" # Directory for backups
MYSQLDMP="/usr/bin/mysqldump" # Location of dump binary
DAYSKEEP="5" # Days to keep old backups

##### CODE #####################################################################
DATE=`date "+%Y-%m-%d"`

cd ${MYSQLDB}
mkdir -p ${BACKDIR}

function dbbackup()
{
mkdir -p ${BACKDIR}/${1}
BACKFILE=${BACKDIR}/${1}/${1}-${DATE}.dmp.bz2

${MYSQLDMP} -u ${MYSQLUSER} --password=${MYSQLPW} ${1} | bzip2 > ${BACKFILE}
}

# For each directory run the backup
for i in * ; do
if test -d $i ; then
dbbackup $i
fi
done

# Delete old backups
rm -f `find ${BACKDIR} -type f -mtime +${DAYSKEEP}`

trovato sul forum di gentoo.

Il mio problema é che mi occupo di un sito su un server shared, dove non ho accesso shell né cron.

Quello che vorrei fare é modificare lo script qui sopra, in modo da farlo connettere al server remoto mysql.dominio.com e farmi un backup settimanale del db

Quando mi loggo a mysql.dominio.com alla mia username e passwd corrisponde un solo db, x cui non ci sarebbe nemmeno da selezionare il db, ma semplicemente dirgli di fare il backup del db che gli si presenta (e di cui in caso cmq ho anche il nome volendo)

Il mio obiettivo é adattare lo script di cui sopra per fargli fare questa connessione dal mio serverino casalingo e salvare su di esso il backup del db remoto. Questo script verrebbe inserito in un cronjob sul mio server ed eseguito settimanalmente.


Ora peró non ci capisco una ceppa di programmazione, anche se mi rendo conto che probabilmente non dovrebbe essere una cosa troppo difficile... qualcuno mi aiuta?

Grassie :)

toniocartonio
21-01-2005, 13:17
help :rolleyes:

Maestro
21-01-2005, 14:30
se il server MySQL accetta connessioni per quell'utente anche da hostnames diversi da 127.0.0.1 e localhost puoi usare mysqldump --opt -h hostname -u utente -p password database e opzionalmente puoi aggiungere | gzip > nome.gz per avere la compressione gzip.

Altrimenti ci vuole una pagina PHP nel server. Questa se non c'e' safe_mode attivo dovrebbe andare.


<?PHP
system(sprintf(
'mysqldump --opt -h %s -u %s -p%s %s | gzip > %s/backup-db.gz',
localhost,
tuouser,
tuapass,
database,
getenv('DOCUMENT_ROOT')
));
echo '+DONE';
?>


Altrimenti devi usare le stringhe di connessioni di mySQL, le stesse usate da phpMyAdmin.

Per quanto riguarda poi spedirlo sul tuo PC, dovresti collegarti periodicamente all'ftp e fare il GET e il DELETE.

HexDEF6
21-01-2005, 14:41
non ho mai usato mysqdump o cose del genere... ma guardando la man di mysqldump, questo dovrebbe funzionare.... pero' provalo prima tu e poi provo io :D (mal che vada non dovrebbe fare danni, al massimo non backupizzi niente e ti da qualche errore!)

Ciao!


#!/bin/sh
#
# MySQL database backup script
#

##### CONFIG ###################################################################
MYDB="nome_del_mio_database"
HOST="ip_mio_mysql_server"
MYSQLUSER="utente_con_cui_ti_logghi_nel_db"
MYSQLPW="`cat /etc/mysql/mysql.passwd`" # MySQL password dell'utente
BACKDIR="/var/backup/mysql" # Directory for backups
MYSQLDMP="/usr/bin/mysqldump" # Location of dump binary
DAYSKEEP="5" # Days to keep old backups

##### CODE #####################################################################
DATE=`date "+%Y-%m-%d"`


mkdir -p ${BACKDIR}

function dbbackup()
{
mkdir -p ${BACKDIR}/${1}
BACKFILE=${BACKDIR}/${1}/${1}-${DATE}.dmp.bz2

${MYSQLDMP} --opt --host=${HOST} -u ${MYSQLUSER} --password=${MYSQLPW} ${1} | bzip2 > ${BACKFILE}
}



dbbackup $MYDB


# Delete old backups
rm -f `find ${BACKDIR} -type f -mtime +${DAYSKEEP}`




EDIT: ovviamente funziona solamente se mysql accetta connessioni anche dal tuo ip....


EDIT2: ho corretto un po di boiate...

EDIT3: ho aggiunto --opt

toniocartonio
21-01-2005, 14:57
Allora... intanto ti ringrazio x l´aiuto.
Il test con mysqldump funziona perfettamente... con questa sintassi:

mysqldump --opt -h mysql.domovanje.com -u <username> -p <nomedb> | gzip > nome.gz


X qualche strano motivo se scrivo

mysqldump --opt -h mysql.domovanje.com -u <username> -p <password> <nomedb> | gzip > nome.gz

lui cmq mi richiede la password, e poi pensando che la <password> sia il nome del db fallisce miseramente.

A parte questo... é ottimo :) Adesso faccio un po´ di prove con lo scriptino di cui sopra e vediamo se riesco a sistemarlo da me :)

toniocartonio
21-01-2005, 14:59
azz... nel frattempo ha risposto anche Hex... che mi risparmia un mare di lavoro :)

Adesso provo il tuo scriptino :) Grassie!

HexDEF6
21-01-2005, 15:04
Originariamente inviato da toniocartonio
azz... nel frattempo ha risposto anche Hex... che mi risparmia un mare di lavoro :)

Adesso provo il tuo scriptino :) Grassie!

forse ci va anche un --opt nella riga di dump... (ma non essendo pratico di mysql non saprei)

Ciao!

toniocartonio
21-01-2005, 15:10
nono... testato or ora... funzica come un orologio svizzero :) l´ho giá messo nella crontab del mio serverino :)

Complimenti e grazie x l´aiuto ad entrambi :D