Suscribirse a la fuente RSS

«

»

Mar
11

Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master)

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.

  1. 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
  2. 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 #.

  3. Reiniciar el servidor MySQL

    sudo /etc/init.d/mysql restart
  4. 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.

  5. 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’;” .
  6. 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… :P )

5 comentarios

  1. XaviNo Gravatar escribió:

    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 ;)

  2. XaviNo Gravatar escribió:

    Slave!!! Slave!!! Slave!!! Queremos slave, queremos slave!!

  3. Blog de Laura Berdasco » Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (slave) escribió:

    [...] Replicación MySQL con Master-Slave sobre Ubuntu 8.10 (master) [...]

  4. Ruben CardenalNo Gravatar escribió:

    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.

  5. lauraNo Gravatar escribió:

    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 :)

Leave a Reply

Tu email nunca se publicará.

Puedes utilizar las siguientes etiquetas y atributos HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>