Creación y gestión de respaldos MySQL desde tus aplicaciones PHP

image

Para distribuir un sistema es necesario que tengamos la función de respaldar la base de datos y poder levantarla, en caso de que exista problemas de virus o formateo.

Para este caso será necesario que el usuario realice respaldos frecuentemente y los guarde en una unidad de almacenamiento.

Al desarrollar el sistema se estuvo buscando una herramienta ya hecha que no necesite el mysqldump.exe

Lo que se encontró en la web de packagist.org fue la siguiente herramienta ramazancetinkaya/mysql-backup, una muy buena herramienta lo cual tiene lo básico necesario y con algo de trabajo se puede extender y actualmente cuenta los lo siguiente.

  • Hacer respaldo de tablas de la base de datos
  • Hacer respaldo de todas las tablas de la base de datos (Solo hay que dejar en blanco en la sección donde ponemos las tablas)
  • Hacer respaldo de solo la estructura de las tablas
  • Hacer respaldo con la estructura y la información contenida en la tabla

En nuestro caso hicimos un fork para agregarle unos pequeños cambios y nos sea funcional para los proyectos en los cuales trabajamos, el fork quedo en la siguiente ruta julio101290/mysql-backup y los cambios que se hizo fue lo siguiente:

  • Se agrego un cambio para que cada 5 registros de información de una tabla comienza una consulta nueva, esto se hizo por que anteriormente cuando la consulta era muy grande marcaba el error de server is gone
  • Por alguna razón fallaba la transacción, se quito, aunque se planea agregar posteriormente
  • Al momento de levantar un query los valores nulos los dejaba con espacio vacío lo cual daba error en el codeigniter4 al no tener el valor null en el campo y determinaba que el registro estaba marcado como eliminado
  • Al momento de separar el query usaba solamente el punto y coma “;” lo cual al momento de que un registro en una columna tuviera el punto y coma “;” separada mal las consultas, se hizo el cambio para que las separa por punto y coma mas enter, es decir, “;” + char(10), lo cual funciono perfectamente, solo esperemos que en un campo de observaciones no guarden el punto coma y un enter, aunque se arreglara posteriormente

Ejemplo de uso para realizar el respaldo

Antes que nada se tiene que instalar via composer con el siguiente código 

composer require julio101290/mysql-backup


Hacemos uso de la libreria



Y ya al momento de querer realizar el respaldo que en nuestro caso es usando el framework CodeIgniter4 


 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php 
//Obtenemos los datos de conexión
    $host = config('Database')->default["hostname"];
    $dbname = config('Database')->default["database"];
    $username = config('Database')->default["username"];
    $password = config('Database')->default["password"];
    $port = config('Database')->default["port"];

    $DNS = "mysql:host=$host;port:$port;dbname=$dbname'";

    $dbBackupConection = new \PDO('mysql:host='.$host.':' . $port . ';dbname=' . $dbname . '', $username, $password);

    $mysqlBackup = new MySQLBackup($dbBackupConection, ROOTPATH . "writable/database/backup");

    try {

        $backup = $mysqlBackup->backup(false, true, false);
    } catch (Exception $ex) {

        echo $ex->getMessage();
        return;
    }






Al usarlo nos crea el archivo SQL del Respaldo


Ahora para levantar la base de datos en ejemplo es el siguiente funciom

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
public function restoreBackup($uuid) {
    $infoBackups = $this->backups->select("*")->where("uuid", $uuid)->first();

    $allBackups = $this->backups->select("*")->asArray()->findAll();
    
    helper('auth');
    $userName = user()->username;

    $host = config('Database')->default["hostname"];
    $dbname = config('Database')->default["database"];
    $username = config('Database')->default["username"];
    $password = config('Database')->default["password"];
    $port = config('Database')->default["port"];

    $DNS = "mysql:host=$host;port:$port;dbname=$dbname'";

    $dbBackupConection = new \PDO('mysql:host=localhost:' . $port . ';dbname=' . $dbname . '', $username, $password);

    $mysqlBackup = new MySQLBackup($dbBackupConection);

    try {

        $restore = $mysqlBackup->restore($infoBackups["SQLFile"], true);

        $this->backups->select("*")->where("id>0")->delete();
        $this->backups->purgeDeleted();
        
        
        $this->backups->insertBatch($allBackups);
    } catch (Exception $ex) {

        echo $ex->getMessage();
        return;
    }


    return $this->respondCreated(true, lang("backups.msg.restored"));
	}




Basicamente es mandarle el archivo SQL a la función restore

Y como pueden ver el funcionamiento es muy básico.

Cualquier duda o detalle lo pueden dejar en la caja de comentarios
OFERTAS MERCADO PAGO

¡Hola! 👋
Te regalo $ 100 de descuento para que uses en Mercado Pago por primera vez.
Aprovéchalo para:
● Comprar en Mercado Libre
● Pagar con Debit Mastercard®
● Recargar tu celular
● Pagar tus servicios
¡El descuento aplica para un pago mínimo de $ 200 y es válido hasta 7 días! 🤑
Descarga la app para activar tu descuento:
https://mpago.li/1C1TreU
OFERTAS CAFFENIO

Quiero regalarte $30 para que disfrutes de una bebida en CAFFENIO. Para aceptarlos, regístrate en https://recomendados.caffenio.com/ncFd1Tuwta

Comentarios

Entradas populares