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';