Documentación
Documentación » Hosting » Backup de MySQL por SSH

Backup de MySQL por SSH

Hacer un Backup de MySQL por SSH (Exportar)

Con el siguiente comando puedes hacer / exportar un backup de una base de datos mediante SSH

mysqldump --host=localhost --user=db_user --password=pass db_name > db_name.sql

Si el comando anterior no te ha funcionado, puedes probar con este otro.
Ojo! en este segundo comando la contraseña va pegada a la -p

mysqldump -h localhost -u db_user -ppass db_name > db_name.sql

En caso que tengas acceso root, también puedes hacer el backup así:

mysqldump --single-transaction db_name > db_name.sql

Restaurar un Backup de MySQL por SSH (Importar)

Con el siguiente comando puedes restaurar / importar un backup de una base de datos mediante SSH

mysql --host=localhost --user=db_user --password=pass db_name < db_name.sql

Si el comando anterior no te ha funcionado, puedes probar con este otro.
Ojo! en este segundo comando la contraseña va pegada a la -p

mysql -h localhost -u db_user -ppass db_name < db_name.sql

En caso que tengas acceso root, también puedes hacer el backup así:

mysql -f db_name < db_name.sql

Backup automático y envío por FTP a un servidor remoto

Introduce este script en un cron para ejecutar un backup periódico de tu base de datos y enviar la copia a un servidor FTP remoto:

Debes modificar los valores marcados en negrita por los tuyos propios.

#! /bin/bash
export PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

## CONFIGURA LOS DATOS DE CONEXION A LA BASE DE DATOS ##
SQL_HOST='localhost'
SQL_USER='Usuario-SQL'
SQL_PASS='Pass-SQL'
SQL_DDBB='Nombre-SQL'
## CONFIGURA LOS DATOS DE CONEXION AL FTP DE BACKUP ##
FTP_HOST='Servidor-FTP'
FTP_USER='Usuario-FTP'
FTP_PASS='Pass-FTP'
## CONFIGURA EL DIRECTRIO DE BACKUP LOCAL Y LOS DIAS DE RETENCION DE FICHEROS##
BackupDestination='/backup'
Retention='5' #dias
## NO EDITES NINGUN VALOR A PARTIR DE AQUI ##

FECHA=`date +%Y%m%d_%H-%M`
echo Detectando Fecha: ${FECHA}

cd ${BackupDestination}
echo Accediendo al directorio de backup: ${BackupDestination}

echo Ejecutando mysqldump
mysqldump --host=${SQL_HOST} --user=${SQL_USER} --password=${SQL_PASS} ${SQL_DDBB} > ${SQL_DDBB}-${FECHA}.sql

echo Comprimiendo backup
tar cvzf ${SQL_DDBB}-${FECHA}.tar.gz ${SQL_DDBB}-${FECHA}.sql
echo Backup comprimido: ${SQL_DDBB}-${FECHA}.tar.gz

echo Eliminando backup sin comprimir: ${SQL_DDBB}-${FECHA}.sql
rm -rf ${SQL_DDBB}-${FECHA}.sql

echo Eliminando backups con mas de ${Retention} dias
find ${BackupDestination} -type f -ctime +${Retention} | grep ${SQL_DDBB}- | xargs rm -rf

echo Proceso finalizado

echo Enviando al servidor FTP

ftp -in << EOF
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
prompt
put ${SQL_DDBB}-${FECHA}.tar.gz
bye
EOF

echo Transferencia FTP finalizada. 
echo FIN del trabajo.