Base de datos · 6 min read · Jan 31, 2026
Replicación de MySQL en la misma máquina
Este Cómo Hacer explica la replicación en MySQL en la misma máquina.
Tienes grandes visitas, con un sitio impulsado por bases de datos y el rendimiento, la redundancia, la seguridad ahora vienen a la mente. El DBA ahora es introducido por muchos dedos para buscar una buena solución que haga felices a los rostros. Así que aquí vienen palabras como Clúster, Replicación, Respaldo, Fail Over y otros. ¿Qué son? Actualmente discutimos la Replicación en términos de un sitio impulsado por bases de datos basado en la web para grandes visitas.
Qué es la Replicación y por qué?
La replicación permite al DBA clonar la base de datos del maestro a otro servidor de base de datos con la misma base de datos. Eso incluye las identidades de maestro y esclavo. El esclavo se convierte en una copia exacta del servidor de base de datos maestro y/o sus bases de datos. Puede haber una relación uno a uno, uno a muchos, muchos a uno entre maestro(s) y esclavo(s). El esclavo lee continuamente el registro binario en el maestro (el binlog almacena las consultas escritas en el servidor de base de datos maestro) y obtiene la entrada para su servidor de base de datos esclavo.
Para qué no es la Replicación:
considerar la solución para respaldo, rendimiento, seguridad y redundancia. Hay otras técnicas para ello.
Actualmente vemos la Replicación del servidor MySQL en la misma máquina, es decir, maestro y esclavo ejecutándose en la misma máquina. También discutiremos algunos problemas con la replicación.
Requisitos previos:
Servidor MySQL 4.1.12 o superior en formato fuente. Descárgalo desde http://mysql.com en formato fuente. Puedes, para mayor facilidad, descargar el cliente mysql desde http://mysql.com o poner el mysql en la variable ambiental. De lo contrario, mysql tendría que ser llamado desde los respectivos directorios maestro/esclavo. Algunas distribuciones de Linux. (Usé Fedora Core 2). Eliminar dependencias para el servidor mysql
Instalación y Configuración del Maestro MySQL:
Descargar mysql-4.1.12 Fuente en la carpeta /misc
tar xzvf mysql-4.1.12.tar.gzcd /misc/mysql-4.1.12./configure --prefix=/usr/local/mysql-mastermakemake installcd /usr/local/mysql-master/bin./mysql_install_db(se creará una carpeta var)
cd ../varcp /misc/mysql-4.1.12/support-files/my-medium.cnf my.cnfcd ..groupadd mysqluseradd -g mysql mysqlchown -R root .chown -R mysql varchgrp -R mysql .[mysqld]
port = 3306
socket = /usr/local/mysql-master/mysql.sock
#skip-networking // tenemos que omitir esto en nuestro caso ya que estamos haciendo tanto maestro como esclavo en la misma máquina.
# Servidor Maestro de Replicación (por defecto)
# el registro binario es requerido para la replicación
log-bin
# id único requerido entre 1 y 2^32 - 1
# por defecto es 1 si master-host no está configurado
# pero no funcionará como maestro si se omite
server-id = 1
configura otros ajustes de acuerdo a tu requerimiento o déjalos igual, ¡funcionará! :)
Ahora inicia el servidor mysql con:
cd /usr/local/mysql-master/bin./mysqld_safe --defaults-file=/usr/local/mysql-master/var/my.cnf &;Esclavo MySQL:
Ahora extrae mysql-4.1.12.tar.gz en un directorio diferente,
cd /opt/mysql-4.1.12./configure --prefix=/usr/local/mysql-slavemakemake installcd /usr/local/mysql-slavecd bin./mysql_install_db(se creará una carpeta var)
cd ../varcp /opt/mysql-4.1.12/support-files/my-medium.cnf my.cnfcd ..groupadd mysqluseradd -g mysql mysqlchown -R root .chown -R mysql varchgrp -R mysql .Edita my.cnf en la carpeta var
[mysqld]
port = 3307
socket = /usr/local/mysql-slave/var/mysql.sock
#skip-networking
server-id = 2
# El maestro de replicación para este esclavo - requerido
master-host = localhost
master-user = slavedb
master-password = q1w2e3r4t5
master-port = 3306
Ahora inicia el servidor mysql con:
cd /usr/local/mysql-slave/bin./mysqld_safe --defaults-file=/usr/local/mysql-slave/var/my.cnf &Configurar Replicación:
conéctate al maestro mysql con:
mysql --sock=/usr/local/mysql-master/mysql.sockCrear cuenta en el maestro para el esclavo:
mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO slavedb@"192.168.1.27/255.255.255.0" identified by 'q1w2e3r4t5'; Query OK, 0 rows affected (0.28 sec)conéctate al esclavo mysql con:
mysql --sock=/usr/local/mysql-slave/mysql.sockmysql> slave start;Query OK, 0 rows affected, 1 warning (0.04 sec)
Pruebas:
mysql conecta en el maestro:
mysql> show master status\G;************************* 1. row ***********************
File: adam-bin.000001
Position: 227
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
ERROR:
No query specified
conectar mysql en el esclavo
mysql> show slave status\G;*********************** 1. row ************************* Slave_IO_State: Connecting to master Master_Host: localhost Master_User: slavedb Master_Port: 3306 Connect_Retry: 60
Master_Log_File: adam-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: adam-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: adam-bin.000001Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 4
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
ERROR:
No query specified
el archivo binlog en el maestro y su posición deben ser los mismos en el esclavo mysql al mostrar el estado del esclavo\G;
Si todo está bien, estás ejecutando una copia funcional de una relación uno a uno maestro y esclavo en el mismo sistema.
Algunos Problemas:
La replicación puede fallar debido a varios problemas. Comparto algunas de mis experiencias con la replicación.
problema: la replicación falla, el maestro se cae.
El maestro podría estar caído por muchas razones. HAZ UNA VERIFICACIÓN DE LOS LÍMITES DE ARCHIVO EN LA BASE DE DATOS, CONSULTAS SQL Y USO DEL DISCO. Si alguna de las razones muestra, corrige eso, reinicia mysqld y verifica el estado del maestro:
mysql> show master status\G;* 1. row *
adam-bin.000003
Position: 227
Binlog_Do_DB:
Binlog_Ignore_DB:
1 row in set (0.01 sec)
ahora verifica el esclavo: mostrando el estado del esclavo:
mysql> show slave status\G;* 1. row *
Slave_IO_State: Connecting to master
Master_Host: localhost
Master_User: slavedb
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: adam-bin.000001
Read_Master_Log_Pos: 4
Relay_Log_File: adam-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: adam-bin.000001
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 4
Relay_Log_Space: 4
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
como muestran los valores anteriores, el maestro ha incrementado al 3er binlog mientras que el esclavo todavía está apuntando al binlog1. así que cambia este valor conectándote al esclavo mysql
mysql>; stop slave;mysql> change master to master_log_file='adam-bin.000003', master_log_pos=227;mysql> start slave;Ahora verifica con show slave status\G; está funcionando bien.
Problema 2: En los Esclavos si aparece el error de clave duplicada
i.e
En el esclavo
Mysql> show slave status\G;* 1. row *
Slave_IO_State: Waiting for master to send event
Master_Host: 10.0.0.152
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: adam-bin.000048
Read_Master_Log_Pos: 317714810
Relay_Log_File: db4-relay-bin.000001
Relay_Log_Pos: 290512385
Relay_Master_Log_File: adam-bin.000048
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Error ‘Duplicate entry ‘dekq5g820avnfdmar5qi9dkhv3’ for key 1’ on query. Default database:’session_sql’. Query: ‘INSERT INTO sessi ons5 VALUES (‘dekq5g820avnfdmar5qi9dkhv3’, UNIX_TIMESTAMP(NOW()) + 18000, ‘redir ect|i:1;’)’
Skip_Counter:0
Exec_Master_Log_Pos: 290512419
Relay_Log_Space: 317714776
Until_Condition: None
Until_Log_File:
Until_Log_Pos:0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
1 row in set (0.00 sec)
Eso significa que por la indisponibilidad del maestro, el esclavo fue leído, o la indisponibilidad del esclavo, el maestro fue actualizado, así que una consulta encontró dos claves primarias para una entrada, lo cual es un desorden.
Así que solucionarlo es: En el esclavo:
Mysql> set global sql_slave_skip_counter=1;Mysql> start slave;Mysql> show slave status\G;Esto mostrará el valor sincronizado con el maestro. Arreglado.
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.