← maurobernal.com.ar

Etiqueta: mysql

  • Como restaurar una sola tabla en MYSQL

    Desde MYSQL es posible excluír una tabla en el momento del backup, pero no es posible solo restaurar una sola tabla. A continuación te mostramos como:

    Restaurar una sola tabla en MYSQL

    En base a lo anterior en el momento de realizar nuestro backup con MYSQLDUMP podemos excluir o ignorar aquellas tablas que no deseamos realizar un backup mediante el parametro –ignore

    --ignore-table=db_name.tbl_name Do not dump the given table, which must be specified using both the database and table names. To ignore multiple tables, use this option multiple times. This option also can be used to ignore views.

    Sin embargo, en ambientes de producción es necesario restaurar una sola tabla (o varias) en una nueva ubicación. Para ello podemos hacer lo siguiente:

    1- Desde nuestra consola Linux creamos el siguiente script:

    touch restore.sh
    nano restore.sh

    2 – Colocamos en su interior lo siguiente:

    #!/bin/bash
    
    ####
    # Split MySQL dump SQL file into one file per table
    # based on http://blog.tty.nl/2011/12/28/splitting-a-database-dump
    ####
    
    if [ $# -lt 1 ] ; then
      echo "USAGE $0 DUMP_FILE [TABLE]"
      exit
    fi
    
    if [ $# -ge 2 ] ; then
      csplit -s -ftable $1 "/-- Table structure for table/" "%-- Table structure for table \`$2\`%" "/-- Table structure for table/" "%40103 SET TIME_ZONE=@OLD_TIME_ZONE%1"
    else
      csplit -s -ftable $1 "/-- Table structure for table/" {*}
    fi
    
    [ $? -eq 0 ] || exit
    
    mv table00 head
    
    FILE=`ls -1 table* | tail -n 1`
    if [ $# -ge 2 ] ; then
      mv $FILE foot
    else
      csplit -b '%d' -s -f$FILE $FILE "/40103 SET TIME_ZONE=@OLD_TIME_ZONE/" {*}
      mv ${FILE}1 foot
    fi
    
    for FILE in `ls -1 table*`; do
      NAME=`head -n1 $FILE | cut -d$'\x60' -f2`
      cat head $FILE foot > "$NAME.sql"
    done
    
    rm head foot table*

    Fuente: https://gist.github.com/jasny/1608062

    3 – Le damos permiso para ejecutar el script

    chmod +x restore.sh

    4- Uso del script

    El mismo permite limpiar un archivo de backup de MySQL y dejar la parte relevante a nuestra tabla. Su uso sería así:

    • Extraer todas las tablas en archivos individuales
    ./restore.sh mybackup.sql
    • Extraer una sola tabla específica en un archivo individual
    restore.sh mybackup.sql table1

    5-Restaurar la tabla en una base especifíca

    mysql -D mydatabase < mytable1.sql

    Espero que le sea útil

     

  • Uso de LAG en SQL Server

    Dos nuevas funciones analíticas: LAG y LEAD

    A partir de la versión 2012 de SQL Server se incorporaron entre otras cosas dos funciones nuevas, que permiten acceder a la fila anterior, o posterior de una consulta.

    Algo que anteriormente era imposible, y tocaba solucionar con Tablas Pivot, o usando Self Join

    LAG y LEAD

    Primero entendamos que hace cada una:

    LAG: devuelve el valor (de una columna especificada) que estuvo en la fila anterior.

    LEAD: devuelve el valor (de una columna especificada) que estuvo en la fila siguiente.

    Mas info:

    https://docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql

    https://docs.microsoft.com/en-us/sql/t-sql/functions/lag-transact-sql

     

     

     

     

  • Usando MYSQL varbinary con Linq to Entities

    Continuando mi proyecto de realizar un integrador de una base MYSQL con una base MSSQL, me encontré un nuevo problema con los campos VARBINARY.

    Básicamente en ellos guardada textos planos, pero al ser VARBINARY, LINQ to ENTITIES los trataba como ARRAYS (binarios). Para convertir los valores use la siguiente función:

    system.text.Encoding.ASCII.GetString(tabla.campo).

     

    Los tipos BINARY y VARBINARY son similares a CHAR y VARCHAR, excepto que contienen cadenas de caracteres binarias en lugar de cadenas de caracteres no binarias. Esto es, contienen cadenas de bytes en lugar de cadenas de caracteres. Esto significa que no tienen conjunto de caracteres asignado, y la comparación y ordenación se basa en los valores numéricos de los valores de los bytes

  • The version of SQL in use does not support datatype ‘datetime2’

    Actualmente estoy trabajando en un proyecto de integrar información de un motor MYSQL 5.0 a MSSQL 2005. Para ello el integrador esta en VB NET 2010 con DotNet 4.0.

    El mejor framework para el diagramado y la realización de consultas fue usar LINQ TO ENTITIES.

    Luego de un par de dolores de cabeza(*) pude llevar mi primera prueba al servidor de producción.

    Al ejecutarlo obtuve mi primer error «The versión of SQL in use does not support datatype ‘datetime2′» .

    En este momento recordé que mi servidor de desarrollo era un MSSQL Server 2008, y el de producción un MSSQL 2005. (L)

    Antes de poder ponerme a pensar que hacer decidí googlearlo y encontré una solución simple pero efectiva.

    Consiste en buscar el .emdx dentro del projecto de Visual Studio. Modificarlo con un editor de XML, o similar. Y buscar el siguiente código.

    ProviderManifestToken=«2008« y reemplazarlo por ProviderManifestToken=«2005«

    Algo simple pero efectivo… Al final funcionó…

    (*) Si al ejecutar su aplicación se cierra sin más aviso, no se olviden de instalar el MYSQL Connector con el que estuvieron trabajando en el servidor de producción.

  • Reiniciar contador de campo autoincremental

    Trabajar con campos INT con el atributo IDENTITY es muy útil, ya que los valores se generan automáticamente de manera secuencial empezando del 1.

    El problema surge cuando debemos reiniciar esa cuenta. Para ello podemos utilizar

    En SQL Server 2005 o Posterior

    DBCC CHECKIDENT (NOMBRE_TABLA, RESEED, 0)

     En MYSQL 

    ALTER TABLE NOMBRE_TABLA AUTO_INCREMENT=0

     

Tags

tsql (27)mssql (26)sql (20)devops (20)dotnet (18)docker (15)performance (14)contenedores (11)dotnet10 (10)linux (9)csharp (8)microservicios (7)angular (7)angular21 (7)sql server (6)issabel (6)docker-compose (6)typescript (6)mysql (5).NET (5)