Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Muchas aplicaciones Web hacen uso de bases de datos donde almacenan toda la informacin que se mueve en ese portal. Comercios electrnicos, blogs, plataformas elearning o pginas Web corporativas de empresas no podran funcionar sin este tipo de sistemas de almacenamiento de la informacin. Ante esta situacin reali ar copias de seguridad de esas bases de datos se presenta como una tarea imprescindible si queremos tener la seguridad de que en caso de sufrir cualquier imprevisto de p!rdida de informacin, poder acudir al bac"up correspondiente # recuperar esos datos. $on muchos los que piensan que este tipo de acciones pueden resultar mu# complicadas # que %nicamente e&pertos informticos pueden llevar a cabo estas acciones. 'or suerte esto no es as, sobre todo gracias a herramientas que nos facilitan este proceso. (s presentamos la forma de hacer una copia de seguridad de una base de datos M#$)* de dos formas distintas+ ,. -tili ando la aplicacin Wor"bench .. Mediante lnea de comandos. Antes mencionaremos los diferentes tipos de copias que e&isten+ Clasificacin atendiendo al momento en que se realiza+ Copia de seguridad en fro.- 'ara solventar los problemas derivados de la e/ecucin concurrente del $012 # del mecanismo de copia seguridad se para la ejecucin del SGBD. Copia de seguridad en caliente.- 3o afectan al servicio #a que este no se para, pero pueden comprometer la integridad de la copia.
Pgina1/17
Clasificacin atendiendo al tipo de informacin que se archiva+ Fsica.- $e salvaguardan 4haciendo copia5 los ficheros fsicos que contienen los datos de la base de datos 46/+ 6n 7nnodb m#sql, ficheros de datos ibdata, ficheros de estructuras .frm # fichero de log ib8logfile&5 gica.- $e e&traen los datos de las tablas e&portndolos a fic!eros de te"to 4o alg%n otro formato5. Copias ms lentas, pero son e&portables a diferentes $012. 9!cnica com%nmente denominada e"portacin de datos# el proceso inverso es la importacin de datos. Clasificacin atendiendo a como se constru$e la copia de seguridad+ Completa.- $e almacena toda la informacin de una o varias bases de datos. %ncremental.- $lo se almacena la informacin que cambi desde la %ltima copia de seguridad. Minimi an el tiempo que dura la copia, pero el procedimiento para su restauracin es ms comple/o. Combinando las diferentes clasificaciones, tenemos las siguientes tipos de copias de seguridad+ Bac&up completa# fsica $ en fro.- Copiar los ficheros que forman la base de datos parando previamente el $012. Comando cop# o cp Bac&up completa# fsica $ en caliente.- Copiar los ficheros sin de/ar a los usuarios sin cone&in. 6s necesario a recurrir a !erramientas que nos proporcione el $012. Bac&up completa# lgica $ en caliente.- Consultas a la base de datos # guardar los resultados en ficheros. :arios mecanismos dependiendo del $012. 6n fro no tiene sentido. Bac&up incremental $ fsica 'en caliente o fro(.- $olo se almacenan los cambios a partir de la %ltima copia. 6n M#sql consiste en copiar los archivos que almacenan las transasacciones 4log binario5. M#sql dispone de herramientas # comandos para llevar a cabo esta tarea+ M#$)* W(;<163C= 4Copia gica5 M#sqldump 4copia lgica5 M#sqlhotcop# 4copias en caliente motor M#7sam5
Pgina2/17
M#7sam
1sicamente consiste en copiar los ficheros de datos # estructuras a otro lugar, ficheros .frm, .M>24datos m#isam5 # M>74indices m#isam5, ibdata4datos 7nnodb5 # logfile4log innodb5, con el SGBD parado. 73C(3:6376396$+ *os usuarios no podrn operar durante el transcurso del bac"up. =abr que tener en cuenta, si se ha restaurado por completo el sistema, que la base de datos information8schema no tenga registrada ni la base de datos ni las tablas de la base de datos restaurada, # que en la base de datos m#sql no se tengan los permisos adecuados, por ellos es fundamental restaurar tambi!n estas dos bases de datos.
6n el motor de
almacenamiento )$%sam se puede usar el comando m$sql!otcop$. 6s un script 'erl que usa los comandos *(C< 9A1*6$, ?*-$= 9A1*6$ # cp o scp. 0enera una serie de archivos.
Pgina3/17
)$sql!otcop$, requiere unos cuantos privilegios del usuario que e/ecuta el comando. Concretamente, se requieren+ 'ermisos de $6*6C9 sobre las tablas de la base de datos 'ermisos de *(C< 9A1*6$ 'ermisos de ;6*(A2
$e puede crear un usuario de bac"up con estos permisos, con tal de que el usurario se use %nicamente para tareas de copias de seguridad, sin necesidad de otorgarle permisos adicionales.
mysql> create user backup@'localhost identified by mipassword; mysql> grant select on basededatos.* to backup@'localhost with grant option; mysql> grant lock tables on basededatos.* to backup@localhost; mysql> grant reload on *.* to backup@localhost;
Con este usuario, #a se podr e/ecutar el comando m$sql!otcop$ sobre la base de datos @basededatos@, tal # como sigue+
mysqlhotcopy basededatos !!user?backup !!password?mipassword @destino
*as primeras e/ecuciones han reducido el tiempo del bac"up de .A minutos 4reali ado con m#sqldump5 a poco ms de , min BA segundos, aunque tambi!n es verdad que los bac"ups reali ados con m#sqlhotcop#, ocupan el do*le que los resultantes de usar m#sqldump, una ve comprimidos ambos. 6n el motor de almacenamiento %nnod* se usa la herramienta )$sql +nterprise Bac&up
Pgina4/17
Caliente ?ro
BACKUPS LGICOS
M#sql dispone del comando m$sqldump para generar respaldos de bases de datos 6l comando m$sqldump genera un fic!ero de instrucciones S, que son capaces de, posteriormente, volver a generar la misma base de datos que tenamos. 3ormalmente, este fichero contiene un C;6A96 9A1*6 por cada tabla de la base de datos, instrucciones para crear ndices, # numerosos 73$6;9 para llenar las tablas con datos 4uno por registro5. $in embargo, este comando, puede resultar mu# lento, para bases de datos grandes.
Pgina /17
Pgina!/17
G. 4(pcional5 $i deseas tambien reali ar bac"ups de tus procedures, functions, etc. 6n la parte inferior marca el chec" que dice F2ump $tored 'roceduresF. H. 'or ultimo dale a I$tart e&portJ.
*o anterior muestra las posibles opciones especficas de la versin de M#$)* que utilices as que pueden variar con respecto a la siguiente lista+ m$sqldump -.C%-/+S )0S C-)1/+S
Opcin
--add-drop-database --add-drop-table --all-databases --comments
Corto
Descripcin
Aade la sentencia 'DROP DATABASE' antes de cada sentencia ' REATE DATABASE' Aade la sentencia 'DROP TAB!E' antes de cada sentencia ' REATE TAB!E' Respalda todas las tablas de todas las bases de datos" Aade comentarios en el archi#o de respaldo" Esta opci$n est% por de&ecto acti#ada' para desacti#ar los comentarios utili(a --s)ip-comments" Produce una salida m%s compatible con otros sistemas de bases de datos o #ersiones anteriores de +yS,!"nombre puede tomar estos #alores- ansi' mysql./.' mysql01' post2resql' mssql' oracle' db/' ma3db" 4sa sentencias 56SERT completas que incluyen nombres de columnas" 5ncluye todas las opciones espec7&icas
-A -i
--compatible*nombre
--complete-insert --create-options
-c
Pgina7/17
de +yS,! para la creaci$n de tablas que se usan con la sentencia ' REATE TAB!E'" Permite respaldar una o m%s bases de datos" Despu8s de la opci$n se indica9n: el9los: nombre9s: de la9s: base de datos a respaldar" Se respalda cada base de datos completa" En la salida se incluye con esta opci$n las sentencias ' REATE DATABASE' y '4SE' antes de cada nue#a base de datos" 4sa la sentencia '56SERT' con el &ormato de m;ltiples re2istros con #arias listas de '<A!4ES'" Esto produce una salida m%s reducida y acelera el proceso de 56SERTS cuando el archi#o es restaurado" 5deal para bases de datos con tablas que contienen miles de re2istros" Si se tienen #ie=s o #istas en la base de datos a respaldar y la #ista hace re&erencia a una tabla que ya no e3iste' el #aciado del respaldo terminar% con un error sin completarse" on esta opci$n se podr% continuar" Se reali(a el respaldo de el ser#idor +yS,! indicado por nombre' puede ser una direcci$n 5P o un nombre de ser#idor #%lido" Si no se especi&ica el de&ault eslocalhost" Si no se desea respaldar una tabla en espec7&ico se utili(a esta opci$n' es obli2ario indicar la base de datos un punto y despu8s nombre de la tabla" Si son #arias tablas las que se han de i2norar se usa esta opci$n m;ltiples #eces" Tambi8n puede usarse para i2norar #istas" Si el respaldo #iene de un ser#idor +yS,! que actua como maestro en una esquema de replicaci$n' el uso de esta opci$n es muy importante ya que incluira sentencias del tipo > ?A6@E +ASTER TO> que indican la posici$n en los archi#os de bit%cora binarios necesarios para que los ser#idores escla#os se sincronicen adecuadamente" Esta opci$n suprime las sentencias > REATE DATABASE> que por de&ecto se incluyen en el respaldo" 6o escribe o respalda re2istro al2uno solo el esquema de la base de datos" Esta opci$n esta por defecto activada' produce un #aciado r%pido y totalmente compatible con otros ser#idores +yS,!" Es un alias que acti#a las opciones-add-drop-table' --create-options' -e3tended-insert' entre otras"
--databases
-B
--e3tended-insert
-e
--&orce
-&
--host*nombre
-h nom
--i2nore-table*bd.tabla
--master-data
--no-create-db --no-data
-n -d
--opt
Pgina"/17
--pass=ordA?passB
--port*num
--quic)
--quote-names
--routines
--sin2le-transaction
--s)ip-opt
--tri22ers
!a contrasea para conectarse al ser#idor indicado en la opci$n --host" Si usas la opci$n corta p no debe -pApassB haber un espacio" Es posible no indicar la contrasea y despu8s de presionar la tecla intro se pre2untar% por esta" Si ser#idor indicado en la opci$n -host utili(a un puerto di&erente al -P num de&ault del ser#icio mysql 9..1C: debe de indicarse con esta opci$n" <a de la mano con la opci$n --sin2letransactionya que aplica principalmente para tablas 2randes y -q del tipo transaccional" Permite a2ili(ar la escritura al archi#o de respaldo al leer re2istro por re2istro sin mandarlo a un bu&&er pre#io" Opci$n por de&ecto acti#ada" Pone entre comilla 2ra#e >D> a los nombres de los obEetos como base de datos' tablas' columnas" Es recomendable -, deEarla siempre para e#itar problemas de compatibilidad' pero si se desea desacti#ar utili(a la opci$n --s)ipquote-names 5ncluye en el respaldo rutinas almacenadas 9procedimientos y &unciones:" on esta &unci$n se incluyen las sentencias > REATE PRO ED4RE> F > REATE G46 T5O6> que permiten re-crear completamente procedimientos almacenados y -R &unciones" Esta opci$n 6O esta por de&ecto enmysqldump asi que es moti#o de sorpresa para DBA's nue#os enterarse que el respaldo en el que tanto con&iaban no est% completo al momento de necesitarlo' sino utili(aron esta opci$n" Opci$n ;til solo con tablas transaccionales como las del tipo 5nnoDB' ya que 2aranti(a la inte2ridad y la consistencia sin bloquear las tablas" Esto lo lo2ra al emitir una sentencia >START TRA6SA T5O6> antes de #aciar los datos al respaldo" Desacti#a la opci$n por de&ecto --opt' con lo que se tienen que indicar indi#idualmente las opciones a las que --opt hace re&erencia" 5ncluye tri22ers creados en el respaldo" Esta opci$n es autom%tica' esta por de&ecto' sino se quiere utili(ar el respaldo de tri22ers utili(a --s)ip-tri22ers -u nom El nombre de usuario de +yS,! para conectarse al ser#idor indicado en la opci$n --host"
--user*nombre
Pgina#/17
--#erbose
-#
--3ml
-H
+odo #erboso" 5mprime in&ormaci$n de lo que est% haciendo el respaldo' usa doble -# -# para modo aun m%s #erboso" En #e( de un respaldo por de&ecto &ormateado con sentencias S,!' esta opci$n o&rece una salida en un &ormato H+! bien &ormado"
Uso bsico
9res formas bsicas de invocar mysqldump son posibles+
I: mysqldump AopcionesB nombreJbd AnombreJtablaI nombreJtabla/ """B K respaldo"sql /: mysqldump AopcionesB --databases nombreJbdI nombreJbd/ K respaldo"sql .: mysqldump AopcionesB --all-databases K respaldo"sql
,5 respalda una sola base de datos, indicando su nombre, # opcionalmente una o ms tablas de la misma base de datos. $i no se indican tablas, se respaldan todas. .5 respalda una o ms bases de datos de forma completa, no se pueden indicar tablas individuales de esta manera. B5 respalda de forma completa todas las bases de datos del servidor M#$)* de forma completa, no se pueden indicar tablas individuales de esta manera. 6n todos los casos se indica que la salida del comando, es decir, el vaciado del respaldo se guarde en el archivo llamado Frespaldo.sqlF, este archivo es el resultado final, lo que puede utili arse despu!s para restaurar una base de datos 4v!ase e/emplos ms adelante5.
$i se produce un error de tipo "command not found", es posible que no ha#as instalado M#$)* correctamente o que tengas que indicar la ruta completa hasta donde se encuentre el comando, como por e/emplo+
Pgina1$/17
$ /usr/local/mysql/bin/mysqldump
$i por e/emplo el usuario es root, la contraseLa tambi!n es root # la base de datos se llama acme, el comando que debes e/ecutar es el siguiente+
$ mysqldump --user=root --password=root acme > copia_seguridad.sql
$i por motivos de seguridad no quieres escribir la contraseLa como parte del comando, puedes reempla ar la opcin --pass=ord*HH por -p. Al hacerlo, M#$)* te pedir que escribas la contraseLa a mano cada ve que realices una copia de seguridad+
$ mysqldump --user=root -p acme > copia_seguridad.sql Enter password: *********
(bserva cmo en este caso se e/ecuta el comando mysql # no el comando mysqldump. -tili ando los mismos datos que en el e/emplo anterior, el comando a e/ecutar sera+
$ mysql --user=root --password=root acme< copia_seguridad.sql
Pgina11/17
$i lo que quieres es reali ar una copia de seguridad de todas las bases de datos, utili a en su lugar la opcin --all-databases+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --all-databases > copia_seguridad.sql
se producir un error5+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --ignore-table=NOMBRE_BASE_DE_DATOS.NOMBRE_TABLA NOMBRE_BASE_DE_DATOS > copia_seguridad.sql
$i ests haciendo por e/emplo una copia de seguridad de una base de datos llamada tienda pero no quieres que se inclu#a una tabla llamada #entas, e/ecuta el siguiente comando+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --ignore-table=tienda.ventas tienda > copia_seguridad.sql
Pgina12/17
'ara e&cluir varias tablas, indica sus nombres con otras tantas opciones --i2noretable+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --where="edad > 18 AND edad < 65" NOMBRE_BASE_DE_DATOS > copia_seguridad.sql
$i lo que te interesa es simplemente limitar el n%mero de registros volcados para cada tabla, puedes utili ar la opcin --=here /unto con el siguiente truco e&trado del sitio $tac"(verfloM+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --where="1 limit 1000" NOMBRE_BASE_DE_DATOS > copia_seguridad.sql
*a opcin --=here*>I limit I111> hace que slo se e&traigan los primeros I"111 registros de cada tabla. 'ara a/ustar este valor a tus necesidades, reempla a el valor
I111 pero no cambies la primera parte 4I limit5.
Pgina13/17
6ste es el comportamiento recomendado en la ma#ora de las situaciones, pero puede provocar errores con sistemas antiguos incapaces de procesar lneas de miles de b#tes de longitud. 7gualmente, puedes tener problemas con tu editor de te&tos al intentar abrir un archivo de copia de seguridad que contiene estas lneas tan largas. $i este es tu caso, aLade la opcin --e3tended-insert*&alse para hacer que cada 56SERT se e/ecute con su propia instruccin+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --extended-insert=false NOMBRE_BASE_DE_DATOS > copia_seguridad.sql
$i abres ahora el archivo de la copia de seguridad, vers cmo #a no e&isten instrucciones 56SERT m%ltiples+
INSERT INTO `NOMBRE_DE_TABLA` VALUES (1, '...', '...', '...'); INSERT INTO `NOMBRE_DE_TABLA` VALUES (2, '...', '...', '...'); INSERT INTO `NOMBRE_DE_TABLA` VALUES (3, '...', '...', '...'); INSERT INTO `NOMBRE_DE_TABLA` VALUES (4, '...', '...', '...'); INSERT INTO `NOMBRE_DE_TABLA` VALUES (5, '...', '...', '...'); INSERT INTO `NOMBRE_DE_TABLA` VALUES (6, '...', '...', '...');
6l principal problema de esta opcin es que la recuperacin de datos es varios rdenes de magnitud m2s lenta que cuando se combinan varios registros en una %nica instruccin 56SERT.
Pgina14/17
$in embargo, si ests haciendo una copia de seguridad del servidor de produccin # tiene mucha actividad, este comportamiento puede ser inaceptable. 'ara evitarlo, aLade la opcin --loc)-tables*&alse+
$ mysqldump --user=TU_USUARIO --password=TU_CONTRASEA --lock-tables=false NOMBRE_BASE_DE_DATOS > copia_seguridad.sql
6l principal problema de esta opcin es que puede aumentar mucho el tamaLo del archivo de la copia de seguridad.
<?xml version="1.0"?> <mysqldump xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <database name="NOMBRE_BASE_DE_DATOS"> <table_structure name="XXX"> <field Field="ID" Type="int(11)" Null="NO" Key="PRI" Extra="auto_increment" /> <!-- ... --> </table_structure> <table_data name="XXX"> <row> <field name="ID">1</field>
Pgina1 /17
Como utilizar mysqldump para crear una copia de seguridad de su base de datos con Windows
,. Abra un smbolo del sistema de WindoMs. .. B. D. =aga clic en 7nicio -O 6/ecutar 6scriba FcmdF en el cuadro de dilogo # haga clic en el botn F(<F. cd C+ P'rogram ?ilesPM#$)*PM#$)* $erver E.EPbin 6/ecute el programa m#sqldump utili ando los siguientes argumentos+ M#sqldump -u 3nom*re de usuario4 -p 3contrase5a4 -h 3!ost4 3nom*re de la *ase4 O C+ P 3nom*re de arc!ivo4 . sql $i ha facilitado todos los argumentos correctamente, el programa se conectar al servidor de m#sql actual # crear un volcado de toda la base de datos en el directorio que ha especificado en el directorio C+ P. 3o ha# ning%n mensa/e que indique la descarga se ha completado, el cursor de te&to simplemente pasar a la siguiente lnea. =e aqu un e/emplo de la sinta&is de la lnea de comandos+
Cambie el directorio a la siguiente para acceder a la utilidad m#sqldump. Crear un volcado de la base de datos m#sql actual o una mesa +
Pgina1!/17
Las copias de seguridad incrementales permiten almacenar solamente los cambios ec os desde un cierto momento. %or ejemplo# se podra acer una copia completa el da ) de cada mes y luego al *nal de cada da# una incremental. Si ubiera un fallo# por ejemplo# el da )+# se necesitar!n aplicar las copias en orden empezando por la completa seguida de los ), incrementos. Esto signi*ca que la restauracin de copias incrementales es m!s pesada de acer que las completas. %ara poder acer copias incrementales# MySQL debe aber sido arrancado con la opcin correcta. mysqld --log-bin mysql -u root -p mysql. update... /Esto obliga a volcar los nuevos logs que /se ayan podido generar mysqladmin -u root -p flus -logs 0sando los comandos mysqlbinlog podemos volcar cualquier arc ivo de log en un *c ero mysql.
Pgina17/17