Bases de Datos > MySQL
Replica En Mysql
irenemiracle:
hola a todos, he estado mi los logs de mysql para poder ver el error que me estaba dando y como tenia un montón de cosas antiguas, eh decidido borrarlos y empezar con la réplica desde 0.
Entonces en el archivo /etc/my.cnf tengo estas líneas:
--- Código: Text --- [mysqld]datadir = /var/lib/mysqlsocket = /var/lib/mysql/mysql.sockold_passwords = 1server_id = 1innodb_flush_log_at_trx_commit = 1#innodb_safe_binlogsync-binlog = 1log-bin = /var/log/mysql/master-binlog-bin-index = /var/log/mysql/master-bin.index
la linea de innodb_safe_binlog, la tengo comentada por que a la hora de reiniciar el servicio de mysql me daba fallo, entonces, no se si será necesaria al 100%, o puede ser prescindible?
El caso, es que e seguido con la réplica teniendola comentada, y en el momento en que en el servidor esclavo ejecuto:
--- Código: Text --- mysql> CHANGE MASTER TO MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=634;
me vuelve a dar otra vez el error:
--- Código: Text --- ERROR 1201 (HY000): Could not initialize master info structure;more error messages can be found in the MySQL error log
y he mirado los logs de mysql en los 2 servidores, y no me aparece nada <_<
¿Sabeis si puede tener relacion con innodb_safe_binlog?
Muchas gracias por vuestra ayuda :hola:
irenemiracle:
Hola a todos, que tal?
A ver, por fin he conseguido que una bd se me replique de un ordenador a otro :kicking: (cuando consiga al 100% lo que quiero os lo pondre por aqui por si le sirve a alguien :) )
Mi duda de ahora es la siguiente:
tengo 4 ordenadores A, B, C, D, entonces, me gustaria saber que es mejor, ¿tener el ordenador A como maestro y que replique la bd a los otros 3, ó tener A como maestro de B, B como maestro de C, y C como maestro de D?
Espero haberme explicado bien
Muchas gracias
Saludos :hola:
irenemiracle:
Hola a todos,
os voy a contar un poco la situacion, como dije antes, tengo 4 ordenadores, en el que A y B tienen una IP x.x.x.1 y una direccion interna 192.168.1.1 y 192.168.1.2, y C y D tiene una IP x.x.x.2 y una direccion interna 192.168.2.1 y 192.168.2.2
Me gustaria saber:
¿si A es el maestro de todos, irá la réplica más rápido, que si fuera A replicando a B y B a C, etc...?
En el caso de que la réplica fuera de A a B, de B a C y de C a D, si por algún casual B deja de funcionar,
¿hay alguna posibilidad de que A pasara en ese momento a ser maestro de C?
y en ese mismo caso de réplica, al pasar copias de un ordenador a otro con diferentes IP, ¿puede haber mas problemas de seguridad, cortes, etc...?
Espero haberme explicado bien y que me entendais
Muchas gracias por vuestro tiempo :hola:
irenemiracle:
Hola a todos, bueno, como os dije hace ya unos dias, hos voy a poner aquí el procedimiento que yo he seguido para poder hacer replicas de un ordenador a otro de todas las bases de datos, excepto de una.
Este es un pequeño manual que he echo para mi trabajo.
REPLICA DE BASES DE DATOS[/u][/b]
La réplica de MySQL permite tener una copia exacta de una base de datos de un ordenador principal (maestro) en otro ordenador (esclavo), y todas las actualizaciones que se vayan haciendo en la base de datos del ordenador maestro, se repliega inmediatamente en el esclavo. De esta manera, ambas bases de datos están sincronizadas.
Esta documentación está explicada para realizar réplicas de bases de datos de un ordenador a otro, u otros, bajo el Sistema Operativo de White Box Enterprise Linux.
Para poder realizar toda la configuración necesaria para la réplica, previamente los ordenadores donde se vayan a realizar, deben tener instalado la misma versión de MySQL.
En esta documentación, utilizaremos los siguientes datos a modo de ejemplo:
● ORDENADOR MAESTRO:
IP = 192.168.17.100
Nombre = laboratorio1
Nombre de la base de datos que NO se va a replicar = replica
● ORDENADOR ESCLAVO:
IP = 192.168.17.101
Nombre = laboratorio2
OJO!!, cuando estés realizando la réplica, debes cambiar esos datos de ejemplo por los tuyos reales.
La IP y el nombre de tus ordenadores, los encontrarás en:
# vi /etc/hosts
CONFIGURAR ORDENADOR MAESTRO
1º Creamos los directorios, si no existen, donde se almacenarán los datos de la replicación
--- Código: Text --- # mkdir /var/log/mysql # chown mysql:mysql /var/log/mysql
2º Pasamos a configurar el maestro. Abrimos el archivo my.cnf
--- Código: Text ---# vi /etc/my.cnf Y agregamos las siguientes líneas al fichero:
--- Código: Text --- [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 binlog-ignore-db=replica *1 server-id=1 innodb_flush_log_at_trx_commit=1 sync-binlog=1 log-bin=/var/log/mysql/laboratorio1-bin log-bin-index=/var/log/mysql/laboratorio1-bin.index
*1 si se quiere ignorar más de una base de datos, se pondrá esta línea (binlog-ignore-db) tantas veces como sea necesario, seguido del nombre de las bases de datos que no se van replicar.
3º Reiniciamos el demonio de mysql una vez echas estas modificaciones
--- Código: Text ---# /etc/init.d/mysql restart
4º Seguido comprobamos que escucha por el puerto 3306
--- Código: Text ---# netstat -an|grep -i listen|grep -i 3306 5º Ahora pasamos a configurar al usuario que realizará la réplica entre el maestro y el esclavo:
--- Código: Text --- # mysql -u root mysql> GRANT REPLICATION SLAVE ON *.* TO ‘slave_user’@’%’ IDENTIFIED BY ‘clave_user’; mysql> FLUSH PRIVILEGES; mysql> FLUSH TABLES WITH READ LOCK; mysql> SHOW MASTER STATUS;
(El comando SHOW MASTER STATUS mostrará algo parecido a la siguiente tabla. El resultado que nos da en File y Position, lo apuntamos, ya que lo seguiremos utilizando en siguientes pasos)
--- Código: Text --- +---------------------------+-----------------+--------------------+----------------------+| File | Position | Binlog_Do_Db | Binlog_Ignore_Db |+---------------------------+-----------------+--------------------+----------------------+|laboratorio1-bin.000001 | 98 | | replica,replica |+---------------------------+-----------------+--------------------+----------------------+ mysql> quit
6º Ahora comprobamos que está en el log binario con el comando mysqlbinlog y podremos ver el contenido del mismo
--- Código: Text ---# mysqlbinlog /var/lib/mysql/laboratorio1-bin.000001 *
* donde pone laboratorio1-bin.000001, pondremos lo que nos dio de resultado el File cuando ejecutamos antes el comando SHOW MASTER STATUS.
CONFIGURAR ORDENADOR ESCLAVO
1º Creamos los directorios, si no existen, donde se almacenarán los datos de la replicación
--- Código: Text --- # mkdir /var/log/mysql # chown mysql:mysql /var/log/mysql
2º Si la base de datos no existe, se creará
--- Código: Text --- # mysql -u rootmysql> CREATE DATABASE replica;mysql> quit
3º Pasamos a configurar el esclavo. Abrimos el archivo my.cnf
--- Código: Text --- # vi /etc/my.cnf Y agregamos las siguientes líneas
--- Código: Text --- [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock old_passwords=1 server-id=2 *1 master-host=192.168.17.100 master-user=slave_user master-password=clave_user master-connect-retry=60 replicate-ignore-db=replica *2 relay-log=/var/log/mysql/laboratorio2-relay-bin relay-log-index=/var/log/mysql/laboratorio2-relay-bin.index
*1 si vamos a tener más de un ordenador esclavo, a cada uno le mandaremos un server-id distinto (por ejemplo: server-id=3, server-id=4,etc…). Este nº nunca debe de ser igual que el del maestro.
*2 si se va a ignorar más de una base de datos, se pondrá esta línea (replicate-ignore-db) tantas veces como sea necesario, seguido del nombre de las bases de datos que van a ser replicadas.
4º Reiniciamos el demonio de mysql una vez echas estas modificaciones
--- Código: Text --- # /etc/init.d/mysql restart
5º Seguido comprobamos que escucha por el puerto 3306
--- Código: Text --- # netstat -an|grep -i listen|grep -i 3306
6º
--- Código: Text --- # mysql -u root mysql> slave stop; mysql> CHANGE MASTER TO MASTER_HOST=’192.168.17.100’, MASTER_USER=’slave_user’, MASTER_PASSWORD=’clave_user’, MASTER_LOG_FILE=’laboratorio1-bin.000001’, MASTER_LOG_POS=98; mysql> start slave; mysql> quit
- en MASTER_HOST, pondremos la IP o nombre del ordenador maestro.
- en MASTER_USER, pondremos el nombre del usuario al que concedimos los derechos de la réplica.
- en MASTER_PASSWORD, pondremos la contraseña del usuario de MASTER_USER
- en MASTER_LOG_FILE, pondremos el resultado que nos devuelve en campo File, cuando ejecutamos SHOW MASTER STATUS en el maestro.
- en MASTER_LOG_POS, pondremos el resultado que nos devuelve en campo Position, cuando ejecutamos SHOW MASTER STATUS en el maestro.
7º Ya sólo queda comprobar que la réplica de todas las bases de datos menos una ó varias funciona, así que sólo tenemos q ir a ordenador maestro y realizar cualquier cambio en cualquier base de datos, y comprobar en el esclavo que el cambio se ha realizado.
Si quereis que un ordenador sea maestro y esclavo a la vez, en el archivo my.cnf teneis que poner tanto la parte que corresponde al maestro como la del esclavo, pero no podeis olvidar poner la linea log-slave-updates, porque sin esto no funcionaria :P
Bueno, espero que le sirva de ayuda a alguien, ya que entre todos habeis podido ayudarme a mi.
Muchas gracias
Saludos :hola:
F_Tanori:
Vaya le haz dado un buen seguimiento a esto, y haz colocado una buena guia, ( lo malo para mi es no saber linux :P )
Gracias,
estará como discusion importante en este Foro de MySQL
Saludos
Navegación
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa