Búsqueda R ápida
![]() |
|
|||
|
La replicación en MySQL funciona de una manera muy sencilla. Existe un maestro, que es el encargado de propagar los cambios y los esclavos, que son los que reciben estos cambios a fin de tener una copia exacta de lo que tiene el maestro Para que esto suceda, los esclavos tienen una conexión abierta contínua con el maestro para recibir estos cambios. Con esta conexión se comprueba desde el esclavo la última posición escrita en el log binario del maestro, se replican por medio del log binario. Cuando sucede algún cambio en el log binario del maestro, se remiten estos cambios a los esclavos, que posteriormente ejecutan estos cambios en sus tablas. Opciones de Replicacion.- 1. Se pueden replicar todas las bases de datos del master, una sóla e incluso tablas sueltas si se quiere. 2. En una replicacion Asincrona como la que vamos a ver, el Maestro puede transferir al Esclavo pero no al revés. 3. Tanto el Maestro como todos los Esclavos han de tener una ID única, esto se hace mediante la directiva server-id que puede variar en un rango de números entre el 0 y el 65534, si no se especifica la ID por defecto será 0. 4. A cada esclavo hemos de pasarle la información del master con la directiva CHANGE MASTER TO, todos los detalles se guardan en el archivo master.info. 5. Es aconsejable crear un usuario de replicación para el master, ya que la clave está escrita en texto plano en el archivo antes mencionado master.info, ese usuario será únicamente para la replicación y no tendrá más privilegios que el de replicar. 6. Hemos de habilitar el binary logging de lo contrario no será posible la replicación. Configuración del Maestro Ingresamos a la consola Mysql.- en windows entramos por cmd a la carpeta donde se encuentra instalado nuestro servicio mysql en mi caso C:/Appserv/mysql/bin y si estamos en un entorno linux se ingresa directamente a la consola, y tipeamos lo siguiente Código:
#mysql -h servidor -u usuario -p password -h: es el nombre del servidor puede ser tambien el ip del servidor o localmente(localhost) -u: usuario con el cual vamos a loguearnos -p: password de autentificacion del usuario 2.-Creamos un nuevo usuario de replicación en el Maestro.- Hay que tener en cuenta que el usuario de replicación tiene que tener derechos globales, lo que significa que no se le pueden dar permisos para una sola base, hay que darle permisos para todas, pero sólo de replicación. Código:
mysql> GRANT REPLICATION SLAVE ON *.* TO 'usuario_replicacion'@'%' IDENTIFIED BY 'contraseña_replicacion'; mysql> FLUSH PRIVILEGES; mysql> quit *%*: significa que nuestros esclavos pueden acceder desde cualquier servidor si ud quiere limitar a un solo servidor para el esclavo ud. tiene que poner la IP del servidor esclavo. *.*: significa que estamos dando privilegios en todas las base de datos del servidor maestro,pero ojo solo es privilegios de replicacion. 3.- Ahora pasamos a configurar el my.conf del Maestro.- Para ello añadimos las siguientes líneas, en el contenedor mysqld, del archivo “/etc /my.conf” (comprueba que no tengas ya alguna de ellas en tu configuración para no repetir las líneas y sobre todo si has cambiado el data dir debes direccionar todo a esa carpeta), en windows se encuentra en mi caso en la carpeta "C:/Appserv/Mysql/my.ini". Código:
[mysqld] server-id=1 datadir=/var/lib/mysql/mysql.sock user=mysql port=3306 tmpdir=/tmp pid-file=/var/run/mysqld/mysqld.pid log_bin=/var/lib/mysql/mysql-bin.log expire_logs_days=10 max_binlog_size=100M Código:
binlog_do_db=prueba 4.- Ahora debemos reiniciar el servicio.- Código:
# /etc/init.d/mysqld restart Si la base de datos a replicar ya existía y contiene datos habrá que importar esos datos al servidor/es esclavo/s, asegurándonos de bloquear las sentencias que se ejecutan en el máster para que cuadre. 5.- Bloqueamos las tablas.- Si queremos replicar una sóla base de datos pondríamos los tres comandos (cambiando test_replication por el nombre que corresponda a tu base), en cambio si queremos replicar todas las bases de datos de mysql pondríamos los dos últimos comandos: Código:
mysql> USE test_replication; mysql>FLUSH TABLES WITH READ LOCK; mysql>SHOW MASTER STATUS; Código:
mysql> show master status; +------------------+----------+--------------+---------------------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+---------------------------------+ | mysql-bin.000022 | 98 | test_replication| | +------------------+----------+--------------+---------------------------------+ 1 row in set (0.00 sec) Ahora sin salir de la consola donde pusimos la sentencia de bloquear las tablas (digo sin salir de esa consola puesto que si salimos las tablas dejaran de estar bloqueadas y antes de eso tendremos que hacer una copia a la base de datos que queremos replicar), abrimos una nueva consola: # Para replicar todas las bases de datos de nuestro mysql: Código:
$ mysqldump --all-databases --lock-all-tables > backdb.sql Código:
$ mysqldump -u root -pcontraseña --opt test_database > test.sql Configuración del Esclavo.- Ahora pasamos a configurar la parte del esclavo: Código:
# vi /etc/my.cnf Código:
server-id=2 master-connect-retry=60 Master-connect-retry: Es el intervalo de tiempo en el que el esclavo intenta conectarse al maestro si la conexión falla. Si queremos únicamente una base de datos a replicar ponemos este parámetro, si no, lo omitimos. replicate-do-db=test_replication Ahora debemos reiniciar el servicio: Código:
# /etc/init.d/mysqld restart Código:
/usr/bin/mysqladmin --user=root --password=contraseña stop-slave. Código:
mysql> mysql -u usuario –p contraseña < backdb.sql Código:
$ mysql -u usuario -pcontraseña test_database < test.sql Código:
mysql> CHANGE MASTER TO MASTER_HOST='192.168.1.131',MASTER_USER='usuario_replica',MASTER_PASSWORD='contraseña_replica', MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=98; Código:
mysql> START SLAVE; Código:
mysql> SHOW SLAVE STATUS \G Cita:
Los campos marcados en negrita son los campos en los que tenemos que fijarnos, nosotros mismos le hemos pasado los parámetros así que comprobamos que esten bien. Si en Seconds_Behind_Master: 0 nos da NULL, quiere decir que existe un error que no deja que se sincronize, entonces debemos fijarnos en Last_Errno: 0 que en vez de 0 nos dará un error a solucionar. Puede que no haya un error en Last_Errno: entonces nos fijamos en que Slave_IO_State: Waiting for master to send event esté así, si no está mal y deberemos buscar la solución, en la mayoria de casos es un error de conexión con el maestro, fijate que el puerto 3306 este habilitado Por último no olvides abrir el puerto 3306 (si no lo has cambiado) en Maestro y Esclavos. Y esos serian los pasos para crear una arquitectura maestro esclavo con MYSQL.
|
![]() |
| Etiquetas |
| arquitectura mysql, base de datos, maestro esclavo, mysql |
| Herramientas | |
| Desplegado | |
|
|