Sincronización maestro-esclavo de la base de datos mysql, realizar la separación de lectura-escritura, sincronización maestro-esclavo de la base de datos mysql, realizar la separación de lectura-escritura

La sincronización maestro-esclavo de la base de datos mysql se da cuenta de la separación de lectura y escritura.

Prefacio

1 Instale mysql 5.7 en dos sistemas centos 7 respectivamente

2 configuración del servidor maestro

2.1 Modificación del archivo de configuración my.cnf

2.2 Crear usuarios y permisos desde el servidor

2.3 Reiniciar el servicio mysql

2.4 Ver el estado del servidor principal

3 Configuración esclava

3.1 Modificación del archivo de configuración my.cnf

3.2 reiniciar el servicio mysql

3.3 Conectarse al servidor maestro

3.4 Iniciar la sincronización de datos del esclavo

3.5 Ver información del esclavo

4 prueba

5 Resolver errores

6 Resumen


Prefacio

Para suavizar la gran cantidad de visitas simultáneas, los sitios web a gran escala están lejos de ser suficientes, excepto para lograr un equilibrio de carga distribuido en el sitio web. Cuando se trata de la capa de negocios de datos y la capa de acceso a datos, si todavía es una estructura de datos tradicional, o simplemente depende de un solo servidor para manejar tantas operaciones de conexión de base de datos, la base de datos inevitablemente colapsará, especialmente si se pierden los datos. las consecuencias serán aún más desastrosas. En este momento, consideraremos cómo reducir las conexiones de la base de datos, ingresemos a nuestro tema hoy.

Utilice la base de datos maestro-esclavo para realizar la separación de lectura y escritura, compartiendo así la presión de la base de datos maestra. Implemente mysql en múltiples servidores, considere uno de ellos como la base de datos maestra y los otros como bases de datos esclavas para lograr la sincronización maestro-esclavo. La base de datos maestra es responsable de las operaciones de escritura activas, mientras que la base de datos esclava solo es responsable de las operaciones de lectura activas (las bases de datos esclavas esclavas seguirán escribiendo de forma pasiva las operaciones para mantener la consistencia de los datos), lo que puede evitar en gran medida la pérdida de datos.También puede reducir las conexiones a la base de datos. y reducir la carga en la base de datos principal.

Veamos la siguiente imagen:

 

En el modelo anterior, Mysql-A es el servidor maestro, o maestro, y Mysql-B es el servidor esclavo o esclavo.

Los eventos de la base de datos en Mysql-A (como la modificación de la declaración de operación de SQL de la base de datos) se almacenarán en el sistema de registro A y se enviarán a Mysql-B a través de la red en el puerto correspondiente (por defecto 3306). Una vez que Mysql-B lo recibe, lo escribe en el sistema de registro local B y luego completa los eventos de la base de datos en la base de datos Mysql-B uno por uno.

El sistema de registro A es el registro binario en el tipo de registro MYSQL, que se utiliza específicamente para guardar todas las acciones que modifican la tabla de la base de datos, es decir, el registro bin. Tenga en cuenta que MYSQL escribirá en el registro binario después de ejecutar la instrucción y antes de liberar el bloqueo. para garantizar la seguridad de la transacción.

El sistema de registro B no es un registro binario. Debido a que se copia del registro binario de MYSQL-A, no se genera por sus propios cambios en la base de datos. Se siente un poco como un relé. Se llama registro de retransmisión o registro de retransmisión.

A través del mecanismo anterior, se puede asegurar que los datos de la base de datos de Mysql-A y Mysql-B sean consistentes, pero debe haber un retraso en el tiempo, es decir, los datos de Mysql-B están retrasados. Por lo tanto, habrá tal problema. Las operaciones de la base de datos Mysql-A se pueden ejecutar simultáneamente, pero Mysql-B solo puede leer y ejecutar una por una desde el registro de retransmisión. Si Mysql-A escribe con frecuencia, es posible que Mysql-B no pueda seguir el ritmo.

Hay varias formas de replicación síncrona maestro-esclavo:

(1) Replicación síncrona, los cambios de maestro deben esperar a que esclavo-1, esclavo-2, ..., esclavo-n se completen antes de regresar.

(2) Replicación asincrónica, el maestro solo necesita completar sus propias operaciones de base de datos. En cuanto a si los esclavos recibieron el registro binario y completaron la operación, no importa. La configuración predeterminada de MYSQL.

(3) Replicación semisincrónica, el maestro solo garantiza que una operación en esclavos sea exitosa y luego regresa, independientemente de otros esclavos. Google introdujo esta función para MYSQL.

Este artículo habla de la configuración de sincronización maestro-esclavo de la base de datos mysql5.7 implementada en el sistema centos 7 para lograr la separación de lectura y escritura.

 

1 Instale mysql 5.7 en dos sistemas centos 7 respectivamente

Los pasos de instalación específicos se pueden encontrar en este enlace, https://blog.csdn.net/qq_15092079/article/details/81629238 .

Las direcciones IP de los dos servidores de este artículo son el servidor maestro (192.168.17.130) y el servidor esclavo (192.168.17.132).

Cree una base de datos de prueba en estos dos servidores respectivamente para realizar pruebas posteriores.

 

2 configuración del servidor maestro

2.1 Modificación del archivo de configuración my.cnf

#根据上一篇文章,编辑my.cnf文件
[root@localhost mysql]# vim /etc/my.cnf
 
#在[mysqld]中添加:
server-id=1
log_bin=master-bin
log_bin_index=master-bin.index
binlog_do_db=test
#备注:
#server-id 服务器唯一标识。
#log_bin 启动MySQL二进制日志,即数据同步语句,从数据库会一条一条的执行这些语句。
#binlog_do_db 指定记录二进制日志的数据库,即需要复制的数据库名,如果复制多个数据库,重复设置这个选项即可。
#binlog_ignore_db 指定不记录二进制日志的数据库,即不需要复制的数据库名,如果有多个数据库,重复设置这个选项即可。
#其中需要注意的是,binlog_do_db和binlog_ignore_db为互斥选项,一般只需要一个即可。

2.2 Crear usuarios y permisos desde el servidor

#进入mysql数据库
[root@localhost mysql]# mysql -uroot -p
Enter password:
 
#创建从数据库的masterbackup用户和权限
mysql> grant replication slave on *.* to masterbackup@'192.168.17.%' identified by '123456';
#备注
#192.168.17.%通配符,表示0-255的IP都可访问主服务器,正式环境请配置指定从服务器IP
#若将 192.168.17.% 改为 %,则任何ip均可作为其从数据库来访问主服务器
 
#退出mysql
mysql> exit;
[root@localhost mysql]# service mysql restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS! 

2.4 Ver el estado del servidor principal

#进入mysql数据库
[root@localhost mysql]# mysql -uroot -p
Enter password:
 
#查看主服务器状态
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000001 |      154 | test         |                  |                   |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

3 Configuración esclava

3.1 Modificación del archivo de configuración my.cnf

#根据上一篇文章,编辑my.cnf文件
[root@localhost mysql]# vim /etc/my.cnf
 
#在[mysqld]中添加:
server-id=2
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
#replicate-do-db=test
#备注:
#server-id 服务器唯一标识,如果有多个从服务器,每个服务器的server-id不能重复,跟IP一样是唯一标识,如果你没设置server-id或者设置为0,则从服务器不会连接到主服务器。
#relay-log 启动MySQL二进制日志,可以用来做数据备份和崩溃恢复,或主服务器挂掉了,将此从服务器作为其他从服务器的主服务器。
#replicate-do-db 指定同步的数据库,如果复制多个数据库,重复设置这个选项即可。若在master端不指定binlog-do-db,则在slave端可用replication-do-db来过滤。
#replicate-ignore-db 不需要同步的数据库,如果有多个数据库,重复设置这个选项即可。
#其中需要注意的是,replicate-do-db和replicate-ignore-db为互斥选项,一般只需要一个即可。
[root@localhost mysql]# service mysql restart
Shutting down MySQL.... SUCCESS! 
Starting MySQL. SUCCESS! 

3.3 Conectarse al servidor maestro

#进入mysql数据库
[root@localhost mysql]# mysql -uroot -p
Enter password:
 
#连接master主服务器
mysql> change master to master_host='192.168.17.130',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=154;
#备注:
#master_host对应主服务器的IP地址。
#master_port对应主服务器的端口。
#master_log_file对应show master status显示的File列:master-bin.000001。
#master_log_pos对应show master status显示的Position列:154。

3.4 Iniciar la sincronización de datos del esclavo

#启动slave数据同步
mysql> start slave;
#停止slave数据同步(若有需要)
mysql> stop slave;

3.5 Ver información del esclavo

mysql> show slave status\G;

Slave_IO_Running y Slave_SQL_Running son ambos sí, significa que la sincronización es exitosa.

 

4 prueba

(1) Inicie sesión en mysql en el servidor principal, ingrese a la base de datos de prueba, cree una tabla de prueba e inserte un dato

Consejo: Aquí es mejor utilizar herramientas de administración de bases de datos (como nacicat) para operar.

create table hi_tb(id int(3),name char(10));
insert into hi_tb values(001,'bobu');

(2) Inicie sesión en mysql en el servidor esclavo e ingrese a la base de datos de prueba

Encontrará que en la base de datos, también aparece la tabla hi_tb, y hay 1 bobu de datos en la tabla, lo que demuestra que la sincronización de datos es exitosa.

Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí

5 Resolver errores

Si en el proceso de sincronización maestro-esclavo, una de las declaraciones no se sincroniza y se informa un error, las declaraciones posteriores no deben sincronizarse correctamente. Por ejemplo, la base de datos maestra tiene una pieza de datos, pero la base de datos esclava no tiene esta pieza de datos. Sin embargo, si la operación de eliminar esta pieza de datos se ejecuta en la base de datos maestra, entonces la base de datos esclava definitivamente no será puede eliminarlo sin tal dato, y se informará un error. En este momento, la sincronización de datos de la base de datos falla, por lo que la siguiente instrucción de sincronización no puede continuar ejecutándose.

Aquí se proporcionan dos soluciones:

(1) En la base de datos esclava, use SET global sql_slave_skip_counter para omitir eventos, omita este error y luego ejecute desde el siguiente grupo de eventos.

#在从数据库上操作
mysql > stop slave;
mysql > set global sql_slave_skip_counter=1;
mysql > start slave;

(2) En la base de datos esclava, vuelva a conectarse a la base de datos maestra. Este tipo de operación omitirá directamente las declaraciones de sincronización en el medio, lo que puede causar que algunos datos no se sincronicen en el pasado, pero este tipo de operación también es el último truco. Lo mejor es hacer que la estructura de datos y los datos de la base de datos esclava y la base de datos maestra sean consistentes, y luego reanudar la operación de sincronización maestro-esclavo.

#在从数据库上操作
mysql > stop slave;
mysql> change master to master_host='192.168.17.130',master_port=3306,master_user='masterbackup',master_password='123456',master_log_file='master-bin.000001',master_log_pos=2050;
mysql > start slave;
 
#备注
#master_log_file和master_log_pos可能会不同,需要在主数据库中show master status来查看

6 Resumen

En este punto, se completa la sincronización maestro-esclavo de la base de datos mysql.En cuanto a la separación de lectura y escritura, podemos implementarla a través del programa.Aquí hay una breve explicación de la idea de realización.

Podemos crear un usuario de base de datos en el servidor principal (por seguridad, de acuerdo a las necesidades de los permisos correspondientes) utilizado principalmente para operaciones de escritura, en el programa a través de este usuario para conectarse a la base de datos principal solo se utiliza para operaciones de escritura y no de lectura operaciones.

Crear un usuario de base de datos en el servidor esclavo (por seguridad, solo el permiso para leer y seleccionar) se usa principalmente para operaciones de lectura, y puede conectarse a la base de datos esclava a través de este usuario en el programa.

Por supuesto, también puede encontrar un componente para completar el proxy de MYSQL e implementar el enrutamiento de sentencias SQL, para que no tengamos que prestar atención a qué base de datos está escrita y qué base de datos se lee en el programa.

Enlace original: https://blog.csdn.net/qq_15092079/article/details/81672920

 

Supongo que te gusta

Origin blog.csdn.net/weixin_43614067/article/details/108347664
Recomendado
Clasificación