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!