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.
Top Related