Universidad de San Carlos de Guatemala Facultad de Ingeniería Escuela de Ciencias y Sistemas Sistemas de Bases de datos 2 Backup y Restore en mySQL G10 20090816 Introducción Las operaciones de backup y restore son actividade crítica y de orden crucial para cualquier organización, pues por motivos varios una base de datos puede llegar a fallar, los sistemas operativos, el hardware, crackers y hasta los mismos empleados pueden dañar la información. Es por eso que es importante definir políticas de backup en una organización o por lomenos calendarizar la realización de copias de seguridad para estar preparado ante cualquier eventualidad. Dependiendo del gestor que se utilice y el tamaño de la base de datos, este puede ser una tarea fácil o relativamente compleja. Copias de seguridad en mySQL En mySQL existen varios métodos para la realización de un backup y esto se debe principalmente a que mySQL guarda las tablas como archivos y al tipo de tablas que se este manejando (InnoDB, MyISAM, ISAM). Así por ejemplo para la presente práctica se utilizó el tipo de tabla InnoDB y el método de backup utilizado es el que funciona con este tipo de tablas. InnoDB es una de las tecnologías de almacenamiento que utiliza mySQL, es de codigo abierto. Entre sus características principales estan que soporta transacciones con características ACID (Atomicidad, Consistencia, Aislamiento y Durabilidad), tiene bloque de registros e integridad referencial (cosa que no maneja ISAM ni myISAM). Esta última es una de sus características más importantes pues una base de datos sin integridad referencial, es nada mas un conjunto de datos que no denotan infomación. Este tipo de almacenamiento también ofrece una alta fiabilidad y consistencia. El mismo gestiona el control de los datos y no se lo deja al sistema operativo, una de sus desventajas es que no tiene una buena compresión de datos, por lo que ocupa un poco mas de espacio que myISAM. Mysqldump (forma para hacerlo desde linea de comandos) Este es un comando para hacer la copias de seguridad de una o varias bases de datos, este permite que los backups se puedan restaurar en distintos tipos de gestores de bases de datos. Esto es posible porque crea archivos que contienen todas las sentencias sql para crear y llenar con datos las tablas. Tiene una variedad de opciones que da la posibilidad de crear una copia acorde a nuestras necesidades. Para tablas con almacenamiento InnoDB se utiliza este programa utilitario, el cual viene defacto en mySQL y se usa como se muestra a continuación (cabe mencionar que el presente trabajo se realizón en el sistema operativo windows). 1. Primero abrimos una ventana de comandos de Windows (menuInicio => Ejecutar => cmd). 2. Ya abierta dicha ventana nos situamos en la carpeta de los binarios de mySQL, pues ahí se encuentra el ejecutable de mysqldump, la cual se encuentra en la carpeta bin del directorio de instalación (para mi caso, cd "c:\Archivos de programa\MySQL\MySQL Server 5.1\bin"). 3. A continuación ejecutamos el programa mysqldump con las opciones que mas nos convengan. Para mi caso en especial utilizaré el comando como se muestra a continuación. mysqldump --opt -a --single-transaction -h localhost -u root -pmiServer --databases bdd_practica1 > c:\Users\G10\backup_bdd_practica1.sql donde las opciones son como se detallan a continuación: --opt Esta opción es una opción compuesta de varias opciones, como --add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick –set-charset. Esta opción le debería permitir realizar la copia de seguridad de la base de datos de la forma más rápida y efectiva, porque obtiene una mayor eficiencia tanto a la hora e realizar el backup como de recuperar el backup realizado con dicha opción. En MySQL 5.0, --opt está activado por defecto, pero puede desactivarse con --skip-opt. Para desactivar sólo algunas de las opciones activadas por --opt, use la forma --skip; por ejemplo --skip-add-drop-table o --skip-quick. --add-drop-table Añade un drop table antes de cada sentencia create. --add-locks Añade LOCK TABLES antes, y UNLOCK TABLE despues de la copia de cada tabla. --create-options Incluye todas las opciones de tabla específicas de MySQL en el comando CREATE TABLE. --disable-keys, -K Para cada tabla, rodea el comando INSERT con /*!40000 ALTER TABLE tbl_name DISABLE KEYS */; y /*!40000 ALTER TABLE tbl_name ENABLE KEYS */;. Esto hace que la carga del fichero volcado en MySQL 4.0 o posteriores sea más rápida porque los índices se crean sólo tras la inserción de todos los registros. Esta opción es efectiva sólo para tablas MyISAM . --extended-insert, -e Usa la sintaxis de INSERT de múltiples registros, que incluyen una lista de varios VALUES. Esto genera un fichero de volcado de menor tamaño y acelera las inserciones cuando se recarga el fichero. --lock-tables, -l Bloquea todas las tablas antes de comenzar el volcado. Las tablas se bloquean con READ LOCAL para permitir inserciones concurrentes en caso de tablas MyISAM . Para tablas transaccionales como InnoDB y BDB, --single-transaction es una opción mucho mejor, ya que no necesita bloquear las tablas. Tenga en cuenta que al volcar múltiples bases de datos, --lock-tables bloquea tablas para cada base de datos separadamente. Así, esta opción no garantiza que las tablas en el fichero volcado sean lógicamente consistentes entre bases de datos. Tablas en bases de datos distintas pueden volcarse en estados completamente distintos. -q, --quick No almacena en el buffer la sentencia, la copia directamente a la salida. Utiliza mysql_use_result() para realizarlo. --set-charset Añade SET NAMES conjunto_de_caracteres_por_defecto a la salida (output). Esta opción está activada por defecto. Para suprimir el comando SET NAMES, use --skip-set-charset. -a, --all Incluye todas las opciones de creación específicas de Mysql. --single-transaction Esta opción realiza un comando SQL BEGIN antes de volcar los datos del servidor. Es útil sólo con tablas transaccionales tales como las InnoDB y BDB, ya que vuelca el estado consistente de la base de datos cuando se ejecuta BEGIN sin bloquear ninguna aplicación. Cuando use esta opción, debe tener en cuenta que sólo las tablas InnoDB se vuelcan en un estado consistente. -h, --host= Copia los datos del servidor de Mysql especificado. El servidor por defecto es localhost. -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. --password[=contraseña], -p[contraseña] La contraseña a usar al conectar con el servidor. Si usa la opción en forma corta (-p), no puede haber un espacio entre la opción y la contraseña. Si omite el valor de contraseña a continuación de la opción --password o -p en la línea de comandos, aparece un prompt pidiéndola. -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. Algo que recomiendo para que no de error la ejecución de esta instrucción es que el fichero .sql de salida (backup_bdd_practica1.sql) sea creado en un directorio en donde tengamos los correspondientes permisos con el usuario que estamos logueados en el sistema operativo (para mi caso como uso el usuario G10, c:\Users\G10\). La ejecución no tiene una salida definida, sin embargo se puede configurar para que nos muestre el proceso de ejecución, esto se logra con otro parametro en la instrucción. La salida de la ejecución sería algo como lo que se ve en la imagen. MySQL Administrador (forma para hacerlo desde cliente/entorno grafico) Para hacer un backup desde un entorno o cliente gráfico, deberemos seguir los pasos siguientes. • Cuando instalamos mySQL, se instalo un complemento de administración de base de datos, este es MySQL Administrador. Accedemos a el (menuInicio => todosLosProgramas => MySQL => MySQL Administrador). Cuando abra deberemos ingresar nuestro usuario y password, para acceder. • A continuación se abre una ventana la parte izquierda de la misma damos click sobre la opción backup y a continuación sobre el botón new proyect. • Hecho lo anterior, le colocamos un nombre al proyecto y seleccionamos la base de datos de la que queremos hacer la copia de seguridad y pulsamos el boton que tiene el signo mayor que (>), a continuación en el panel derecho elegimos las tablas de las que queremos sacar copia. Imagen1 • Como vimos en la parte de backup desde linea de comandos habian varias opciones, la mayoria de estas mismas estan presentes en la pestaña Advanced Options, como se ve a continuación. Imagen2 • La administración de backup, también nos da la posibilidad de crear un horario para que las copias de seguridad se ejecuten de manera periodica y sin la intervención humana. Estas opciones las encontramos en la pestaña Schedule. Imagen3 • Cuando ya hemos seleccionado todas las opciones y caracteristicas que deseemos procedemos a dar click en el botón Execute backup now que aparece en la Imagen1. Al hacerlo nos aparecerá un cuadro de dialogo donde buscaremos una ubicación para nuestro archivo de backup (.sql) y pulsamos el boton Guardar. Hecho esto se ejecutará el backup y nos mostrará una ventana notificandonos que se realizó de manera correcta. Cabe hacer mención de que usé el escritorio para guardar el archivo y que el administrador automaticamente le agrega la fecha y hora en que se hizo el backup al nombre del proyecto, en mi caso quedará backup_bdd_practica1 20090816 2223.sql Restore de base de datos Desde línea de comandos Para hacerlo desde la linea de comandos es tan simple como ejecutar el comando siguiente. mysql --user=root --password=miServer bdd_practica1 < c:\Users\G10\backup_bdd_practica1.sql Este utilitario (mysql) tiene mas opciones de configuración, sin embargo las que aparecen en el ejemplo anterior son las mas basicas. Resultado de la ejecución del comando Desde el entorno gráfico Estando en el entorno de trabajo de MySQL Administrador en el panel izquierdo elegimos la opción Restore. En la ventana que aparece a continuación pulsamos el boton Open backup file, nos aparecerá un cuadro de dialogo donde debemos abrir el archivo de backup que contiene la copia de la base de datos que queremos restaurar. Luego de seleccionado el archivo (backup_bdd_practica1 20090816 2223.sql), pulsamos el boton Start restore. Si todo se ejecuto de manera correcta veremos una ventana como la que aparece a continuación y pulsamos Close. En la pestaña Restore Content, podemos ver el contenido de que fue recuperado. Bibliografia • • • • • http://es.wikipedia.org/wiki/InnoDB http://dev.mysql.com/doc/refman/5.0/es/mysqldump.html http://dev.mysql.com/doc/refman/5.0/es/mysql.html