Mysqldump – Backup y restore

La finalidad de escribir estos pequeños artículos, no es la de redactar complejos tutoriales porque para eso ya hay miles de sitios. Pero a mi resulta útil tener pequeños documentos online siempre, que puedo consultar a todas a horas y son de indudable valor para mi trabajo, más si la memoria no es una de tus virtudes 😀

El gran problema del Phpmyadmin es, dejando de lado su velocidad o rendimiento según la conexión que tengas, es el tema de la restauración de la base de datos. Cuando tenemos una base de datos mediana(he tenido problemas con bases de datos de 20MB) ya es complicado hacer el restore vía web. Y si, como puede ocurrir fácilmente, tenemos un monstruo de base de datos, no es viable.

Entonces entra en juego el famoso comando mysqldump. Hablamos en este post sobre MySQL en entornos Linux.

Lo primero es hacer el backup de la base de datos que vamos a mover. Desde el bash, utilizamos el comando mysqldump, que viene con la mayoría de instalaciones de MySQL actuales. Después comprimimos el archivo con tar y gz.

#mysqldump --user (usuario) -p(password) (nombre bd) > (nombre).sql
#tar -cvvf (archivo).sql.tar (nombre archivo).sql
#gzip (archivo).tar

El usuario debe tener los permisos necesarios para poder efectuar el backup de la base de datos. Ahora que tenemos el archivo comprimido, vamos a moverlo hacia su nuevo destino. Hay muchas maneras, y algún día supongo utilizaré otra, pero ahora utilizo el scp(Secure Copy).

#scp (archivo).tar.gz (usuario)@(ip host destino):/(directorio)

Si usamos algún otro puerto para el servicio de Ssh, debemos configurar el comando scp con la opción -p. Después de ejecutar el comando nos pedirá el password del usuario que hemos configurado. Sólo queda esperar que acaba la transferencia entre los hosts.

Nos conectamos al nuevo host y creamos la nueva base de datos, su user y password. Ahora, toca hacer el restore. ¡Atención! el restore del archivo .tar.gz se hace con el comando mysql, no con el mysqldump.

#gunzip (archivo).tar.gz
#tar -xf (archivo).tar
#mysql -u (usuario) -p --database=(nombre bd) < (archivo).sql

Introducimos el password para el usuario mysql y a esperar. Puede ser que, el usuario que hemos creado, y más si lo hacemos desde aplicaciones web, no tenga los permisos mysql necesarios para hacer el restore de la base de datos. Un error similar sería así:


# ERROR 1044 (42000) at line n: Access denied for user 'usuario@localhost'
to database 'prueba'

Si tenemos el password del usuario “root” de mysql, podemos efectuar el restore con el. Pero si tenemos el usuario root disponible, es también posible otorgarle a nuestro nuevo usuario, los permisos necesarios. Desde Phpmyadmin es muy fácil hacerlo, es la pestaña “Privilegios”.
Si estamos desde el bash, nos conectamos al mysql desde línea de comandos y efectuamos la siguiente operación:

#GRANT ALL PRIVILEGES ON (nombre bd).* TO 'usuario@localhost'
IDENTIFIED BY 'password';

* quiere decir todas las tablas de esa base de datos. Si fuese *.* seria a todas las tablas de todas las bases datos, así que cuidado.

Actualización 8-6-2011

#mysqldump -f -R --user (usuario) -p(password) --all-databases > (nombre).sql
#tar -cvvf (archivo).sql.tar (nombre archivo).sql
#gzip (archivo).tar

Incluimos los parámetros -f y -R

  • -f: fuerza a completar el backup pese a encontrar errores
  • -R: hace también backup de las stored procedures almacenadas

6 thoughts on “Mysqldump – Backup y restore

  1. Pingback: Rubén Ortiz » Tablas grandes

  2. Pingback: Rubén Ortiz » Mysqldump - Backup estructura

  3. Muchísimas gracias por este artículo, sin él no habría podido restaurar mi web en el nuevo servidor ya que la base de datos pesaba más de 400 Mb.

  4. Hola
    Se hacen los respaldos y todo de la base de datos con mysqldump, pero como se llevan al mismo tiempo los procedimientos y triggers, vistas, de la base respaldada, ¿tiene alguna opción el mysqldump para hacer esto?

    saludos
    Alejandro

Leave a Reply

Your email address will not be published. Required fields are marked *