New question

Question:

Date: 01-09-2015 18:34:05 (In Spanish)

Hacer Backup de Base de Datos MySQL con windows, archivo .bat[Resolved]

Hola a todos
En esta occasion quería consultarles como realizar un buen backup de una base de datos por medio de una archivo *.bat que luego sera ejecutado por una tarea programad de Windows.

Comencé a reflotar el tema de la programación con los archivos Batch (archivo de procesamiento por lotes)
Hace décadas que yo no hacia nada con estos archivos.

La idea es hacer un backup total de la base de datos, la estructura de la base de datos, sus tablas, sus registros,
los event, triggers, vistas, etc abarcar todo lo que se pueda.

El archivo que he creado ejecuta mysqldump de mysql con ciertos argumentos que se le pasan.

Y se obtendría un archivo que contiene el backup:
cuyo nombre seria del formato: [nombreBaseDatos]_[MM/DD/YYYY]_[Hora_minutos_segundos].sql
ej: databasetest_09-02-2015_10_05_32.sql
Dischos archivos lo guardaria en el directorio backupfiles

El codigo del archivo: mysqlbackup.bat es el siguiente

@echo off
title Backup Mysql
cls
color 17
Echo Backup de base de datos.
echo ___________________________
echo.

:: seteo de la fecha y la hora
set Dia=%Date:~0,2%
set Mes=%Date:~3,2%
set Anio=%Date:~6,4%

set Hora= %Time:~0,2%
set Minutos=%Time:~3,2%
set Segundos=%Time:~6,2%

:: usuario db
set dbuser=userdb

:: Password de user
set dbpass=PassUser.159

:: Database
set database= databasetest

rem quito los espacios en blanco
set database=%database: =%

rem MM/DD/YYYY
set Archivo=%database%_%Mes%-%Dia%-%Anio%_%Hora%_%Minutos%_%Segundos% .sql

rem elimina espacios en blanco
set Archivo=%Archivo: =%

:: MySQL EXE Path
set mysqldumpexe=e:\wamp\bin\mysql\mysql5.6.17\bin\mysqldump.exe

:: MySQL EXE Pathbackup
set backupfolder=e:\MySQLBackups\backupfiles\

:: Opciones 
set opciones= --single-transaction --set-gtid-purged=OFF --add-drop-database --triggers --routines --events


:: Ejecuta la la sentencia
 %mysqldumpexe% %opciones% -u %dbuser% -p%dbpass% %database% > %backupfolder%%Archivo%


echo ________________________________________________________________
echo.
echo Se realizo el backup de la base de datos: [%database%]
echo.
echo Nombre del archivo de backup: [%Archivo%]
echo.
echo ubicado en [%backupfolder%]
echo.
echo ________________________________________________________________


Al ejecutar el archivo desde la consola de windows sale:

Backup de base de datos.
___________________________

Warning: Using a password on the command line interface can be insecure.
________________________________________________________________

Se realizo el backup de la base de datos: [databasetest]

Nombre del archivo de backup: [databasetest_09-02-2015_0_06_31.sql]

ubicado en [e:\MySQLBackups\backupfiles\]

________________________________________________________________

E:\MySQLBackups>


No he logrado poder arreglar el Warning

Warning: Using a password on the command line interface can be insecure.

El contenido del archivo si esta bien el backup.
Por ejemplo:
Archivo resultante: databasetest_09-02-2015_10_05_32.sql
-- MySQL dump 10.13  Distrib 5.6.17, for Win64 (x86_64)
--
-- Host: localhost    Database: databasetest
-- ------------------------------------------------------
-- Server version	5.6.17

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;
/*!40103 SET TIME_ZONE='+00:00' */;
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

--
-- Table structure for table `tablaprueba`
--

DROP TABLE IF EXISTS `tablaprueba`;
/*!40101 SET @saved_cs_client     = @@character_set_client */;
/*!40101 SET character_set_client = utf8 */;
CREATE TABLE `tablaprueba` (
  `id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
  `nombre` varchar(120) COLLATE utf8_spanish_ci NOT NULL,
  `apellido` varchar(120) COLLATE utf8_spanish_ci NOT NULL,
  `edad` int(3) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci;
/*!40101 SET character_set_client = @saved_cs_client */;

--
-- Dumping data for table `tablaprueba`
--

LOCK TABLES `tablaprueba` WRITE;
/*!40000 ALTER TABLE `tablaprueba` DISABLE KEYS */;
INSERT INTO `tablaprueba` VALUES (0000000001,'walter','sanchez',42),(0000000002,'juan','riquelmes',45),(0000000003,'pedro','rodriguez',28);
/*!40000 ALTER TABLE `tablaprueba` ENABLE KEYS */;
UNLOCK TABLES;

--
-- Dumping events for database 'databasetest'
--

--
-- Dumping routines for database 'databasetest'
--
/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

-- Dump completed on 2015-09-02  0:06:31



Como reparo el Warning.
Falta que genere la base de datos si no existe.
Que se puede mejorar en el archivo bat para que tenga mayor funcionalidad.

Luego me quedara realizar otro script BAT para restaurar la base de datos.

Muchas gracias por la atención.
Quedo en la espera de respuestas.
Espero que mi inquietud les sea util a otros usuarios

Saludos.
Tags: Backup - Database - MySQL - Question - Warning - Windows Votes: 2 - Answers: 3 - Views: 31 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 02-09-2015 08:28:38 Hola Walter,
    Para lo del Warning el detalle es esta línea:

    %mysqldumpexe% %opciones% -u %dbuser% -p%dbpass% %database% > %backupfolder%%Archivo%
    


    Como le estás pasando la contraseña directamente te va a desplegar ese warning siempre. La solución requiere un poco más de trabajo:
    1. Remueve la contraseña de esa línea
    2. Captura el evento que te va a solicitar la contraseña
    3. Pasa la contraseña

    Respecto a que genere la base de datos si no existe, eso ya lo pone la sentencia por defecto.
    Ya he hecho algo así pero para Linux.
      Votes: 2 - Link answer
     
  • Date: 02-09-2015 14:58:08 Muchas Gracias Ernesto por tu respuesta

    Por el momento lo del Warning voy hacer caso omiso.

    He alterado una liinea del script, para hacerlo mas ajustado a mis necesidades.

    
    :: Opciones 
    set opciones= --single-transaction --set-gtid-purged=OFF --add-drop-database --create-options --complete-insert --extended-insert=false --hex-blob --dump-date --comments --triggers --routines --events 
    
    


    El bat generaría backup de
    -triggers (Disparadores)
    -routines (rutinas almacenadas -stored procedures y funciones-)
    -events (planificador o tarea programada)


    Me faltaría hacer backup de las vistas (Views) que tenga esa base de datos, aun no encuentro como hacerlo

    saludos
      Votes: 2 - Link answer
     
  • Date: 29-09-2015 08:07:09 Hola Walter, muy buena tu inquietud / aporte. Aquí te dejo una forma de hacer backup de las views de una determinada base de datos por medio de línea de comandos (tendras que remplazar el usuario "root" por tus credenciales y obviamente donde dice "NOMBRE_BASE_DE_DATOS" por el nombre de la base de datos que asocia las vistas).

    mysql -u root INFORMATION_SCHEMA --skip-column-names --batch -e "SELECT CONCAT('DROP TABLE IF EXISTS ', TABLE_SCHEMA, '.', TABLE_NAME, '; CREATE OR REPLACE VIEW ', TABLE_SCHEMA, '.', TABLE_NAME, ' AS ', VIEW_DEFINITION, '; ') table_name from information_schema.views WHERE TABLE_SCHEMA = 'NOMBRE_BASE_DE_DATOS'" > backup_views.sql
    


    El script te va a generar un archivo "backup_views.sql" donde estará todo el SQL para crear nuevamente la vista al momento de hacer restore.

    Como comentarios al script se puede decir que se utiliza el ejecutable "mysql.exe" (no mysqldump) para consultar la tabla VIEWS de la base de datos INFORMATION_SCHEMA y crea por medio de la concatenación de strings las sentencias para hacer "CREATE OR REPLACE" de las vistas.

    Saludos,
    Fernando
      Votes: 2 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In