Script para respaldar una base de datos de MySQL con PHP

Introducción

En una clase que acabo de tomar tuve que investigar cómo respaldar una base de datos de MySQL desde PHP. Lo que terminé logrando es un script que hace un respaldo completo y genera un archivo que se guarda en el disco duro.

Es decir, utilizando únicamente PHP respaldar una base de datos de MySQL. Nada de mysqldump o llamadas al sistema.

Investigando encontré esta respuesta de stackoverflow y me pareció útil modificarla y traducirla para explicarla aquí.

¿Qué hace este script?

Este script toma una base de datos y la respalda. Respalda todos sus datos así como la estructura de las tablas. Es muy parecido a cómo phpmyadmin exporta las bases de datos.

La modifiqué de tal manera que exporte todas las tablas y calcule un nombre de archivo único.

Creará una carpeta llamada respaldos (en caso de que no exista), y dentro pondrá el respaldo. Podemos llamarla múltiples veces, ya que genera un nombre único.

¿Cómo funciona?

Obtiene las tablas que tiene la base de datos. Una vez que las tiene, una por una va consultando su sentencia de creación con SHOW CREATE TABLE nombreDeLaTabla; que da un resultado como el de la imagen:

Show create table
Show create table

La parte que censurada no fue tapada porque quise, sino porque da datos que confunden. El punto es que ese comando da la creación de la tabla, y eso es lo que se escribe en el archivo.

Eso lo escribe en el archivo, y ahora selecciona todos los datos con SELECT * FROM elNombreDeLaTabla;. Recorre todas las filas, y concatena en muchos INSERT los datos. Cada 100 iteraciones separa los INSERT para que no sea muy pesado.

Lo demás es cosa de agregar comas o puntos y comas cuando es necesario, así como el cierre de paréntesis.

Al inicio y fin pone el juego de caracteres. Finalmente ese contenido se escribe en un archivo.

Script para respaldar base de datos de MySQL desde PHP

Lecturas recomendadas.

  1. Sintaxis corta de arreglo en PHP: lo usamos para declarar las tablas a respaldar
  2. CRUD de archivos y carpetas en PHP: para saber cómo funciona file_exists, mkdir y otros
  3. Formateando fechas en PHP: para saber cómo devuelve la fecha

Así es como queda la función. Recibe, en orden, el host, usuario, contraseña y el nombre de la base de datos a respaldar.

Ejemplo de respaldo de base de datos de MySQL

Tengo aquí una base de datos de mascotas que ya ni sé qué tiene pero servirá como ejemplo. La usé cuando mostré cómo replicar datos de MySQL.

Desde la CLI de MySQL se ve así:

Base de datos desde CLI
Base de datos desde CLI

Eso es únicamente para demostrar los datos que hay. Ahora desde PHP llamaré a la función que vimos anteriormente, así:

Lo sé, mi contraseña es una cadena vacía; es decir, no tengo contraseña, pero no importa si estoy localmente en mi servidor de pruebas.

La cosa realmente importante es que al ejecutar ese código obtengo  un archivo dentro de la carpeta respaldos:

Documento generado
Documento generado

Vemos que el nombre es como lo dijimos anteriormente, y que se ha generado según la fecha en la que fue realizado. De esa forma podemos llevar un seguimiento.

El contenido del mismo es el que se ve a continuación:

Es un respaldo total de mi base de datos, hecho con un simple script que usa mysqli. Así podemos respaldar bases de datos reales, las cuales se quedarán guardadas en el disco duro.

Encantado de ayudarte


Estoy disponible para trabajar en tu proyecto, modificar el programa del post o realizar tu tarea pendiente, no dudes en ponerte en contacto conmigo.

No te pierdas ninguno de mis posts

Suscríbete a mi canal de Telegram para recibir una notificación cuando escriba un nuevo tutorial de programación.

Dejar un comentario