Explicación detallada de la configuración de replicación maestro-esclavo de MySQL

1. Configurar el entorno

Sistema operativo: Dos sistemas Linux con CentOS 7.6

Versión de la base de datos: MySQL 5.6.39

IP del servidor principal: 192.168.0.1

IP del servidor esclavo: 192.168.0.2

2. Instalar la base de datos

He explicado los pasos para instalar MySQL en CentOS en detalle a mis amigos antes, para aquellos que no lo han visto, pueden hacer clic aquí:

" Pasos detallados para instalar MySQL en entorno Linux "

3. Requisitos previos de configuración

1. Es necesario asegurarse de que el firewall esté abierto o cerrado en el puerto 3306, que se introduce en la instalación de MySQL.

2. Los dos servidores pueden hacer ping entre sí

--在192.168.0.2上输入ping命令
ping 192.168.0.1
--在192.168.0.1上输入ping命令
ping 192.168.0.2

3. Después de instalar MySQL con éxito, use una máquina virtual para clonar una como servidor esclavo

4. Configurar la base de datos maestra

4.1 Modificar el archivo de configuración de la base de datos

[root@localhost ~]# vi /etc/my.cnf

Cambie el contenido interior a

[mysqld]
#开启二进制日志
log-bin=mysql-bin
#标识唯一id(必须),一般使用ip最后位
server-id=1
#不同步的数据库,可设置多个
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
#指定需要同步的数据库(和slave是相互匹配的),可以设置多个
binlog-do-db=test

Agregar método y reglas de almacenamiento de registros (opcional)

#设置存储模式不设置默认
binlog_format=MIXED
#日志清理时间
expire_logs_days=7
#日志大小
max_binlog_size=100m
#缓存大小
binlog_cache_size=4m
#最大缓存大小
max_binlog_cache_size=521m

Nota: Configuré la capacidad de almacenamiento del registro para que sea relativamente pequeña, por supuesto, puede modificarla para que sea mayor según la situación real.

4.2, reinicie el servicio de base de datos mysqld

service mysqld restart

Si instaló mysql correctamente de acuerdo con lo anterior, puede reiniciar normalmente aquí. Si el inicio no es normal, aparecerá el siguiente error:

El servidor se cerró sin actualizar el archivo PID...

Debe usar el siguiente comando para ver si todavía hay un proceso mysqld

ps -ef|grep mysqld

Si lo hay, puede usar el comando: matar -9 número de proceso de mysqld para finalizarlo, luego reinicie mysqld

Me he encontrado con la situación anterior. Por supuesto, hay otras razones, aquí hay una solución para otras posibles razones de referencia:

https://javawind.net/p141

4.3 Inicie sesión en la base de datos MySQL para permitir que la biblioteca principal inicie sesión desde la biblioteca

[root@localhost ~]# mysql -u root -p

Nota: No necesita ingresar la contraseña raíz para el primer inicio de sesión.

Después de ingresar, haga la siguiente configuración:

#给从库放权限
mysql>GRANT FILE ON *.* TO 'root'@'192.168.0.2' IDENTIFIED BY 'root password'; #创建用户
mysql>GRANT REPLICATION SLAVE ON *.* TO 'root'@'192.168.0.2' IDENTIFIED BY 'root password'; #修改用户权限
mysql>select host ,user ,password from mysql.user; #查看是否修改成功
mysql>FLUSH PRIVILEGES; #刷新权限

4.4 Reinicie el servicio MySQL, inicie sesión en MySQL y vea la información de la base de datos principal

[root@localhost ~]# service mysqld restart #重启mysql服务
[root@localhost ~]# mysql -u root -p #登陆mysql
mysql> show master status; #查看master状态

Muestra aproximadamente lo siguiente

+------------------+----------+--------------+----------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+----------------------------------+-------------------+
| mysql-bin.000006 |    120 | ufind_db | information_schema,performance_schema,mysql | |
+------------------+----------+--------------+----------------------------------+-------------------+
1 row in set (0.00 sec)

Nota : Si este paso siempre se ejecuta Empty set(0.00 sec), significa que el my.cnf anterior no está configurado correctamente , por favor regrese y vuelva a verificar los pasos de configuración.

5. Configurar la base de datos esclava

5.1 Modificar el archivo de configuración de la base de datos de la biblioteca esclava

[root@localhost ~]# vi /etc/my.cnf

Cambie el contenido interior a

#开启二进制日志
log-bin=mysql-bin
server-id=2
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=mysql
#与主库配置保持一致
replicate-do-db=test
replicate-ignore-db=mysql
log-slave-updates
slave-skip-errors=all
slave-net-timeout=60

5.2 Reinicie el servicio MySQL e inicie sesión en MySQL

[root@localhost ~]# service mysqld restart

[root@localhost ~]# mysql -u root -p

y hacer las siguientes modificaciones:

#关闭Slave
mysql> stop slave; #设置连接主库信息
mysql> change master to master_host='192.168.0.1',master_user='root',master_password='root password',master_log_file='mysql-bin.000006', master_log_pos=120;
#开启Slave
mysql> start slave;

Nota : El master_log_file anterior es el campo Archivo al configurar el Maestro, y master_log_pos es el campo Posición al configurar el Maestro. debe coincidir con
 

5.3 Ver la información de estado de la biblioteca esclava

mysql> show slave status \G;

Si tiene éxito, se mostrará la siguiente información:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.1
                  Master_User: root
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000006
          Read_Master_Log_Pos: 120
               Relay_Log_File: localhost-relay-bin.000006
                Relay_Log_Pos: 520
        Relay_Master_Log_File: mysql-bin.000006
             Slave_IO_Running: Yes //显示yes为成功
            Slave_SQL_Running: Yes //显示yes为成功,如果为no,一般为没有启动master
              Replicate_Do_DB: test
          Replicate_Ignore_DB: mysql//上面的都是配置文件中的信息
           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: 357
              Relay_Log_Space: 697
              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: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: //如果为no,此处会显示错误信息
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 2
                  Master_UUID: be0a41c0-2b40-11e8-b791-000c29267b6a
             Master_Info_File: /usr/local/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for the slave I/O thread to update it
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
1 row in set (0.00 sec)
 
ERROR:
No query specified

Nota : Si Slave_IO_Running: No y se produce el siguiente error

Last_IO_Error: error fatal: el subproceso de E/S del esclavo se detiene porque el maestro y el esclavo tienen los mismos UUID del servidor MySQL; estos UUID deben ser diferentes para que funcione la replicación.

Significa que el UUID del servidor maestro y el UUID del servidor esclavo se repiten, porque cloné una base de datos directamente después de instalarla con éxito, por lo que sus UUID son los mismos y se informará este error. Puede modificar el UUID de la biblioteca esclava.

Primero generamos un UUID en la base de datos desde la biblioteca

mysql>select UUID();

Copie el UUID consultado de la base de datos y luego edite el archivo de configuración de UUID de la biblioteca esclava

Si también instaló lo mismo que yo, la ruta al archivo de configuración debería estar aquí:

[root@localhost ~]# vi /usr/local/mysql/data/auto.cnf

Después de ingresar, reemplace una cadena de UUID de 32 bits con los UUID que acabamos de consultar en la base de datos.

Si Slave_IO_Running: No y se produce el siguiente error

Obtuve el error fatal 1236 del maestro al leer datos del registro binario: 'No se pudo encontrar el primer nombre de archivo de registro en el archivo de índice de registro binario'

Solución: restablecer

mysql>stop slave; //停止
mysql>reset slave; //复位
mysql>start slave; //开启

En este punto todo el proceso está configurado.

Algunos amigos pueden preguntar, he configurado estos archivos de configuración y la información es la misma que la tuya. Todavía no estoy seguro de si la configuración es exitosa.

Luego puede crear una tabla en el servidor maestro y luego consultar la tabla recién creada en el servidor esclavo para ver si existe.

6, consejos

6.1 En cuanto a la inconsistencia de datos maestro-esclavo con respecto a adiciones, bajas, revisiones y consultas:

#select 语句,暂时没有发现问题
 
#insert 语句,暂时没有发现问题
 
#update 语句,暂时没有发现问题
 
#delete 语句,主库删除多条数据,发现数据不一致

Razón: De hecho, hay una declaración de eliminación en el contenedor de la biblioteca principal, pero no hay una declaración de eliminación en el contenedor de la biblioteca esclava

Solución: Use use database para seleccionar la base de datos que necesita ser operada en el esquema de la base de datos actual, y luego ejecute la eliminación, OK, la sincronización es exitosa

6.2, el método de consulta del registro maestro-esclavo binlog

#查看binlog全部文件
mysql>show binary logs;
 
#查看binlog是否开启NO为开启
mysql> show variables like 'log_bin%';
 
#详细信息
mysql>  show variables like 'binlog%';
 
#查看binlog日志
mysql> show binlog events in'mysql-bin.000019';
 
#或者使用mysqlbinlog,如果报错使用--no-defaults(使用全路径)
[root@localhost ~]# /usr/local/mysql/bin/mysqlbinlog --no-defaults /usr/local/mysql/data/mysql-bin.000019

6.3 Limpiar manualmente el registro maestro, lo mejor es cerrar el registro, en /etc/my.cnf

#手动刷新日志
mysql> show master status;
#删除全部
mysql> reset slave;或 rest master;
#删除MySQL-bin.004
mysql> PURGE MASTER LOGS TO 'MySQL-bin.004';

Supongo que te gusta

Origin blog.csdn.net/ytp552200ytp/article/details/125987646
Recomendado
Clasificación