Sincronización maestro-esclavo MySQL
Mi configuración: MySQL 8.0, Centos 7 (maestro), Windows 10 (esclavo)
Paso 1: compruebe si binlog está habilitado
A partir de MySQL8.0, binlog está habilitado de forma predeterminada, si es la versión 5.7, también se puede configurar y habilitar en my.cnf/my.ini.
show variables like '%log_bin%';
el anfitrión
Esclavo
Paso 2: configurar el archivo de configuración
el anfitrión
El archivo de configuración de MySQL en Linux está en /etc/my.cnf de forma predeterminada y se puede editar con el comando vim.
vim /etc/my.cnf
Configure la información en [mysqld]. Tenga en cuenta que está en [mysqld]. Si se configura en otros lugares, no se leerá.
El binlog-do-db aquí no se puede configurar, según las necesidades.
Esclavo
El archivo de configuración de MySQL en Windows está en C:\Program Files\MySQL de forma predeterminada, abra my.ini para editarlo
De manera similar, configure la información en [mysqld]
Paso 3: reinicia el servicio
el anfitrión
Comando de reinicio de MySQL en Linux
systemctl restart mysqld.service
Esclavo
Abra cmd, primero ingrese net stop mysql y luego ingrese net start mysql
net stop mysql
net start mysql
Paso 4: configurar una cuenta
el anfitrión
Por lo general, en el escenario empresarial de sincronización maestro-esclavo, se proporciona una cuenta a la base de datos esclava. Normalmente, no se proporciona la cuenta raíz. Aquí usaré la cuenta zhku que creé antes para demostración (también puede usar la cuenta raíz, pero no es recomendable).
Primero verifique si la cuenta tiene el permiso de sincronización maestro-esclavo
select Repl_slave_priv, Repl_client_priv from mysql.user where user = 'zhku';
Se nota que no se concede el permiso.
conceder permiso
grant replication slave, replication client on *.* to 'zhku'@'%';
Paso cinco: verificar el estado
el anfitrión
Ver estado maestro
show master status;
archivo: indica desde qué archivo comienza la información del registro bin sincronizado;
posición: Indica dónde comenzar desde el archivo;
binlog_do_db: indica qué biblioteca sincronizar (si no está configurada en el archivo de configuración, está vacía)
Esclavo
Configure la dirección IP del servidor maestro en el esclavo
change master to master_host='120.***.***.110',master_port=3306,master_user='zhku',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=156;
Aquí, configure master_host como la dirección IP del host, master_user como el usuario de inicio de sesión, como zhku, y establezca master_password como contraseña, aquí mi contraseña es 123456, master_log_file es el archivo para ver el estado del maestro en el host y master_log_pos es la posición vista en el host.
esclavo abierto
start slave;
Consultar el estado del esclavo
show slave status;
Hay demasiados resultados, así que los mostraré en columnas para que se vean mejor.
Puede ver los dos parámetros más críticos, los dos últimos, Slave_IO_Running y Slave_SQL_Running, mostrar Sí significa que la sincronización maestro-esclavo se logró con éxito, y el primer Slave_IO_State también muestra que está esperando que el host envíe información del evento.
¡Hasta ahora la configuración es exitosa!
problemas encontrados
El primer problema: el inicio falla al reiniciar el servicio en el tercer paso
La razón es que hay un problema con el archivo de configuración y es necesario verificar si el archivo de configuración está configurado correctamente, como la ortografía de las palabras, si existe la base de datos, etc.
El segundo problema: cuando la máquina esclava verifica el estado del esclavo en el quinto paso, Slave_IO_Running muestra Conectando
Motivo: puede continuar viendo las siguientes columnas y encontrar la columna Last_IO_Error
Al ver el informe de errores en el interior se muestra el error informado del complemento de autenticación 'caching_sha2_password': La autenticación requiere una conexión segura.
Ir a consulta de host
Se descubre que el valor del complemento de la cuenta zhku es diferente del de la cuenta raíz. Debe modificar el valor del complemento de la cuenta zhku a mysql_native_password (use la declaración de actualización, que no se describirá aquí). Después de la modificación, Se mostrarán dos SÍ con éxito.
También es posible que el mensaje de error aquí no sea el problema. Esta columna muestra que hay tres problemas de conexión principales, uno es un problema de red, el otro es una contraseña de cuenta incorrecta y el otro es una configuración incorrecta de master_log_file y master_log_pos. . Si hay un problema de red, puede verificar si el firewall está habilitado. El autor está usando el servidor Alibaba Cloud aquí. El grupo de seguridad está habilitado en el servidor y el puerto del firewall está habilitado en Centos, por lo que se puede acceder. Si es una máquina virtual, depende del modo puente, repita.
Abra y cierre en Linux, consulte el enlace de la publicación del blog del firewall:
https://blog.csdn.net/weixin_45930241/article/details/123219592
El tercer problema: cuando la máquina esclava verifica el estado del esclavo en el quinto paso, Slave_IO_Running muestra No
Igual que la segunda pregunta, consulte la siguiente columna de información para ver cuál es el motivo del error.
Se encontró que el nombre del archivo para mostrar era inconsistente
show master status;
Utilice el comando show master status en la máquina esclava para ver
Utilice el comando show master status en el host para ver
La comparación encontró que Archivo y Posición son inconsistentes.
Use el comando stop esclavo para detener el esclavo de la máquina esclava, regrese al paso 5, use el comando cambiar maestro para configurar nuevamente y finalmente inicie el esclavo nuevamente. Si aún falla, verifique si los archivos de configuración de las dos máquinas han sido modificados correctamente.
stop slave;