miércoles, 22 de mayo de 2013

Respaldos


1.     ¿Por qué es importante para el administrador saber hacer respaldos?
Una gran mayoría de nuestros casos es tratar de corregir corrupción en bases de datos (Exchange, SQL Server, etc); causadas por problemas de HW, borrado de archivos por equivocación, antivirus, etc.

Cuando preguntamos a los clientes por el respaldo nos encontramos que :
-         el respaldo es muy viejo
-         el respaldo falla porque nunca se probó
-         no se tiene respaldo
-         los respaldos estan incompletos
-         el respaldo estaba en el mismo disco que falló
-         etc

Nos damos cuenta que muy pocos clientes realmente cuentan con una estrategia de respaldos efectiva. Cuando creo que el área de tecnología (nosotros) deberíamos pensar más en los usuarios y por la empresa en la que trabajamos, que a final de cuentas son nuestros clientes.

Un ejemplo:
1. Problemas de integridad de información.
La base de datos se corrompió debido a una falla de HW, no se tuvo respaldo, se logro salvar el 75% de la información.
Donde queda el 25% restante?
El usuario final (área operativa) tiene que volverlo a actualizar en la base de datos, hacer que los datos verifiquen con la información que se tenga y al final no se sabe o es difícil saber si toda la información que se actualizó despues de la falla es la correcta.
Además de todas las horas “perdidas” tratando de recuperar la información correspondiente.

2.    ¿Es responsabilidad del administrador hacer un respaldo periódico de los sistemas de archivos de la máquina que administra?
Si, la tarea del DBA es crear la base de datos en sí y poner en vigor los controles técnicos necesarios para apoyar las políticas dictadas por el administrador de datos. El DBA se encarga también de garantizar el funcionamiento adecuado del sistema y de proporcionar otros servicios de índole técnica relacionados. El DBA cuenta por lo regular con un grupo de programadores  de sistemas y otros asistentes técnicos.
3.    ¿Cómo se hace un respaldo?  y ¿Como se restaura un respaldo?

Copia de respaldo

Para hacer una copia de respaldo de una base de datos se recomienda crear un dump.
  • Para hacer un dump de todas las bases de datos es necesario ejecutar el comando:
mysqldump --user=****** --password=****** -A > /Ruta/Hacia/archivo_dump.SQL
  • Para hacer un dump de sólo algunas bases de datos es necesario ejecutar el comando:
mysqldump --user=****** --password=******  db_1 db_2 db_n> /Ruta/Hacia/archivo_dump.SQL
  • Para hacer un dump de todas las tablas de una base de datos es necesario ejecutar el comando:
mysqldump --user=****** --password=****** db > /Ruta/Hacia/archivo_dump.SQL
  • Para hacer un dump de sólo ciertas tablas de una base de datos es necesario ejecutar el comando:
mysqldump --user=****** --password=****** db --tablas tab1 tab2 > /Ruta/Hacia/archivo_dump.SQL

Para cada uno de estos comandos es necesario indicar un usuario (user) y la contraseña (password) con derechos de administrador en la base de datos.

Restauración

Para restaurar un dump tan sólo hay que ejecutar el comando:
mysql --user=****** --password=****** db_nom < /Ruta/Hacia/archivo_dump.SQL

4.    ¿Cómo se muestra en pantalla el contenido de un respaldo?
1.    Para ver el contenido de un respaldo se usa la opción (t), veamos el contenido de los respaldos que ya efectuamos.
# cd /root
# tar tvzf backup.tgz | more
# tar tvf /dev/fd0 | more
 Realiza respaldos de datos con el comando
‘cpio’
Siguiendo la siguiente secuencia: cópialos archivos del directorio /home al dispositivo /dev/fd0 usando el comando  cpio:
#ls | cpio -oc > /dev/fd0
5.   ¿Se puede  copiar una estructura de directorios, preservando los permisos,dueños, grupos, fechas y ligas?
# mkdir /users/newhome                Crear el directorio destino.
# cd /home                    Colocarse en el directorio a copiar.
# find . -depth -print | cpio-pdmv /users/newhome Copiar los archivos.
# rm -rf /home     Opcional: Borrar el directorio origen, sólo si se desea mover el directorio.
 6.     Realiza una tabla donde se  muestre los procedimientos  para  respaldar la base  de datos para el proyecto de veterinaria y como restaurar  la base de datos.

Los comandos básicos

En los siguientes ejemplos, el modificador -u especifica el nombre de usuario de MySQL, y el modificador -p indica que debe solicitarse la contraseña de dicho usuario al momento de ejecutar el comando.
Respaldar una base de datos:
mysqldump -u usuario -p base_datos > respaldo.sql
Restaurar una base de datos (la base de datos debe existir):
mysql -u usuario -p base_datos < respaldo.sql

Comandos especializados

Respaldar tablas específicas de una base de datos:
mysqldump -u usuario -p base_datos tabla1 tabla2 > respaldo.sql
Respaldar varias bases de datos al mismo tiempo:
mysqldump -u usuario -p --databases base1 base2 base3 > respaldo.sql
Respaldar todas las bases de datos
mysqldump -u usuario -p --all-databases > respaldo.sql
Respaldar sólo la estructura de una base da datos:
mysqldump -u usuario -p --no-data base_datos > estructura.sql

Usando compresión

Compresión al Respaldar:
mysqldump -u usuario -p base_datos | gzip > respaldo.sql.gz
Descompresión al Restaurar:
gunzip < respaldo.sql.gz | mysql -u usuario -p base_datos
BIBLIOGRAFIA



miércoles, 8 de mayo de 2013

Replicación con maquina virtual

Replicacion de una base de datos en MySQL utilizando una maquina virtual

Que es una replicacion?
consiste en replicar las consultas de actualización (tanto DML como DDL) en una base de datos maestra (master) sobre una o varias bases de datos esclavas (slave), de manera que tengamos una copia de las mismas a lo largo del tiempo.

Para empezar a utilizar la raplicacion de una base de datos utilizaremos los siguientes programas :
·         Xampp (MySQL)
·         Virtual Box
·         Windows 7
·         Windows XP
Seguiremos los siguentes pasos para la replicacion:
1.       Desactivaremos los Firewall de windows y tambien el antivirus para asegurarnosque funcione.












2.       Iniciaremos Xampp y modificaremos el archivo My.ini









3.       En la sección The MySQL server   pondremos las siguientes líneas







4.       Una vez hecho esto abrimos el cmd (Windows + R) y utilizaremos la instrucción IPCONFIG para ver la dirección IP del PC y la maquina virtual







5.       Ahora abrimos la maquina virtual para probar la conexión usando PING







6.       Después de asegurarnos de la conexión nos cambiaremos a la carpeta bin de mysql para iniciar la replicación






7.       Ahora daremos de alta al usuario que usaremos para replicar la base de datos dándole privilegios de replicación usando la sentencia GRANT


También usaremos la sentencia SHOW DATABASES para ver el nombre de la base de datos a replicar, nosotros utilizaremos la base de datos artículos_pedidos para este ejercicio.


8.- Bien ahora accedemos a la base de datos y usaremos también la sentencia FLUSH TABLES WITH READ LOCK esta sentencia no nos permitirá modificar las tablas de la base de datos que escogimos


Una vez bloqueadas las tablas mostraremos el estado del maestro, hay que guardar el nombre del archivo mysql-bin.000007, y también la posición 264 ya que esta nos será de utilidad para la replicación.




Salimos de MySQL y reiniciamos el servicio desde el panel de control de XAMPP, Si se usa MySQL server podrá reiniciar mediante el administrador de servicios de Windows.













10.- Ya reiniciado el servicio de mysql volvemos al CMD para utilizar la sentencia mysqldump
para generar el archivo de respaldo de la base de datos artículos_pedidos

Volvemos a entrar a MySQL normalmente:
mysql –uroot –p
Y desbloqueamos las tablas usando la sentencia  UNLOCK TABLES.
11.- Ahora nos vamos a buscar el archivo respaldo.sql que hicimos en la carpeta bin (C:\xampp\mysql\bin) de mysql para copiarla a un dispositivo USB y transferir la a la máquina virtual que usaremos para el replicado.
Nota: el nombre del archivo respaldo.sql puede variar pero no la extensión.






Hasta aquí terminamos con la configuración del maestro y vamos a configurar el esclavo.
12.- Ya que iniciamos la máquina virtual vamos a desactivar el firewall de Windows y si se tiene antivirus también desactivarlo (en mi caso no tengo antivirus solo desactivare el firewall)





Ahora vamos a configurar el archivo My.ini desde el panel de control de XAMPP, agregando las líneas de log-bin= mysql-bin, server-id=2 , guardamos el archivo










Para que estos cambios tengan efecto vamos a reiniciar el servicio de mysql desde el panel de control de XAMPP












13.- Vamos a CMD, nosotros sabemos la dirección IP de la máquina virtual y no usaremos la sentencia IPCONFIG pero para asegurarnos que existe la conexión haremos PING







14.- Todo bien, a continuación iniciamos mysql  y creamos la base de datos(Create database artículos_pedidos) y la usamos (USE artículos_pedidos)



15.- Salimos de mysql y hacemos que acepte el USB  la máquina virtual para tener acceso al archivo de respaldo











Copiamos esto al disco C: \ y ponemos la sentencia para cargar el archivo con myqsl








16.- Reiniciamos y volvemos a entrar a mysql detenemos al esclavo con la sentencia STOP SLAVE, cambiamos a maestro dando la dirección IP(192.168.0.4), le damos el nombre del usuario replicador ( DUPLICA), asignamos la contraseña (pass)  y ahora utilizaremos el nombre del archivo binario mysql-bin.000007










También cambiamos a la posición y utilizamos Start slave; para iniciar al esclavo en la replicación



17.- mostraremos el estado de nuestra conexión maestro/esclavo con la sentencia SHOW MASTER STATUS \G y observemos  Mostramos la información del esclavo con show slave \G;






Si la línea Seconds_behind_master  es  igual a NULL entonces la conexión no funciono de lo contrario como aquí que es igual a cero la conexión es correcta, para comprobarlo usamos la base de datos y mostramos las tablas



18.- Ahora veamos el contenido de una de las tablas, ejemplo: Select * from articulo;


Todo bien por ahora, pero para verificar si está replicando volvemos al maestro y vamos a insertar un registro en la tabla que seleccionamos “articulo’ , veamos la tabla primero para asegurarnos que tenemo los 30 registros:


19.-Una vez verificada la información insertamos el registro 31 con la siguiente sentencia
insert into articulo values (31, 'Kentucky Club higo'   ,  20 , 80);






20.-El ingreso del registro fue correcto por lo tanto vamos al esclavo y vemos los registros usando SELECT * FROM articulo para ver si la replica funciono.

miércoles, 1 de mayo de 2013

Replicación


Que es Replica (replication) de una base de datos .

 
Es el proceso de copiar y mantener objetos de las base de datos, como por ejemplo relaciones, en múltiples bases de datos que forman un sistema de bases de datos distribuido.


Beneficios de la réplica de Datos en un DBMS
·         Disponibilidad

·         Fiabilidad

·         Rendimiento

·         Reducción de la carga

·         Procesamiento desconectado

·         Soporta muchos usuarios

·         Soporta aplicaciones avanzadas

La replicación es útil para:

Copia de seguridad:


En condiciones normales, una base de datos replicada de forma correcta es válida como copia de seguridad.

Además se puede realizar copias de seguridad usando un servidor esclavo para así no interferir al servidor maestro.
  1. Mejorar la escalabilidad:
Podríamos configurar nuestras aplicaciones para balancear las consultas de lectura (SELECT) entre los servidores replicados.

Podríamos usar herramientas como MySQL Proxy para balancear las consultas de lectura entre los servidores replicados y enviar las consultas de actualización de datos al maestro.
  1. Alta disponibilidad:
En aplicaciones y entornos en donde sólo se requieren lecturas, podríamos configurar nuestras aplicaciones para balancear las consultas de lectura (SELECT) entre los servidores replicados de manera que si uno se cae se continue prestando servicio.
 
Ejemplo de una replicación de base de datos ( puede ser video o descripción)

Requerimos de 2 hosts con cualquier distribución de linux instalado.

Estos 2 hosts tienen 2 roles.

  • Maestro
  • Esclavo
PASOS PARA CONFIGURACIÓN DEL SERVIDOR MAESTRO:
1.-Modificar el archivo /etc/my.cnf agregando las siguientes líneas dentro del apartado [mysqld]

log-bin=mysql-bin

server-id=1

sync_binlog=1

El primer parámetro indica el nombre el archivo a utilizar para el log donde almacena todas las operaciones sobre la base de datos en cuestión.

El segundo parámetro indica el identificador único de los motores de bases de datos a configurar.

El tercer parámetro es para garantizar la consistencia en la replicación usando InnoDB que es el caso de la base de datos de prueba.

2.-Reiniciar el servicio de MySQL

3.-Crear un usuario en el servidor maestro para uso exclusivo de la replicación, esto con motivos de seguridad, estableciendo el permiso de REPLICATION SLAVE

CREATE USER ‘user’@ ‘host_esclavo’ IDENTIFIED BY ‘password’ ;

GRANT REPLICATION SLAVE ON *.* TO ‘replicadb’@’host_esclavo’ IDENTIFIED BY ‘password’;

PASOS PARA CONFIGURAR EL SERVIDOR ESCLAVO:

1.-Modificar el archivo /etc/my.cnf agregando las siguientes líneas dentro del apartado [mysqld]

server-id=2

log-bin = /var/log/mysql/bin.log

log-bin-index = /var/log/mysql/log-bin.index

log-error = /var/log/mysql/error.log

relay-log = /var/log/mysql/relay.log

relay-log-info-file = /var/log/mysql/relay-log.info

relay-log-index = /var/log/mysql/relay-log.index

2.-Crear directorio /var/log/mysql

mkdir /var/log/mysql

chown mysql.mysql mysql

3.-Reiniciar el servicio de MySQL

4.-Ejecutar los comandos siguientes en la consola de MySQL del servidor esclavo.
SHOW MASTER STATUS;
CHANGE MASTER TO MASTER_HOST=’host_maestro’;
CHANGE MASTER TO MASTER_USER=’user’;
CHANGE MASTER TO MASTER_PASSWORD=’password’;
CHANGE MASTER TO MASTER_PORT=3306;
5.-En la consola de MySQL ejecutar el siguiente comando:
 START SLAVE;
En este momento ya se encuentran sincronizando los motores de bases de datos

REFERENCIAS:http://www.slideshare.net/luisfe/replicacin-base-de-datos-488210
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=mysql_replicacion
http://cimatzacatecas.blogspot.mx/2012/03/replicacion-en-bases-de-datos-mysql.html
http://systemadmin.es/2010/03/como-montar-replicacion-en-master-slave-con-mysql