Aqui voy a explicar como poder montar un sistema de maestro-esclavo(s) en mysql. La idea es que hay un servidor principal, que es en el que se modifican los datos y los esclavos solo estan ahi para tenerlo todo duplicado, esto es perfecto para hacer copias de seguridad. Si la idea es tener transferencia de datos bidireccional, hay que montar un “MySQL Cluster “
La replicacion funciona por medio de los binary log de mysql, asi que lo primero sera configurar correctamente el servidor maestro. Asi que añadimos estas opciones en el fichero my.cnf si aun no estan.
|
|
IMPORTANTE: Hay que comprobar que la linea skip-networking no este puesta en el master, ya que sino no abrira el puerto
Ahora dejaremos lista la configuracion en el esclavo
|
|
Ahora en el maestro le damos permisos al esclavo
1GRANT REPLICATION SLAVE ON *.* TO slave@IP_ESCLAVO IDENTIFIED BY 'slavepass';
Ahora vamos a hacer un snapshot de la posicion actual del maestro para dejar el esclavo en la misma posicion para empezar a replicar. Nos conectamos al servidor maestro y ejecutamos lo siguiente:
1FLUSH TABLES WITH READ LOCK;
2SHOW MASTER STATUS;
Esto nos va a devolver la posicion actual del log, asi que apuntamos “File” y “Position“, que lo necesitaremos para ponerselo al esclavo, en caso de que salga en blanco “File” es ” y “Position” es 4
Ahora sin cerrar la conexion mysql (sino se pondria en marcha otra vez), ejecutamos esto desde otro terminal:
1$ mysqladmin -u root -p shutdown
Realizamos ahora la copia de la base de datos, hay dos metodos:
-
mysqldump
1$ mysqldump --all-databases --master-data -u root -p > /tmp/dump.sql
-
tar
1$ cd /var/lib ; tar cf /tmp/mysql.tar mysql
Pasamos la copia al esclavo y lo importamos:
-
mysqldump
1$ mysql -u root -p < /tmp/dump.sql
-
tar
1$ cd /var/lib ; tar xcf /tmp/mysql.tar
Lo siguiente es ponerle los datos del maestro al esclavo:
1CHANGE MASTER TO master_host='IP_MAESTRO', master_user='slave', master_password='slavepass', master_log_file='', master_log_pos=4;
2start slave;