Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master)
| marzo 11, 2009 | Posted by laura under Programación |
Tras decidir, como se indica en el post anterior, que el sistema de bases de datos que utilizaríamos en nuestro proyecto sería, finalmente, por replicación hemos empezado a hacer unas cuantas pruebas. Lo primero de todo decir que, después de unas horas de lucha intensa con diferentes fuentes de información sobre master-slave de MySQL, hemos conseguido montar un primer sistema sencillo con el que podremos hacer diferentes prueb as encaradas a su implementación final sobre Amazon EC2. En la publicación que os presento hoy repasaremos estos pasos iniciales que tanto nos ha costado realizar. Partimos de una base de datos (base_datos) completamente vacía (sin registro alguno); para bases de datos que no esté vacía, el sistema de montaje es un poco diferente.
NOTA: El sistema operativo sobre el cuál realizamos el montaje es Ubuntu 8.10.
Configuración del master
En este apartado os indicaré los pasos que hemos seguido para montar nuestro servidor master.
- Como muchos de vosotros estaréis pensando, uno de los pasos necesarios para la configuración del sistema de MySQL es la edición de su archivo de configuración (valgase la redundancia). En este caso, efectivamente, lo primero que tendremos que hacer será editar my.cnf con privilegios de root; para ello, abriremos el terminal y escribiremos la siguiente línia (la ruta puede variar. Os dejo la ruta donde se encuentra mi archivo de configuración):
sudo gedit /etc/mysql/my.cnf
- Introducir en el apartado [mysqld] los siguientes atributos:
server-id=1
innodb_flush_log_at_trx_commit=1
sync_binlog=1
log-bin=mysql-bin
binlog-do-db=base_datos
Vamos por partes:
- El id del server, para definir un master, debe ser 1. Por eso indicamos que server-id=1.
- innodb_flush_log_at_trx_commit=1 y sync_binlog=1 son dos atributos que colocamos en este caso (leer más en el artículo anterior) ya que decidímos que el master debería tener como motor de almacenamiento el InnoDB. Para más información, consultar la documentación de MySQL.
- log-bin debe indicar en que archivo se escribirá el log del máster. En este caso, utilizamos el mismo que utiliza MySQL. Os dejo un tutorial en el que podréis ver que este archivo log puede destinarse en cualquier lugar.
- binlog-do-db=base_datos , le indica al master sobre qué base de datos debe guardar la actividad.
IMPORTANTE: Comentaremos las opciones de skip-networking y bind-address que se encuentran en ese mismo archivo de configuración, en el caso de que existan. Para comentar las líneas debemos situarnos al principio de la línea y añadir un símbolo #.
- Reiniciar el servidor MySQL
sudo /etc/init.d/mysql restart
- Acceder a la consola de MySQL, como root.
mysql -u root -p
Dentro crearemos un usuario “slave” para que pueda ponerse en contacto con nuestro master y retendremos información del estado del máster para establecer un punto de inicio antes de comenzar el proceso de replicación con el slave.
GRANT REPLICATION SLAVE ON *.* TO 'usuarioslave'@'%' IDENTIFIED BY 'clave_acceso_slave';
FLUSH PRIVILEGES;
USE base_datos;
FLUSH TABLES WITH READ LOCK;
SHOW MASTER STATUS;
+----------------------------+------------+----------------------+---------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------------------+-------------+----------------------+---------------------------+
| mysql-bin.000007 | 98 | base_datos | |
+----------------------------+------------+----------------------+---------------------------+
UNLOCK TABLES;NOTA: ‘%’ puede substituirse también por una dirección IP o DNS concreta. Pero para hacer pruebas, este símbolo ya nos sirve.
- NOTA2: En el caso en el que queramos más slaves, tendremos que darles permisos a cada uno de ellos, con la línea descrita “GRANT REPLICATION SLAVE ON *.* TO ‘usuarioslave’@'%’ IDENTIFIED BY ‘clave_acceso_slave’;” .
- Una vez hecho todo esto, saldremos de la consola de MySQL con la sentencia:
exit;
NOTA DE LA AUTORA: A partir de aquí empezaría la configuración del slave. Deseo que tengáis paciencia, en breve la acabaré de redactar y la compartiré con vosotros. Si téneis cualquier duda o sugerencia, solo téneis que dejar un comentario
. Muchas gracias!
Esto es todo, de momento, desde el zulo, pigüinos y manzaitas world! (aún, sin jefe…
)
Corriendo paso a paso este tutorial en una instancia de EC2 con los archivos de datos del servidor MySQL en un EBS ha ido todo genial.
Si quieres mirar como se pueden desplazar los archivos de datos de un servidor MySQL te puedes pasar por mi post Mover los archivos de datos de MySQL Server.
Gran post, si señora
Slave!!! Slave!!! Slave!!! Queremos slave, queremos slave!!
[...] Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master) [...]
La utilidad de querer configurar una replicación sobre una base de datos vacía es prácticamente nula. No te habría costado nada comentar las formas de hacerlo con la base de datos ya con datos, ya sea con dumps o snapshots.
La publicación de este post fue el resultado de un proyecto piloto que se realizó hace más de un año. Esto se realizó a partir de un proyecto nuevo, sin una base de datos existente. Se probó insertando gran cantidad de datos, a posteriori, y funcionó.
Por los feedbacks que he ido recibiendo, la gente que lo ha necesitado lo ha encontrado muy útil ya que resume y clarifica los pasos que hay que seguir. Está claro que todo se puede mejorar, pero en aquel momento no teníamos una bbdd existente con la que jugar para mostrarte lo que pides.
Como ya he comentado, en este blog pretendo dar una ayuda, un punto de partida para aquella gente que no sabe dónde encontrar información relacionada con diferentes temas. Para tener una visión general de cómo se pueden hacer las cosas.
Aún así, muchas gracias con tu comentario
No.. si lo que te digo lo decía en plan constructivo para quien no sepa cómo pasar de un servidor existente con datos, a un master-slave. Yo hacerlo ya se, el comentario era porque la entrada fuera más completa para un mayor número de profanos
Por lo demás.. con una tabla pequeñita con un par de registros, habría bastado
[...] podeis visitrar los compeltos artículos que Laura tiene en su blog sobre la replicación en MySQL: Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master) y Replicación MySQL con Master-Slave sobre Ubuntu 8.10 [...]
[...] Comentamos las líneas de skip-networking y bind-address, como hemos dicho en el post [...]