Mucha gente usa phpMyAdmin para hacer estas cosas cuando no es necesario. De hecho, les recomiendo usar Adminer en vez de phpMyAdmin; pero, eso, es otro rollo.
Muchos usarían:
Solución 1: la más pendeja…
mysqldump -h miservidor.tld -u root -p -A > myservidor.com.sql
Problemas:
- No es seguro para nada. Permites acceso público desde internet para root? Estás loco(a)?!
- Tu conexión es transparente. Si hay algún sniffer por ahi, ya le pasaste tu DB.
- Si tu DB tiene datos… bastantes datos… tus recursos de red van a sobre-usarse en tu servidor.
- Si pagas ancho de banda, ve ahorrando…
- Si tienes uno de esos Internet más rápido que tanto anuncian, ya valiste, vas a tardar toda la semana….
Solución 2: No tan pendeja… pero algo…
ssh -t usuario@miservidor.tld "mysqldump -u root -p -A > miservidor.com.sql"
Problemas:
- Tu dump se hace a local y, como no hay compresión, espero que tengas suficiente espacio en disco para ésto.
- Si tu DB tiene datos… bastantes datos… tus recursos de red van a sobre-usarse en tu servidor.
- Si pagas ancho de banda, ve ahorrando…
- Si tienes uno de esos Internet más rápido que tanto anuncian, ya valiste, vas a tardar toda la semana….
Solución 3: La del pendejo con iniciativa
ssh -t usuario@miservidor.tld "mysqldump -u root -p -A" | gzip -9 > miservidor.com.sql.gz
Problemas:
- Como, por no pensarla bien, aplicaste la compresión después del comando SSH, se está transfiriendo el archivo sin comprimir… doh!
- Si tu DB tiene datos… bastantes datos… tus recursos de red van a sobre-usarse en tu servidor.
- Si pagas ancho de banda, ve ahorrando…
- Si tienes uno de esos Internet más rápido que tanto anuncian, ya valiste, vas a tardar toda la semana….
Solución 4: La del webón (pero no tan pendejo)
ssh -t usuario@miservidor.tld 'mysqldump -u root -p -A | gzip -c -9' > miservidor.com.sql.gz
Problemas:
- Vas a terminar con un archivo que contiene toda la info. Si quieres reestablecer solo una DB; como dice Richard Couture: “Buen suerte!”
- Si tus DB son muy grandes (16 GB o más), no creo que puedas abrir tu archivo con algún editor de texto. Vim si puede… pero se tarda años!
Solución 5: La mera chida (según Yo)
# Pon el script en miservidor.com:/root/bin/DbBackup y dale permisos 700 al dir y al archivo
#!/usr/bin/env bash
# hacer que los archivos creados solo sean legibles por mí
uname 077
# definir fecha
fecha=$( date +%Y%d%m-%H%M%S )
# leemos, silenciosamente, el password de root de MySQL
echo -n 'Dame el password de root de MySQL: '
read -s password
# creamos el directorio donde vamos a guardar las DB
locacion='/var/backup/mysql'
mkdir -p -m 700 ${locacion}
# listamos todas las DB
mysql -u root --password="${password}" -B -N -e 'show databases' | while read db; do
# respaldamos DB por DB; en su propio archivo
echo "Respaldando ${db}..."
mysqldump -u root --password="${password}" ${db} | gzip -c -9 > ${locacion}/${fecha}-${db}.gz
done
exit 0
# ejecútalo cada vez que quieras un respaldo (como root o usa su -c o sudo)
ssh -t root@miservidor.tld "/root/bin/DbBackup"
# te podrás traer cualquier generación de respaldo que quieras a tu compu
rsync -auvP root@miservidor.com:/var/backup/mysql/201209* /var/backup/mysql/
¿Cómo se puede mejorar esta solución?
- crear un grupo para hacer los respaldos en remoto y no usar root para ésto. Usa los permisos 2770 para los directorios de respaldo si haces ésto.
- poniendo un switch en el script remoto para respaldar todo o solo la DB que especifiques
- hacer que el default del comando sea mostrar la ayuda (default en el switch)
- hacer una función que muestre la ayuda
- usando xz en lugar de gzip (mucho mejor compresión)
Con estas mejoras, pudieras, incluso, generar un respaldo bajo demanda de una DB específica y copiarla a local; incluso sin generar el archivo remoto (y ahorramos espacio).
Porqué no lo proveo? Bueno, pienso que son features fáciles de hacer y tu puedes hacerlas solito(a). Además, te sirve para aprender.
Todos los scripts se coparten con GPLv3 para todo eh? Comparte tus adecuaciones o muere!
Like this:
Like Loading...