Realice la replicación maestro-maestro (maestro-esclavo) de mysql en Windows

  • El servidor mysql permite que un servidor se establezca como servidor maestro, y varios servidores de base de datos esclavos pueden copiar datos de un servidor de base de datos mysql a uno o más servidores de base de datos mysql
  • mysql maestro-esclavo es el proceso de replicación asincrónica
  • ¿Qué admite esta replicación maestro-esclavo en la capa inferior?

       Respuesta: el maestro abre la función bin-log, el archivo de registro se usa para registrar las adiciones y eliminaciones de lectura y escritura de la base de datos

Se requieren un total de tres subprocesos en la configuración maestro-esclavo:

  • maestro: hilo IO: 

Cualquier modificación del servidor principal se guardará en el registro binario a través de su propio bin-log de subproceso IO

  • Esclavo en: hilo IO: 

El servidor esclavo también iniciará un IO Thread a través del nombre de usuario y la contraseña configurados, se conectará al servidor principal para solicitar la lectura del registro binario y luego almacenará el contenido leído en un registro Realy local (registro de retransmisión)

  • Esclavo en: hilo SQL:

Abra un SQL Theard desde el servidor al mismo tiempo. Compruebe el registro de Realy con regularidad. Si se encuentran actualizaciones, ejecute inmediatamente el contenido actualizado en la base de datos local.

Cómo funcionan los tres hilos:

         El esclavo inicia el subproceso IO y el subproceso sql. El esclavo es responsable de conectarse al maestro a través del subproceso IO y de solicitar el contenido después de una determinada posición bin-log. El servidor maestro recibe la información de solicitud de registro enviada por el subproceso IO esclavo, y el subproceso io combina el contenido bin-log con La posición se devuelve al hilo IO esclavo

        El servidor esclavo recibe el contenido del registro bin-log, escribe el contenido del registro bin-log en el registro del relé-log y crea un archivo master.info que registra el nombre de usuario y la contraseña de la IP maestra nombre del bin-log maestro, bin- posición del registro.

         El lado esclavo inicia el subproceso SQL, monitorea si el contenido del registro del registro de retransmisión se actualiza en tiempo real, analiza la declaración SQL en el archivo y la ejecuta en la base de datos esclava.

Encima:

 

Echemos un vistazo a cómo configurar, antes de configurar debemos asegurarnos de que mysql esté instalado en dos servidores.

Los dos servidores que uso aquí son

maestro: 10.55.185.80

esclavo: 10.55.185.81

primer paso:

El archivo de configuración mysql my.ini explica:

配置说明:
#[必须]服务器唯一ID,每台服务器需不同
server-id = 1
#[必须]启用二进制文件
log-bin = /home/mysql/mysql-bin
#[不是必须]二进制文件启用混合模式
binlog_format = mixed
#[不是必须]二进制文件过期时间,单位是天
expire-logs-days = 14
#[不是必须]当每进行1次事务提交之后,MySQL将进行一次磁盘同步指令来将binlog_cache中的数据强制写入磁盘
sync-binlog = 1
#[不是必须]只将对应的数据库变动写入二进制文件。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
binlog-do-db = test,androidpnserver
#[必须]不需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项。一般为了保证主主同步不冲突,会忽略mysql数据库。
binlog-ignore-db = mysql,information_schema,performance_schema
#[必须]做主主备份的时候,因为每台数据库服务器都可能在同一个表中插入数据,如果表有一个自动增长的主键,那么就会在多服务器上出现主键冲突。
#解决这个问题的办法就是让每个数据库的自增主键不连续。上面两项说的是,假设需要将来可能需要10台服务器做备份,将auto-increment-increment设为10。而auto-increment-offset=1表示这台服务器的序号。从1开始,不超过auto-increment-increment。
auto-increment-increment = 10
auto-increment-offset = 1

 El contenido del archivo de configuración mysql del servidor principal:

[mysqld]
server-id=1
log-bin = mysql-bin
binlog-do-db = bd-ecxel
binlog-ignore-db = mysql,information_schema,performance_schema
auto-increment-increment = 10
auto-increment-offset = 2

El contenido del archivo de configuración de mysql del servidor:

[mysqld]
server-id=2
log-bin = mysql-bin
binlog-do-db = bd-ecxel
binlog-ignore-db = mysql,information_schema,performance_schema
auto-increment-increment = 10
auto-increment-offset = 2

Nota: el ID del servidor aquí debe ser único

El segundo paso:

Primero reinicie mysql:

#停止mysql服务
net stop mysql
#开启mysql服务
net start mysql
进入mysql
mysql -u root -p 

Nota: Antes de la configuración maestro-esclavo de la base de datos, asegúrese de que la base de datos maestro-esclavo esté sincronizada temporalmente.Puede desbloquear la base de datos del servidor maestro primero y no agregue, elimine ni modifique la base de datos.

tercer paso:

首先刷新,停止线程
mysql>stop slave;

mysql>reset slave;
刷新mysql的系统权限相关表
mysql>flush privileges;

 el cuarto paso:

Cree una cuenta de sincronización en el servidor maestro: (si está realizando una replicación maestro-esclavo, solo necesita crear una cuenta de sincronización en el servidor maestro

Si está realizando una replicación maestro-maestro, tanto el maestro como el esclavo deben crear cuentas de sincronización )

grant replication slave on *.* to '<userName>'@'<hostIp>' identified by '<passWord>';`
​
# userName     用户名,默认root
# passWord     用户密码(均为数据库账户,密码)
# hostIp          需要同步的主机IP,可以写%,表示全部

Ejemplos:

grant replication slave on *.* to 'root'@'%' identified by '123456';

 el quinto paso:

Verifique el estado del maestro en el servidor maestro, registre el nombre del archivo binario   y  recuerde que Archivo y Posición se usarán en el esclavo

mysql > SHOW MASTER STATUS;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 73       | test         | manual,mysql     |
+------------------+----------+--------------+------------------+

El sexto paso:

Configure la sincronización de la biblioteca esclava , preste atención al punto de sincronización allí, que es el | Archivo | Posición en la biblioteca principal, muestre la información del estado del maestro

(Si es un maestro-esclavo, entonces solo necesita sincronizar en el esclavo, si es un maestro, entonces necesita realizar este paso) 


mysql> CHANGE MASTER TO
    ->     MASTER_HOST='10.55.185.80',
    ->     MASTER_USER='root',
    ->     MASTER_PASSWORD='123456',
    ->     MASTER_LOG_FILE='mysql-bin.000003',
    ->     MASTER_LOG_POS=73;

El anfitrión inicia el hilo de sincronización esclavo

mysql>stop slave;
mysql>start slave;

El anfitrión ve el estado del esclavo:

mysql> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 10.55.185.80
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 11662
               Relay_Log_File: mysqld-relay-bin.000022
                Relay_Log_Pos: 11765
        Relay_Master_Log_File: mysql-bin.000013
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
        ...

¡Este es el éxito de los dos hilos del esclavo si ambos son sí!

Suplemento: si hay un error al verificar el estado, entonces la causa del error se puede detectar de acuerdo con el código de error,

Hay dos formas de resolver errores generales:

El primero: ignora el error y continúa sincronizando


stop slave;
#表示跳过一步错误,后面的数字可变
set global sql_slave_skip_counter =1;
start slave;
之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
ok,现在主从同步状态正常了。

El segundo tipo: especifique los códigos de error de omisión en el archivo de configuración y continúe sincronizando

主键冲突、表已存在等错误代码如1062,1032,1060等,可以在mysql主配置文件指定略过此类异常并继续下条sql同步,这样也可以避免很多主从同步的异常中断

[mysqld]

slave-skip-errors = 1062,1032,1060

重新启动mysql

service mysqld restart

之后再用mysql> show slave status\G 查看:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

 

Supongo que te gusta

Origin blog.csdn.net/qq_30631063/article/details/109250836
Recomendado
Clasificación