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
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
Copias de seguridad de bases de
datos
Tipos de copias de seguridad
Frio/Caliente
Física/lógica
Completa/incremental
Local/remota
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:
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:
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
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:
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 --flush-logs --all-databases --delete-master---flush-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:
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:
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 \.:
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,...)]
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...]
Gestión de datos con MySQL
Workbench
La mayoría de operaciones de seguridad de datos pueden realizarse mediante la herramienta Workbench