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…
)
5 comentarios
Xavi
escribió:
March 11, 2009 a las 5:13 pm (UTC 2)
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
Xavi
escribió:
March 11, 2009 a las 11:19 pm (UTC 2)
Slave!!! Slave!!! Slave!!! Queremos slave, queremos slave!!
Blog de Laura Berdasco » Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (slave) escribió:
March 12, 2009 a las 10:54 am (UTC 2)
[...] Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master) [...]
Ruben Cardenal
escribió:
May 28, 2010 a las 12:19 am (UTC 2)
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.
laura
escribió:
May 28, 2010 a las 7:36 am (UTC 2)
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