Update (1 Martie 2011):
- Suport pentru a specifica un MySQL host. E musai să fie definit minim cu “localhost” pentru o conexiune locală. Va folosi UNIX socket. Pentru TCP socket, se folosește 127.0.0.1 ca adresă.
- Suport pentru compresie la nivel de protocol SSH. Mă gândeam la asta, dar am activat-o doar pentru MySQL – chestie destul de inutilă pentru o conexiune locală prin UNIX socket. Acum, cu suport pentru host extern, își are rostul.
- Schimbat criptarea în blowfish-cbc ce este semnificativ mai rapidă pentru SSH.
Backup-ul – un rău necesar. Existența unui server cu skip-networking complică problema. Dar nu o face imposibilă. SSH știe să returneze chestii peste STDOUT. Iar un script pus în cron face ca această pacoste să intre în categoria “set it and forget it”.
Iar dacă tot am vorbit de un script, acesta este:
#!/bin/bash # EDIT MY_USER="" MY_PASS="" MY_HOST="localhost" SSH_USER="" SSH_HOST="" SSH_PORT="" # END EDIT CDIR=$(dirname $0) PKEY=$CDIR/private-key.pem DUMP=$CDIR/dump DATE=$(date +%F+%H-%M-%S) if [ ! -f $PKEY ] then echo "Error: The SSH private key file is missing!" exit 1 fi if [ ! -d $DUMP ] then mkdir $DUMP fi echo "Fetching the databases ..." database=($(ssh -C -c blowfish-cbc -i $PKEY -p $SSH_PORT $SSH_USER@$SSH_HOST mysql -C -h$MY_HOST -u$MY_USER -p$MY_PASS -e '"SHOW DATABASES;"')) count=${#database[@]} for ((i=1; i<count ; i++)) do if [ "${database[$i]}" != "mysql" -a "${database[$i]}" != "information_schema" ] then echo "Dumping ${database[$i]} ..." ssh -C -c blowfish-cbc -i $PKEY -p $SSH_PORT $SSH_USER@$SSH_HOST mysqldump -v -C -h$MY_HOST -u$MY_USER -p$MY_PASS -x -B ${database[$i]} | nice -n 19 pbzip2 -c > $DUMP/${database[$i]}-$DATE.sql.bz2 fi done </count> |
Are 5 opțiuni de configurare, destul de evidente. Caută private-key.pem în directorul în care se află – unde private-key.pem este cheia ce face posibilă comunicarea peste SSH fără a folosi autentificare cu parolă. Iar din moment ce se folosește rețeaua, atât mysql cât și mysqldump folosesc protocol compression (flag-ul -C). Dependințele sunt evidente la o primă citire. Nu este cel mai eficient mod de a face backup (rețea, spațiu), dar este simplu de implementat iar câteodată aceasta contează. Ignoră bazele de date mysql și information_schema. A se ignora ultimul tag a-la HTML din blocul de cod de mai sus. GeSHi face fițe.