Download Apuntes tema 9 en pdf
Document related concepts
no text concepts found
Transcript
Capítulo 9 Gestión de la seguridad de los datos ÍNDICE CAPÍTULO 9 Tipos de fallos Copias de seguridad de bases de datos • • • • Tipos de copias Copias en MySQL Exportación/importación de datos Uso de MySQL Workbench para gestión de datos Tipos de fallos Fallo del sistema operativo Fallo en la alimentación Fallo en el sistema de ficheros Fallo de algún elemento de hardware Fallo humano que conlleva pérdida o corrupción de información Copias de seguridad de bases de datos Tipos de copias de seguridad Frio/Caliente Física/lógica Completa/incremental Local/remota Manual/automática Copias de seguridad en MySQL Copias físicas: copia en frio I Ejemplo Para hacer una copia de todos los datos en un sistema Linux en frio. Detenemos el servidor: #>mysqladmin shutdown Comprimimos y empaquetamos los datos en un nuevo fichero llamado copia.tar.gz. #>tar –czvf copia.tar.gz /var/lib/mysql/ Copiamos el fichero a un nuevo directorio: #>cp copia.tar.gz /backup/ Copias de seguridad en MySQL Copias físicas: copia en frio II Para la restauración haríamos el proceso inverso deteniendo previamente el servidor: #>cd /var/lib/ #>tar –zvxf copia.tar.gz Este fichero también nos sirve para migrar los datos a otro servidor mysql. Copias de seguridad en MySQL Copias físicas: copia en caliente Ejemplo mysqlhotcopy Para hacer una copia en caliente de las tablas MyISAM de la base de datos mysql en Linux en el directorio backup. #>mysqlhotcopy –user root –password root mysql /backup/ Para hacer una copia y, seguidamente empaquetarla: #>mysqlhotcopy –user root –password root mysql /backup/ ; tar –cvzf copia.tar.gz /backup/mysql/ Si además queremos incluir la fecha: #>mysqlhotcopy –user root –password root mysql /backup/ ; tar –cvzf copia`date +%d%m%y`.tar.gz /backup/mysql/ Para restaurar los datos debemos detener primero el servidor y copiarlos al directorio correspondiente como en el ejemplo anterior. Copias de seguridad en MySQL Copias lógicas: mysqldump Sintaxis básica: #>mysqldump [options] db_name [tbl_name ...] #>mysqldump [options] --databases db_name ... #>mysqldump [options] --all-databases . Ejemplo Para hacer una copia completa de todas las bases de datos: #>mysqldump –uroot –proot –all-databases Este comando vuelva la copia por pantalla. Si preferimos enviar la salida a un archivo: #>mysqldump –uroot –proot –A > copia.sql Copias de seguridad en MySQL Copias incrementales I • Variable log-bin activa el registro binario • Registra sólo operaciones de modificación sobre la base de datos • Sirve como copia incremental de datos • El programa mysqlbinlog permite leer ficheros binarios • Los registros se deben reiniciar (purgar) cada cierto tiempo • Tambien se usa en replicación Copias de seguridad en MySQL Copias incrementales II Ejemplo Para hacer copias periódicas todas las semanas, los domingos a las 10:00h de la mañana. Si además, queremos usar registros binarios (log-bin=regbin) para copias incrementales y queremos que se eliminen en cada copia de seguridad. En el fichero my.cnf, en la sección [mysqld] agregamos la línea: log-bin=regbin Añadimos a crontab (crontab -e) la línea: 00 10 * * 7 /usr/bin/csegbases.sh Copias de seguridad en MySQL Copias incrementales III El fichero csegbases.sh es un shell script que contiene lo siguiente: #!/bin/bash mysqldump –uroot –proot --single-transaction --flushlogs --all-databases --delete-master-logs > copia`date +%d%m%y`.sql Supongamos que tenemos un fallo catastrófico el miércoles a las 8 AM que requiere restauración de las copias de seguridad. Para recuperarnos, primero restauramos la última copia de seguridad completa que tenemos (la del domingo a las 10:00 AM). El archivo de copia completo es tan solo una serie de sentencias SQL, así que restaurarlo es muy fácil: #> mysql –uroot –proot < copiafecha.sql Copias de seguridad en MySQL Copias incrementales IV En este punto, el estado de los datos ha sido restaurado hasta el domingo a las 10:00 AM. Para restaurar los datos generados desde entonces, debemos usar las copias incrementales, es decir los archivos de registro binario que tengamos en nuestro directorio de datos. Si no hemos generado otros por cualquier motivo tendremos un solo fichero llamado regbin.000001 que recargaríamos con el siguiente comando: #>mysqlbinlog regbin.000001 | mysql –uroot -proot Exportación/importación de datos LOAD DATA I • Permite cargar datos de un fichero de texto a tablas Sintaxis: LOAD DATA [LOW PRIORITY | CONCURRENT][LOCAL] INFILE 'fichero' [REPLACE | IGNORE] INTO TABLE tbl_name [PARTITION (partition_name,...)] [{FIELDS | COLUMNS} [TERMINATED BY 'string'] [[OPTIONALLY] ENCLOSED BY 'char'] [ESCAPED BY 'char']] [LINES [STARTING BY 'string'] [TERMINATED BY 'string'] [IGNORE number LINES] Exportación/importación de datos LOAD DATA II Ejemplo Disponemos de un fichero con datos de partidos llamado partidos.txt y situado en la unidad C del servidor. En él cada fila o registro está separado por un salto de línea y cada campo por un punto y coma. Indica el comando necesario para cargar los datos en la tabla de partidos omitiendo los errores en la repetición de claves, así como las dos primeras líneas. LOAD DATA INFILE ‘C:\\partidos.txt’ IGNORE INTO TABLE partido FIELDS TERMINATED BY ‘;’ LINES TERMINATED BY ‘\n’; Exportación/importación de datos SOURCE • Podemos ejecutar ficheros de comandos para ejecutar un conjunto de instrucciones INSERT del siguiente modo C:\> mysql –uusuario –ppassword < ruta_fichero_de_comandos También disponemos del comando SOURCE ejecutable desde el cliente mysql: mysql> source ruta_fichero_de_comandos O equivalentemente con \.: mysql> \. ruta_fichero_de_comandos Exportación/importación de datos LOAD XML I • Para exportar datos en formato XML usamos la opcion xml de mysqldump C:\>mysql –xml –e “SELECT * FROM tabla” > fichero.xml • Para importar datos con formato XML en una tabla, proceso contrario al anterior, usamos LOAD XML Sintaxis: LOAD XML [LOCAL] INFILE 'file_name' [REPLACE | IGNORE] INTO TABLE [db_name.]tbl_name [ROWS IDENTIFIED BY '<tagname>'] [IGNORE number [LINES | ROWS]] [(column_or_user_var,...)] [SET col_name = expr,...] Exportación/importación de datos Exportar datos • Mediante la cláusula SELECT SELECT…[INTO OUTFILE 'file_name' export_options | INTO DUMPFILE 'file_name' • Mediante mysqldump mysqldump [opciones] nombre_de_base_de_datos [tablas] mysqldump [opciones] --databases DB1 [DB2 DB3...] mysqldump [opciones] --all-databases Gestión de datos con MySQL Workbench La mayoría de operaciones de seguridad de datos pueden realizarse mediante la herramienta Workbench FIN CAPITULO 9