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