Desarrollo conocimiento-mysql replicación maestro-esclavo

Replicación maestro-esclavo de la base de datos MYSQL

1 Arquitectura de separación de lectura-escritura

1.1 Introducción

Para reducir la presión sobre la base de datos, las dos soluciones más básicas en nuestras mentes son

  • Se construye una capa de almacenamiento en caché entre la aplicación y la base de datos para almacenar los datos de uso común en la caché. Cuando la aplicación lee los datos, primero los obtiene de la caché y luego los obtiene de la base de datos cuando fallan.

  • Implemente dos bases de datos con datos consistentes, una para operaciones de escritura [base de datos primaria] y otra para operaciones de lectura [base de datos esclava] para lograr la separación de lectura y escritura de datos.

Lo que quiero presentar ahora es la solución para la separación de lectura y escritura [replicación maestro-esclavo mysql]

Desarrollo conocimiento-mysql replicación maestro-esclavo

Para ello, debemos cumplir con los siguientes requisitos

  1. Los datos de la base de datos maestro-esclavo deben ser consistentes

    El mecanismo de replicación maestro-esclavo de la base de datos se puede utilizar para lograr la sincronización de datos

  2. La operación de escritura de datos es la base de datos principal

    Utilice fuentes de datos dinámicas en aplicaciones para conectar solicitudes de datos de escritura a la base de datos principal

  3. La operación de lectura de datos es de la base de datos

    Utilice fuentes de datos dinámicas en aplicaciones para conectar solicitudes de datos de lectura a la base de datos principal

2 implementación de replicación maestro-esclavo de mysql

2.1 Descripción

Principio de replicación maestro-esclavo:

Desarrollo conocimiento-mysql replicación maestro-esclavo

  1. Los eventos de actualización (actualización, inserción, eliminación) de la base de datos principal se escriben en binlog
  2. La biblioteca principal crea un hilo de volcado de binlog y envía el contenido del binlog a la biblioteca esclava
  3. Comience desde la biblioteca e inicie una conexión para conectarse a la biblioteca principal
  4. Después de comenzar desde la biblioteca, cree un subproceso de E / S, lea el contenido del binlog de la biblioteca principal y escríbalo en el registro de retransmisión
  5. Después de comenzar desde la biblioteca, cree un subproceso SQL, lea el contenido del registro de retransmisión, ejecute el evento de actualización de lectura desde la posición Exec_Master_Log_Pos y escriba el contenido de actualización en la base de datos del esclavo. Esta replicación maestro-esclavo de MySQL se implementa mediante el contenedor de Docker , Necesita tener cierta capacidad de operación de la ventana acoplable.

El principio de replicación maestro-esclavo anterior se extrajo de [ https://blog.csdn.net/zai_xia/article/details/90379016 ]

2.2 Implementar la base de datos principal

  1. Descargar imagen de percona 5.7.23
docker pull percona:5.7.23
  1. Espejo de vista

    docker images

    Desarrollo conocimiento-mysql replicación maestro-esclavo

  2. Crear volumen de datos de host mysql

    mkdir -p /data/mysql/master //自行定义数据卷存放目录,要与启动docker容器宿主机的数据卷一致
    cd /data/mysql/master //进入数据卷目录
    mkdir conf data //创建两个目录,conf 用于存放mysql的配置文件,data用于存放mysql的数据
    chmod 777 * -R //给目录授权
  3. Crear archivo de configuración msyql

    cd /data/mysql/master/conf //进入mysql存放配置文件目录
    vim my.cnf //创建mysql配置文件

    El contenido del archivo de configuración [my.conf]

    [mysqld] 
    log-bin=mysql-bin #开启二进制日志 
    server-id=1 #服务id,在集群内不允许重复
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' #解决mysql5.7 版本以上出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and错误
  4. Crear contenedor de base de datos principal mysql

    docker create --name percona-master -v /data/mysql/master/data:/var/lib/mysql -v /data/mysql/master/conf:/etc/my.cnf.d -p 3306:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23//创建主数据库容器
    docker ps -a //查看是否创建成功
    

    -v especifica el contenedor de mapeo del host [/ data / mysql / master / data] [/ var / lib / mysql], [/ data / mysql / master / conf] contenedor de mapeo [/etc/my.cnf.d]
    Desarrollo conocimiento-mysql replicación maestro-esclavo

  5. Inicie el contenedor y vea si se inició correctamente

    docker start percona-master //启动mysql-master容器
    docker logs -f percona-master //查看mysql-master容器日志

Desarrollo conocimiento-mysql replicación maestro-esclavo

  1. Utilice el cliente mysql para autorizar la copia de la base de datos

    Utilice Navicat para conectarse a la base de datos principal [Las herramientas las puede seleccionar usted mismo]

]Desarrollo conocimiento-mysql replicación maestro-esclavo

Ejecutar sentencias SQL para crear usuarios y autorización.

   create user 'pango'@'%' identified by 'pango';//创建用户
   grant replication slave on *.* to 'pango'@'%'; //授权复制权限给用户
   flush privileges;//刷新权限

Ver el estado de la base de datos principal

   show master status;

Desarrollo conocimiento-mysql replicación maestro-esclavo

Archivo mysql-bin.000003 y ubicación 741, que son necesarios para sincronizar la base de datos maestra de la base de datos

Ver información de archivos binarios

   show global variables like 'binlog%';

Desarrollo conocimiento-mysql replicación maestro-esclavo

2.3 Implementar la base de datos esclava

Los pasos para crear el contenedor de la base de datos esclava son aproximadamente los mismos que los pasos para crear el contenedor de la base de datos maestra, por lo que no tomaré demasiadas notas aquí.

  1. Cree un directorio de volumen de datos a partir de la base de datos en el host

    mkdir /data/mysql/slave 
    cd /data/mysql/slave 
    mkdir conf data 
    chmod 777 * -R
  2. Crear archivo de configuración

    cd /data/mysql/slave/conf
    vim my.cnf

    Contenido del archivo de configuración [my.cnf]:

    [mysqld] 
    log-bin=mysql-bin #开启二进制日志 
    server-id=2 #服务id,在集群内不允许重复
    sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO ,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' #解决mysql5.7 版本以上出现 [Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and错误
  3. Crear contenedor de base de datos esclavo

    docker create --name percona-slave -v /data/mysql/slave/data:/var/lib/mysql -v /data/mysql/slave/conf:/etc/my.cnf.d -p 3307:3306 -e MYSQL_ROOT_PASSWORD=root percona:5.7.23
  4. Iniciar el contenedor

    docker start percona-slave //启动mysql-slave
    docker logs -f percona-slave //查看mysql-slave
  5. Utilice el cliente para ejecutar la instrucción sql para establecer la configuración de la base de datos principal

    CHANGE MASTER TO master_host='localhost', master_user='pango', master_password='pango', master_port=3306, master_log_file='mysql-bin.000003', master_log_pos=741;
  6. Iniciar la sincronización desde la base de datos

    start slave;
  7. Ver el estado de la base de datos

    show slave status
  8. prueba

    Cree una nueva biblioteca o tabla desde la base de datos maestra y verifique si la misma tabla y biblioteca existen en la base de datos esclava. Si existe, significa que la implementación de la replicación maestro-esclavo es exitosa

Supongo que te gusta

Origin blog.51cto.com/14207809/2544642
Recomendado
Clasificación