Pages

03 octubre 2010

Respaldos e importaciones de MySQL


La razón fundamental por la que escribo este post, es porque siempre que tengo que hacer este tipo de tareas olvido la sintaxis y quiero tenerla en un solo lugar.

En este post mostraré comandos básicos para realizar tareas de importación y exportación de datos provenientes de bases de datos MySQL.

Respaldando a un archivo .sql , la opción --opt permite hacer un copia de seguridad de la base de datos de forma mas rápida.

mysqldump --opt --password=clave --user=user basededatos > archivo.sql

Restaurando una base de datos a partir de un archivo.sql

mysql --password=miclave --user=miuser mibase < archivo.sql

Otra situación común que se puede presentar, es que tengamos los datos de una tabla en formato csv y queramos importarlos a una tabla de base de datos MySQL, en este caso nos puede funcionar lo siguiente.

Primero loguearse en mysql, puede ser de la siguiente forma en el caso de que "root" sea el usuario.

$mysql -u root -p

Deberá aparecer que estamos dentro de la siguiente forma.
mysql>

Entrar a la base de datos en la cual queremos importar los datos.
mysql> USE nombrebasededatos;

Ahora colocamos la siguiente sentencia, asumiendo que los campos en el archivo csv están separados por "," y que las filas están separadas por un salto de linea. Es importante recalcar que el orden de los campos colocados en esta importación deben coincidir con el orden de los campos de la tabla en la base de datos.

LOAD DATA LOCAL INFILE '/home/ruta_hasta_archivo_csv/archivo.csv' INTO TABLE nombre_tabla FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' (campo1, campo2, campo3, campo4);


En caso de obtener Warnings o Skipped, se pueden deber comúnmente a que introducimos tipos de datos que no corresponden con la definición de los campos de la tabla, es bueno revisar la longitud de los campos, tipos de decimales y si estos permiten quedar vacíos.

Como extra quiero agregar otro tip que les puede ayudar en caso de tener que los datos que importamos se muestran con caracteres raros, muchas veces donde deben ir acentos u otros caracteres especiales del idioma español. Esto se debe a que la base de datos no esta configurada para la codificación UTF8, en este caso los siguientes comandos pueden ayudar.

Cambiar el charset de cada campo.
update tabla set campo = convert( convert(campo using binary) using utf8);


Cambiar el charset de la tabla.
alter table tabla charset = utf8;


Cambiar el charset de la base de datos
alter database basededatos charset = utf8;


UPDATE:
En el mejor de los escenarios es mas idoneo desde un comienzo crear la base de datos con compatibilidad para UTF8. Eso se logra de la siguiente forma

create database basededatos character set utf8 collate utf8_general_ci;

Para mayores opciones de seguridad, también les recomiendo ver el comentario que nos dejo Marcos en esta entrada

Bueno eso es todo, ojala sea de utilidad para alguien ademas de a mi :)



2 comentarios:

Marcos dijo...

Un pequeño aporte en cuanto a la seguridad: si los comandos para respaldar y restaurar la base contienen una clave, ésta quedará en el "history", pudiendo ser accedida luego por usuarios no autorizados.
Si el respaldo/restauración es interactivo (es decir, no está dentro de un script), se puede pedir primero la clave al usuario, guardar la en una variable y usar esta variable en el comando:

$ read -sp "Clave para respaldar la base: " CLAVE
$ mysqldump --opt --password=$CLAVE --user=user basededatos > archivo.sql

Byron Corrales dijo...

@Marcos Excelente aporte, espero que los que lean este post lo tomen en cuenta

Publicar un comentario

Estas en todo tu derecho de opinar lo que quieras, gracias por tu comentario !!!