Back Up Base de Datos

21
Universidad Politecnica De Tapachula Brindis Gonzalez Carlos Francisco, IDS RESPALDO DE UNA BASE DE DATOS Y RESTAURARLA. Respaldo de bases de datos.

description

exportar una base de datos

Transcript of Back Up Base de Datos

  • Universidad Politecnica De Tapachula Brindis Gonzalez Carlos Francisco, IDS

    RESPALDO DE UNA BASE DE DATOS Y RESTAURARLA. Respaldo de bases de datos.

  • 1

    Backup MySQL

    Prohibida la reproduccin total o parcial de este artculo sin el previo consentimiento de Webtutoriales.com

    Realizar un backup mysql (copia de seguridad) de las bases de datos y tablas MySQL

    Hacer una copia de seguridad de las tablas y bases de datos MySQL

    Cuando una base de datos crece, es importante hacer backups de forma regular. Hay varias formas de realizar un backup en MySQL, desde la linea de comandos (usando el comando mysqldump) o usando una aplicacin externa como phpMyAdmin.

    Hacer un backup con Linux

    Si estamos en un servidor linux podemos ejecutar el siguiente cdigo en la linea de comandos para realizar un backup

    1. mysqldump --opt -u nombredeusuario -p basededatos tabla1 > archivodebackup

    nombredeusuario: es el nombre del usuario que tiene permisos para acceder a la base de datos. basededatos: el nombre de la base de datos de la que queremos realizar el backup. tabla1: es un parmetro opcional necesario si queremos realizar el backup de slo una tabla de la base de datos. Podemos escribir ms tablas separadas por espacios en blanco. No es necesario especificar ninguna tabla si queremos hacer un respaldo de toda la base de datos. archivodebackup: es el nombre del archivo que contendr el backup de la base de datos (la estructura de las tablas y los datos).

    Una vez ejecutado este comando nos pedir la password del usuario y se crear el archivo de backup en el directorio en el que nos encontramos.

    Hacer un backup con Windows

    Si queremos realizar una copia de seguridad desde entornos Windows, deberemos utilizar la linea de comandos ("cmd"). Para abrir la linea de comandos en Windows podemos ir al men Inicio>Ejecutar, escribir cmd y pulsar enter). Se nos abrir la linea de comandos de Windows. Ahora hemos de situarnos en la carpeta donde tenemos instalados los binarios de MySQL por ejemplo: c:\mysql\bin (esta ruta depende de dnde instalaste MYSQL) y escribimos el mismo comando que en linux:

    1. mysqldump --opt -u nombredeusuario -p basededatos tabla1 > archivodebackup.txt

    Comprimir un backup en Linux

    Podemos comprimir el archivo resultante de hacer el backup tras ejecutar el comando mysql dump. Por ejemplo:

  • 2

    1. mysqldump --opt -u nombredeusuario --password=clave basededatos > archivodebackup.sql

    2. tar -cfv archivodebackup.sql.tar archivodebackup.sql 3. gzip archivodebackup.sql

    Backup de una base de datos InnoDB

    Para una base de datos transaccional (de tipo InnoDB o BDB) y de gran tamao, se puede utilizar este comando

    1. mysqldump --opt -q --single-transaction -u nombredeusuario -

    p basededatos tabla1 > archivodebackup.txt

    El parmetro -q es til para bases de datos de gran tamao.

    Backup con phpMyAdmin

    phpMyAdmin es una aplicacin para navegar a travs de las tablas creadas en la base de datos mysql que te permite realizar muchas operaciones.

    Es muy sencillo exportar tablas y bases de datos con esta aplicacin. Una vez lo hayas instalado, puedes hacer click en la base de datos de la que quieras una copia de seguridad. En el men de arriba puedes hacer click sobre EXPORT. Entrars en una pgina donde podrs escoger el tipo de archivo en que quieres guardar el backup (txt,pdf,csv,etc) y despus si quieres exportar slamente la estructura de la tabla, slo los datos o los dos. Tambin hay la posibilidad de comprimir el archivo, til para grandes bases de datos. Finalmente, presionas sobre el botn EXPORT del formulario y te podrs descargar el creado con todos los datos de tus tablas.

    Hacer respaldos de Bases de Datos MySQL con MySQLDump

    El comando mysqldump proporciona una manera conveniente para respaldar datos y estructuras de tablas. Hay que notar que mientras el comando mysqldump no es el mtodo ms eficiente para crear respaldos ,ste ofrece un medio conveniente para copiar datos y estructuras de tablas que puede ser usado para poblar otro servidor SQL, no importando si se trata, o no de un servidor MySQL.

    El comando mysqldump puede ser usado para crear respaldos de todas las bases de datos, algunas bases de datos, slo una de ellas, o incluso ciertas tablas de una base de datos dada. En esta seccin se ilustra la sintaxis involucrada con varios posibles escenarios, seguida con unos pocos ejemplos.

    Desde una ventana de comandos nos posicionamos en la carpeta bin de nuestro directorio mysql y podemos usar las siguientes instrucciones:

    Usando el comando mysqldump para respaldar slo una base de datos:

    bin> mysqldump [opciones] nombre_base_datos

    Usando el comando mysqldump para respaldar varias tablas de una base de datos:

    bin> mysqldump [opciones] nombre_base_datos tabla1 tabla2. . . tablaN

  • 3

    Usando mysqldump para respaldar varias bases de datos:

    bin> mysqldump [opciones] --databases [opciones] nombre_bd1 nombre_bd2...

    Usando mysqldump para respaldar todas las bases de datos:

    bin> mysqldump [opciones] --all-databases [opciones]

    Las opciones pueden ser vistas ejecutando el siguiente comando:

    bin> mysqldump --help

    - Ejemplos -

    Respaldar ambos, la estructura y los datos encontrados dentro de la base de datos widgets puede ser realizado como sigue:

    bin> mysqldump -u root -p --opt widgets

    Alternativamente, quizs se requiera respaldar nicamente los datos, esto es logrado al incluir la opcin no-create-info, lo que significa que no se creen los datos relativos a la creacin de las tablas.

    bin>mysqldump -u root -p --no-create-info widgets

    Otra variacin es respaldar nicamente la estructura de las tablas, esto es logrado al incluir la opcin no-data, que significa la no creacin de los datos de las tablas.

    bin>mysqldump -u root -p --no-data widgets

    Si se est planeando usar mysqldump con el fin de respaldar datos para que puedan ser movidos a otro servidor MySQL, es recomendado que se use la opcin opt. Esto nos dar un respaldo optimizado de los datos que tendr como resultado un tiempo ms rpido de lectura cuando se quieran cargar los datos en otro servidor MySQL.

    Mientras mysqldump proporciona un mtodo conveniente para respaldar datos, hay un segundo mtodo, el cuales ms rpido, y ms eficiente. Esto se describe en la siguiente seccin.

    Visto de una forma msencilla como ejemplos tenemos los siguiente:

    Para copiar estructura y datos: c:\mysql\bin>mysqldump -u root -p opt nombreDeMiDBOrigenaRespaldar > nombreRespaldo.sql

    Para copiar solo datos: c:\mysql\bin>mysqldump -u root -p no-create-info nombreDeMiDBOrigenaRespaldar > nombreRespaldo.sql

    Para copiar solo estructura: c:\mysql\bin>mysqldump -u root -p no-data nombreDeMiDBOrigenaRespaldar > nombre_respaldo.sql

  • 4

    Y para recuperar una copia de seguridad:

    C:\mysql\bin>mysql -u root -p contrasea dbDondeSeVaArespaldar < respaldoACargar.sql

    Tutorial Mysql

    MySQL es un sistema de gestin de base de datos relacional, multihilo y

    multiusuario con ms de seis millones de instalaciones.MySQL AB desarrolla

    MySQL como software libre en un esquema de licenciamiento dual.

    Backup MySQL con mysqldump El comando mysqldump del sistema gestor de base de datos

    MySQL sirve para hacer copias de seguridad. Lo explicamos

    con detenimiento y vemos sus opciones ms importantes.

    Este comando permite hacer la copia de seguridad de una o mltiples bases de datos. Adems permite que estas copias de seguridad se puedan restaurar en distintos tipos de gestores de bases de datos, sin la necesidad de que se trate de un gestor de mysql. Esto lo consigue creando unos ficheros, que contienen todas las sentencias sql necesarias para poder restaurar la tabla, que incluyen desde la sentencia de creacin de la tabla, hasta una sentencia insert por cada uno de los registros que forman parte de la misma. El comando dispone de una amplia variedad de opciones que nos permitir realizar la copia de la forma ms conveniente para el propsito de la misma. Para poder restaurar la copia de seguridad, bastar con ejecutar todas las sentencias sql que se encuentran dentro del fichero, bien desde la lnea de comandos de mysql, o desde la pantalla de creacin de sentencias sql de cualquier entorno grfico como puede ser el Mysql Control Center. Las limitaciones de la restauracin dependern de las opciones que se han especificado a la hora de hacer la copia de seguridad, por ejemplo, si se incluye la opcin --add-drop-table al hacer la copia de seguridad, se podrn restauran tablas que existen actualmente en el servidor (borrndolas primero). Por lo que es necesario estudiar primero los procedimientos que se utilizarn tanto en la copia como en la restauracin, para que todo salga correcto!

    Algunas de las opcines que tiene son:

    --add-locks Aade LOCK TABLES antes, y UNLOCK TABLE despues de la

  • 5

    copia de cada tabla.

    --add-drop-table Aade un drop table antes de cada sentencia create

    -A, --all-databases Copia todas las bases de datos. Es lo mismo que utilizar --databases seleccionando todas.

    -a, --all Incluye todas las opciones de creacin especficas de Mysql.

    --allow-keywords Permite la creacin de nombes de columnas que son palabras clave, esto se realiza poniendo de prefijo a cada nombre de columna, el nombre de la tabla

    -c, --complete-insert Utiliza inserts incluyendo los nombres de columna en cada sentencia (incrementa bastante el tamao del fichero)

    -C, --compress Comprime la informacin entre el cliente y el servidor, si ambos soportan compresin.

    -B, --databases Para copiar varias bases de datos. En este caso, no se especifican tablas. El nombre de los argumentos se refiere a los nombres de las bases de datos. Se incluir USE db_name en la salida antes de cada base de datos.

    --delayed Inserta las filas con el comando INSERT DELAYED.

    -e, --extended-insert Utiliza la sintaxis de INSERT multilinea. (Proporciona sentencias de insert ms compactas y rpidas.)

    -#, --debug[=option_string] Utilizacin de la traza del programa (para depuracin).

    --help Muestra mensaje de ayuda y termina.

    --fields-terminated-by=... --fields-enclosed-by=... --fields-optionally-enclosed-by=... --fields-escaped-by=... --lines-terminated-by=... Estas opciones se utilizan con la opcin -T y tienen el mismo

  • 6

    significado que la correspondiente clusula LOAD DATA INFILE.

    -F, --flush-logs Escribe en disco todos los logs antes de comenzar con la copia

    -f, --force, Contina aunque se produzca un error de SQL durante la copia.

    -h, --host=.. Copia los datos del servidor de Mysql especificado. El servidor por defecto es localhost.

    -l, --lock-tables. Bloquea todas las tablas antes de comenzar con la copia. Las tablas se bloquean con READ LOCAL para permitir inserts concurrentes en caso de las tablas MyISAM. Cuando se realiza la copia de mltiples bases de datos, --lock-tables bloquear la copia de cada base de datos por separado. De forma que esta opcin no garantiza que las tables sern consistentes lgicamente entre distintas bases de datos. Las tablas en diferentes bases de datos se copiarn en estados completamente distintos.

    -K, --disable-keys Se inluir en la salida /*!40000 ALTER TABLE tb_name DISABLE KEYS */; y /*!40000 ALTER TABLE tb_name ENABLE KEYS */; Esto har que carga de datos en un servidor MySQL 4.0 se realice ms rpido debido a que los ndices se crearn despus de que todos los datos hayan sido restaurados.

    -n, --no-create-db No se incluir en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name; Esta lnea se incluye si la opcin --databases o --all-databases fue seleccionada.

    -t, --no-create-info No incluir la informacin de creacin de la tabla (sentencia CREATE TABLE).

    -d, --no-data No incluir ninguna informacin sobre los registros de la tabla. Esta opcin sirve para crear una copia de slo la estructura de la base de datos.

    --opt Lo mismo que --quick --add-drop-table --add-locks --extended-insert --lock-tables. Esta opcin le debera permitir realizar la copia de seguridad de la base de datos de la forma ms rpida y efectiva.

    -pyour_pass, --password[=your_pass] Contrasea utilizada cuando se conecta con el servidor. Si no se

  • 7

    especifica, `=your_pass', mysqldump preguntar la contrasea.

    -P, --port=... Puerto utilizado para las conexiones TCP/IP

    --protocol=(TCP | SOCKET | PIPE | MEMORY) Especifica el protocolo de conexin que se utilizar.

    -q, --quick No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza mysql_use_result() para realizarlo.

    -Q, --quote-names Entrecomilla las tablas y nombres de columna con los caracteres ``'.

    -r, --result-file=... Redirecciona la salida al fichero especificado. Esta opcin se debera utilizar en MSDOS, porque previene la conversin de nueva lnea `\n' en nueva lnea y retorno de carro`\n\r'.

    --single-transaction Utiliza el comando BEGIN antes de realizar la copia desde el servidor. Es muy til con las tables InnoDB y el nivel de transaccin READ_COMMITTED, porque en este modo realizar la copia de seguridad en un estado consistente sin necesidad de bloquear las aplicaciones. Consultar el manual para ms detalles.

    -S /path/to/socket, --socket=/path/to/socket El fichero de sockets que se especifica al conectar al localhost (que es el host predeterminado).

    --tables sobreescribe la opcin --databases (-B).

    -T, --tab=path-to-some-directory Crea un fichero table_name.sql, que contiene la sentencia de creacin de SQL, y un fichero table_name.txt, que contiene los datos de cada tabla. El formato del fichero `.txt' se realiza de acuerdo con las opciones --fields-xxx y --lines--xxx options. Nota: Esta opcin slo funciona si el comando mysqldump se ejecuta en la misma msquina que el demonio mysqld, el usuario deber tener permisos para crear y escribir el fichero en la ubicacin especificada -u nombre_usuario, --user=nombre_usuario El nombre de usuario que se utilizar cuando se conecte con el servidor, el valor predeterminado es el del usuario actual.

    -v, --verbose Va mostrando informacin sobre las acciones que se van realizando (ms lento)

  • 8

    -w, --where='clusula where' Sirve para realizar la copia de determinados registros -X, --xml Realiza la copia de seguridad en un documento xml -x, --first-slave Bloquea todas las tablas de todas las bases de datos

    Ejemplos de comandos mysqldump: Para realizar la copia se seguridad de la base de datos mibase al fichero copia_seguridad.sql

    mysqldump --opt mibase > copia_seguridad.sql

    Otro ejemplo ms complejo de comando mysqldump para hacer el

    backup de una base de datos es el siguiente:

    mysqldump --opt --password=miclave --user=miuser mibasededatos > archivo.sql

    En este ltimo caso estamos indicando un nombre de usuario y una clave para acceder a la base de datos sobre la que se est haciendo el backup: mibasededatos. Las sentencias SQL para reconstruir esa base de datos se volcarn en el fichero archivo.sql.

    Restaurar la base de datos

    Si deseamos recuperar la informacin de un fichero para restaurar una copia de seguridad de la base de datos lo haremos con el comando mysql. Utilizaremos una sintaxis como esta:

    mysql mibase < archivo.sql

    En este ejemplo se restaurara la base de de datos mibase con el backup almacenado en el fichero archivo.sql.

    Otro ejemplo ms complejo de comando para restaurar una base de datos es el siguiente:

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

    Es el mismo ejemplo que el anterior, pero indicando un nombre de usuario y una clave con las que acceder a la base de datos mibase.

  • 9

    Copias de seguridad de bases de datos

    Debido a que las tablas de MySQL se almacenan como archivos, es fcil hacer una copia de seguridad. Para hacer una copia consistente haga un LOCK TABLES en las tablas relevantes, seguido de un FLUSH TABLES para las tablas. Consulte Seccin 13.4.5, Sintaxis de LOCK TABLES y UNLOCK TABLES y Seccin 13.5.5.2, Sintaxis de FLUSH. Solo necesita obtener un bloqueo de lectura; esto permite a otros clientes continuar consultando la tabla mientras usted est haciendo una copia de los archivos del directorio de la base de datos. La sentencia FLUSH TABLES es necesaria para asegurarse de que todas las pginas de ndice activas se escriben al disco antes de que comience la copia.

    Si quiere hacer una copia de una tabla a un nivel SQL, puede utilizar SELECT INTO ... OUTFILE o BACKUP TABLE. Para SELECT INTO ... OUTFILE, el archivo de salida no debe existir previamente. Esto tambin es cierto para BACKUP TABLE, ya que permitir que archivos externos sean sobreescritos sera un riesgo de seguridad.

    Otra tcnica para hacer copias de seguridad de una base de datos es utilizar el programa mysqldump o el script mysqlhotcopy script. Hacer una copia completa de su base de datos:

    1. shell> mysqldump --tab=/path/to/some/dir --opt db_name

    O:

    shell> mysqlhotcopy db_name /path/to/some/dir

    Tambin puede simplemente copiar todos los archivos de tablas (*.frm, *.MYD, y *.MYI) siempre que el servidor no est actualizando nada. El script mysqlhotcopy utiliza este mtodo. (Pero tenga en cuenta que estos mtodos no funcionan si su base de datos contiene tablas InnoDB. InnoDB no almacena los contenidos de las tablas en directorios de base de datos, y mysqlhotcopy funciona solo para tablas MyISAM e ISAM.)

    2. Pare mysqld si se est ejecutando, y despus reinicielo con la opcin --log-bin[=file_name Los archivos binarios de registro le dan la informacin que necesita para replicar los cambios que se han producido en la base de datos tras el punto en que usted ejecut mysqldump.

    Para las tablas InnoDB es posible realizar una copia de seguridad en lnea que no requiere bloqueos en las tablas MySQL tiene soporte para copias de seguridad incrementales: Usted necesita iniciar el servidor con la opcin --log-bin para activar el registro binario. En el momento en que usted quiera realizar una copia de seguridad incremental (que contenga todos los cambios que han ocurrido desde la ltima copia de seguridad, completa o incremental), usted debe rotar el registro binario utilizando FLUSH LOGS. Hecho esto, necesita copiar a la localizacin de seguridad todos los registros binarios que daten desde el momento de la ltima copia de seguridad hasta el ltimo. Estos logs binarios son la copia de seguridad incremental; cuando necesite restaurar la copia, los puede aplicar tal como se explica ms adelante. La prxima vez

  • 10

    que haga una copia de seguridad compelta, tambin debe rotar el registro binario haciendo FLUSH LOGS, mysqldump --flush-logs, o mysqlhotcopy --flushlogs..

    Si su servidor MySQL es un servidor esclavo de replicacin, entonces independientemente del mtodo de copia de seguridad que elija, tambin debe copiar los archivos master.info y relay-log.info cuando copie los datos de su esclavo. Estos archivos son siempre necesarios para continuar la replicacin despus de una restauracin de los datos del esclavo. Si su esclavo est replicando comandos LOAD DATA INFILE, debera tambin copiar cualquier archivo SQL_LOAD-* que pueda existir en el directorio especificado por la opcin --slave-load-tmpdir. (Esta localizacin es por defecto el valor de la variable tmpdir, si no se especifica.) El esclavo necesita estos archivos para reiniciar la replicacin de cualquier operacin LOAD DATA INFILE interrumpida.

    Si tiene que restaurar tablas MyISAM, intente recuperarlas utilizando REPAIR TABLE o myisamchk -r primero. Esto debera funcionar en el 99.9% de los casos. Si myisamchk falla, intente el siguiente procedimiento. Tenga en cuenta que solo funciona si tiene activado el registro binario iniciando el servidor MySQL con la opcin --log-bin;.

    1. Restaure la copia de seguridad original de mysqldump, o la copia de seguridad binaria.

    2. Ejecute el siguiente comando para ejecutar de nuevo las actualizaciones de los registros binarios:

    3. shell> mysqlbinlog hostname-bin.[0-9]* | mysql

    En algunos casos, quiz quiera reejecutar solo ciertos registros binarios, desde ciertas posiciones (lo usual es querer reejecutar todos los registros binarios desde el punto de restauracin, excepto, posiblemente, algunas sentencias incorrectas).

    Tambin puede hacer copias de seguridad selectivas de archivos individuales:

    Para volcar la tabla, utilice SELECT * INTO OUTFILE 'file_name' FROM tbl_name.

    Para recargar la tabla, restaurela con LOAD DATA INFILE 'file_name' REPLACE ... Para evitar registros duplicados, la tabla tiene que tener un ndice PRIMARY KEY o UNIQUE. La palabra clave REPLACE hace que los viejos registros sean reemplazados con los nuevos cuando un nuevo registro tiene la misma clave que uno antiguo.

    Si tiene problema de rendimientos con su servidor mientras realiza copias de seguridad, una estrategia que puede ayudarle es crear replicacin y hacer las copias de seguridad en el esclavo en vez de en el maestro.

    Si est utilizando un sistema de ficheros Veritas, puede hacer una copia de seguridad as:

    1. Desde un programa cliente, ejecute FLUSH TABLES WITH READ LOCK. 2. Desde otra lnea de comandos, ejecute mount vxfs snapshot. 3. Desde el primer cliente, ejecute UNLOCK TABLES. 4. Copie los archivos de la captura (snapshot). 5. Desmonte la captura.

  • 11

    Copia de respaldo y restauracin de bases de datos Mysql En este artculo veremos la manera ms sencilla de hacer una copia de respaldo y

    luego restaurar una base de datos Mysql.

    Copia de respaldo

    Para hacer una copia de respaldo de una base de datos se recomienda crear un

    dump.

    Para hacer un dump de todas las bases de datos es necesario ejecutar el comando:

    mysqldump --user=****** --password=****** -A > /Ruta/Hacia/archivo_dump.SQL

    Para hacer un dump de slo algunas bases de datos es necesario ejecutar el comando:

    mysqldump --user=****** --password=****** db_1 db_2 db_n> /Ruta/Hacia/archivo_dump.SQL

    Para hacer un dump de todas las tablas de una base de datos es necesario ejecutar el comando:

    mysqldump --user=****** --password=****** db > /Ruta/Hacia/archivo_dump.SQL

    Para hacer un dump de slo ciertas tablas de una base de datos es necesario ejecutar el comando:

    mysqldump --user=****** --password=****** db --tablas tab1 tab2 > /Ruta/Hacia/archivo_dump.SQL

    Para cada uno de estos comando es necesario indicar un usuario (user) y la

    contrasea (password) con derechos de administrador en la base de datos.

    Restauracin

    Para restaurar un dump tan slo hay que ejecutar el comando:

    mysql --user=****** --password=****** db_nom < /Ruta/Hacia/archivo_dump.SQL

    Backup MySQL mediante Sentencias Sql Cmo realizar un backup de las tablas de una base de datos y su recuperacin a

    partir de sentencias SQL.

  • 12

    Veremos cmo realizar una copia de seguridad de la tabla y su recuperacin a partir de sentencias SQL. Backup de los datos Este comando nos permite hacer una copia de los ficheros de las tablas de las cuales queremos hacer un backup, actualmente solo funciona con tablas de tipo MyIsam, y copia tanto los ficheros .frm que contienen la definicin de la tabla, como los ficheros .myd, que contienen los datos. Antes de ejecutarse, guarda todos los cambios que pudiera haber en memoria de la tabla, de forma que quede de una manera consistente. Asimismo, durante la ejecucin del comando, bloquea la tabla sobre la que se est haciendo la copia de seguridad para que los datos sean consistentes en la tabla. Hay que tener en cuenta que este comando va bloqueando una a una las tablas, segn va haciendo la copia de seguridad. Esto podra provocar inconsistencia de datos a nivel de base de datos, si es necesario hacer un backup de todas las tablas en un instante, en cuyo caso habra que utilizar el comando "lock tables" para bloquear todas las tablas antes de comenzar la copia de seguridad. Al finalizar el comando devuelve una tabla, que contiene los campos:

    Columna Valores

    Table Nombre de la tabla

    Op Siempre pone "backup"

    Msg_type Puede contener status, error, info o warning.

    Msg_text Mensaje descriptivo del resultado de la operacin

    Y en la que hay un registro por cada tabla que sobre la que se ha hecho backup.

    Para realizar una copia de una tabla llamada pedidos, a la carpeta Backups:

    BACKUP TABLE pedidos TO `/backups/`

    Recuperacin de datos

    Para complementar la sentencia "Backup table", Mysql dispone de la sentencia

    "Restore table", que permite restaurar una tabla a partir de una copia de seguridad que

    se ha realizado con el comando "Backup Table".

  • 13

    Esta opcin solo se puede utilizar si la tabla que se pretende restaurar no se encuentra

    en la base de datos, ya que en caso afirmativo mostrar un mensaje de error. Al igual

    que el comando de Backup, esta opcin slo esta disponible para las tablas de tipo

    MyIsam, y a partir de la versin 3.23.25.

    Como el comando de backup, no copia los ficheros de ndices, el comando para

    recuperar los datos, vuelve a reindexar todos los campos que contienen ndices,

    creando los ficheros correspondientes. Al igual que el comando para hacer copias de

    seguridad, invocar al comando "Restore table" devuelve una tabla, con un registro por

    cada tabla sobre la que se ha hecho la base de datos, y que contiene la siguiente

    informacin:

    Columna Valores

    Table Nombre de la tabla

    Op Siempre pone "restore"

    Msg_type Puede contener status, error, info o warning.

    Msg_text Mensaje descriptivo del resultado de la operacin

    Para restaurar una tabla llamada pedidos de la carpeta Backups a la base de datos:

    RESTORE TABLE pedidos FROM `/backups/`

    Backup de los datos

    Este comando nos permite hacer una copia de los ficheros de las tablas de las cuales

    queremos hacer un backup, actualmente solo funciona con tablas de tipo MyIsam, y

    copia tanto los ficheros .frm que contienen la definicin de la tabla, como los ficheros

    .myd, que contienen los datos.

    Antes de ejecutarse, guarda todos los cambios que pudiera haber en memoria de la

    tabla, de forma que quede de una manera consistente. Asimismo, durante la ejecucin

    del comando, bloquea la tabla sobre la que se est haciendo la copia de seguridad

    para que los datos sean consistentes en la tabla. Hay que tener en cuenta que este

    comando va bloqueando una a una las tablas, segn va haciendo la copia de

    seguridad. Esto podra provocar inconsistencia de datos a nivel de base de datos, si es

    necesario hacer un backup de todas las tablas en un instante, en cuyo caso habra

    que utilizar el comando "lock tables" para bloquear todas las tablas antes de comenzar

  • 14

    la copia de seguridad.

    Al finalizar el comando devuelve una tabla, que contiene los campos:

    Columna Valores

    Table Nombre de la tabla

    Op Siempre pone "backup"

    Msg_type Puede contener status, error, info o warning.

    Msg_text Mensaje descriptivo del resultado de la operacin

    Y en la que hay un registro por cada tabla que sobre la que se ha hecho backup.

    Para realizar una copia de una tabla llamada pedidos, a la carpeta Backups:

    BACKUP TABLE pedidos TO `/backups/`

    Recuperacin de datos

    Para complementar la sentencia "Backup table", Mysql dispone de la sentencia

    "Restore table", que permite restaurar una tabla a partir de una copia de seguridad que

    se ha realizado con el comando "Backup Table".

    Esta opcin solo se puede utilizar si la tabla que se pretende restaurar no se encuentra

    en la base de datos, ya que en caso afirmativo mostrar un mensaje de error. Al igual

    que el comando de Backup, esta opcin slo esta disponible para las tablas de tipo

    MyIsam, y a partir de la versin 3.23.25.

    Como el comando de backup, no copia los ficheros de ndices, el comando para

    recuperar los datos, vuelve a reindexar todos los campos que contienen ndices,

    creando los ficheros correspondientes. Al igual que el comando para hacer copias de

    seguridad, invocar al comando "Restore table" devuelve una tabla, con un registro por

    cada tabla sobre la que se ha hecho la base de datos, y que contiene la siguiente

    informacin:

    Columna Valores

    Table Nombre de la tabla

    Op Siempre pone "restore"

    Msg_type Puede contener status, error, info o warning.

    Msg_text Mensaje descriptivo del resultado de la operacin

  • 15

    Para restaurar una tabla llamada pedidos de la carpeta Backups a la base de datos:

    RESTORE TABLE pedidos FROM `/backups/`

    El comando mysqldump del sistema gestor de base de datos MySQL sirve para

    hacer copias de seguridad. Lo explicamos con detenimiento y vemos sus

    opciones ms importantes.

    Este comando permite hacer la copia de seguridad de una o mltiples bases de datos.

    Adems permite que estas copias de seguridad se puedan restaurar en distintos tipos

    de gestores de bases de datos, sin la necesidad de que se trate de un gestor de

    mysql. Esto lo consigue creando unos ficheros, que contienen todas las sentencias sql

    necesarias para poder restaurar la tabla, que incluyen desde la sentencia de creacin

    de la tabla, hasta una sentencia insert por cada uno de los registros que forman parte

    de la misma.

    El comando dispone de una amplia variedad de opciones que nos permitir realizar la

    copia de la forma ms conveniente para el propsito de la misma.

    Para poder restaurar la copia de seguridad, bastar con ejecutar todas las sentencias

    sql que se encuentran dentro del fichero, bien desde la lnea de comandos de mysql, o

    desde la pantalla de creacin de sentencias sql de cualquier entorno grfico como

    puede ser el Mysql Control Center.

    Las limitaciones de la restauracin dependern de las opciones que se han

    especificado a la hora de hacer la copia de seguridad, por ejemplo, si se incluye la

    opcin --add-drop-table al hacer la copia de seguridad, se podrn restauran tablas que

    existen actualmente en el servidor (borrndolas primero). Por lo que es necesario

    estudiar primero los procedimientos que se utilizarn tanto en la copia como en la

    restauracin, para que todo salga correcto!

    Algunas de las opcines que tiene son:

    --add-locks

    Aade LOCK TABLES antes, y UNLOCK TABLE despues de la copia de cada tabla.

    --add-drop-table

    Aade un drop table antes de cada sentencia create

  • 16

    -A, --all-databases

    Copia todas las bases de datos. Es lo mismo que utilizar --databases seleccionando

    todas.

    -a, --all

    Incluye todas las opciones de creacin especficas de Mysql.

    --allow-keywords

    Permite la creacin de nombes de columnas que son palabras clave, esto se realiza

    poniendo de prefijo a cada nombre de columna, el nombre de la tabla

    -c, --complete-insert

    Utiliza inserts incluyendo los nombres de columna en cada sentencia (incrementa

    bastante el tamao del fichero)

    -C, --compress

    Comprime la informacin entre el cliente y el servidor, si ambos soportan compresin.

    -B, --databases

    Para copiar varias bases de datos. En este caso, no se especifican tablas. El nombre

    de los argumentos se refiere a los nombres de las bases de datos. Se incluir USE

    db_name en la salida antes de cada base de datos.

    --delayed

    Inserta las filas con el comando INSERT DELAYED.

    -e, --extended-insert

    Utiliza la sintaxis de INSERT multilinea. (Proporciona sentencias de insert ms

    compactas y rpidas.)

    -#, --debug[=option_string]

    Utilizacin de la traza del programa (para depuracin).

    --help

    Muestra mensaje de ayuda y termina.

    --fields-terminated-by=...

    --fields-enclosed-by=...

    --fields-optionally-enclosed-by=...

    --fields-escaped-by=...

    --lines-terminated-by=...

  • 17

    Estas opciones se utilizan con la opcin -T y tienen el mismo significado que la

    correspondiente clusula LOAD DATA INFILE.

    -F, --flush-logs

    Escribe en disco todos los logs antes de comenzar con la copia

    -f, --force,

    Contina aunque se produzca un error de SQL durante la copia.

    -h, --host=..

    Copia los datos del servidor de Mysql especificado. El servidor por defecto es

    localhost.

    -l, --lock-tables.

    Bloquea todas las tablas antes de comenzar con la copia. Las tablas se bloquean con

    READ LOCAL para permitir inserts concurrentes en caso de las tablas MyISAM.

    Cuando se realiza la copia de mltiples bases de datos, --lock-tables bloquear la

    copia de cada base de datos por separado. De forma que esta opcin no garantiza

    que las tables sern consistentes lgicamente entre distintas bases de datos. Las

    tablas en diferentes bases de datos se copiarn en estados completamente distintos.

    -K, --disable-keys

    Se inluir en la salida /*!40000 ALTER TABLE tb_name DISABLE KEYS */; y /*!40000

    ALTER TABLE tb_name ENABLE KEYS */; Esto har que carga de datos en un

    servidor MySQL 4.0 se realice ms rpido debido a que los ndices se crearn

    despus de que todos los datos hayan sido restaurados.

    -n, --no-create-db

    No se incluir en la salida CREATE DATABASE /*!32312 IF NOT EXISTS*/ db_name;

    Esta lnea se incluye si la opcin --databases o --all-databases fue seleccionada.

    -t, --no-create-info

    No incluir la informacin de creacin de la tabla (sentencia CREATE TABLE).

    -d, --no-data

    No incluir ninguna informacin sobre los registros de la tabla. Esta opcin sirve para

    crear una copia de slo la estructura de la base de datos.

    --opt

    Lo mismo que --quick --add-drop-table --add-locks --extended-insert --lock-tables. Esta

  • 18

    opcin le debera permitir realizar la copia de seguridad de la base de datos de la

    forma ms rpida y efectiva.

    -pyour_pass, --password[=your_pass]

    Contrasea utilizada cuando se conecta con el servidor. Si no se especifica,

    `=your_pass', mysqldump preguntar la contrasea.

    -P, --port=...

    Puerto utilizado para las conexiones TCP/IP

    --protocol=(TCP | SOCKET | PIPE | MEMORY)

    Especifica el protocolo de conexin que se utilizar.

    -q, --quick

    No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza

    mysql_use_result() para realizarlo.

    -Q, --quote-names

    Entrecomilla las tablas y nombres de columna con los caracteres ``'.

    -r, --result-file=...

    Redirecciona la salida al fichero especificado. Esta opcin se debera utilizar en

    MSDOS, porque previene la conversin de nueva lnea `\n' en nueva lnea y retorno de

    carro`\n\r'.

    --single-transaction

    Utiliza el comando BEGIN antes de realizar la copia desde el servidor. Es muy til con

    las tables InnoDB y el nivel de transaccin READ_COMMITTED, porque en este modo

    realizar la copia de seguridad en un estado consistente sin necesidad de bloquear las

    aplicaciones. Consultar el manual para ms detalles.

    -S /path/to/socket, --socket=/path/to/socket

    El fichero de sockets que se especifica al conectar al localhost (que es el host

    predeterminado).

    --tables

    sobreescribe la opcin --databases (-B).

    -T, --tab=path-to-some-directory

    Crea un fichero table_name.sql, que contiene la sentencia de creacin de SQL, y un

    fichero table_name.txt, que contiene los datos de cada tabla. El formato del fichero

  • 19

    `.txt' se realiza de acuerdo con las opciones --fields-xxx y --lines--xxx options. Nota:

    Esta opcin slo funciona si el comando mysqldump se ejecuta en la misma msquina

    que el demonio mysqld, el usuario deber tener permisos para crear y escribir el

    fichero en la ubicacin especificada

    -u nombre_usuario, --user=nombre_usuario

    El nombre de usuario que se utilizar cuando se conecte con el servidor, el valor

    predeterminado es el del usuario actual.

    -v, --verbose

    Va mostrando informacin sobre las acciones que se van realizando (ms lento)

    -w, --where='clusula where'

    Sirve para realizar la copia de determinados registros

    -X, --xml

    Realiza la copia de seguridad en un documento xml

    -x, --first-slave

    Bloquea todas las tablas de todas las bases de datos

    Ejemplos de comandos mysqldump:

    Para realizar la copia se seguridad de la base de datos mibase al fichero

    copia_seguridad.sql

    mysqldump --opt mibase > copia_seguridad.sql

    Otro ejemplo ms complejo de comando mysqldump para hacer el backup de una

    base de datos es el siguiente:

    mysqldump --opt --password=miclave --user=miuser mibasededatos > archivo.sql

    En este ltimo caso estamos indicando un nombre de usuario y una clave para

    acceder a la base de datos sobre la que se est haciendo el backup: mibasededatos.

    Las sentencias SQL para reconstruir esa base de datos se volcarn en el fichero

    archivo.sql.

    Restaurar la base de datos

  • 20

    Si deseamos recuperar la informacin de un fichero para restaurar una copia de

    seguridad de la base de datos lo haremos con el comando mysql. Utilizaremos una

    sintaxis como esta:

    mysql mibase < archivo.sql

    En este ejemplo se restaurara la base de de datos mibase con el backup almacenado

    en el fichero archivo.sql.

    Otro ejemplo ms complejo de comando para restaurar una base de datos es el

    siguiente:

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

    Es el mismo ejemplo que el anterior, pero indicando un nombre de usuario y una clave

    con las que acceder a la base de datos mibase.