mecanismo de bloqueo de base de datos mysql y replicación maestro-esclavo

La clasificación de los bloqueos de mysql:
para los tipos de operaciones de datos, se divide en bloqueos de lectura y de escritura;
para la granularidad de las operaciones de datos, se divide en bloqueos de tabla y bloqueos de fila; para
bloqueos de tabla: está sesgado hacia el motor de almacenamiento MyISAM, con una sobrecarga baja, más Bloqueo rápido; sin interbloqueo, gran granularidad de bloqueo, la mayor probabilidad de conflictos de bloqueo y la menor concurrencia;

mostrar tablas abiertas; ver información de la tabla

Después de bloquear y leer el bloqueo, solo puede leer la tabla, no escribir en la tabla;

Bloqueo de mesa

Comando de bloqueo:
agregar bloqueo de lectura: bloquear tabla mylock leer;
nota:
cuando varias ventanas están operando en la misma mesa; el bloqueo ocurrirá hasta que se obtenga el bloqueo para la operación,
si la misma ventana está en una mesa Bloquear, entonces la ventana no puede operar otras tablas;
agregar bloqueo de escritura:
bloquear tabla mylock escribir;
Nota: la
misma ventana, puede consultar y escribir
en la tabla ; diferentes ventanas están leyendo y escribiendo en la tabla Causará bloqueo hasta que se libere el bloqueo;

Desbloquear
comando para desbloquear: desbloquear tabla mylock;

Bloqueo de fila

Prefiere el motor de almacenamiento innodb, alta sobrecarga, bloqueos lentos, interbloqueos, la menor granularidad de bloqueo, la menor probabilidad de conflictos de bloqueo y la mayor concurrencia.
La mayor diferencia entre innodb y myisam es 1. Admite transacciones 2. Admite bloqueos de nivel de fila
La característica ácida de la transacción,
atomicidad: Una transacción es una unidad operativa, y la modificación de sus datos se ejecuta o no se ejecuta.
Persistencia: Una vez completada la transacción, su operación sobre los datos es un
aislamiento permanente : la base de datos proporciona un cierto El mecanismo de aislamiento garantiza que las transacciones se ejecuten en un entorno "independiente" que no se vea afectado por operaciones concurrentes externas. El estado intermedio en el proceso de procesamiento de transacciones es invisible para el exterior. La
coherencia: al inicio y finalización de la transacción, los datos deben ser Mantenga un estado consistente, lo que significa que todas las operaciones relacionadas deben aplicarse a las modificaciones de transacciones para mantener la integridad de los datos.

Conflicto de datos causado por simultaneidad

Primero, introduzca algunos conceptos:
nivel de aislamiento de transacciones y nivel de seguridad:
读未提交 < 读已提交 < 可重复读 < 序列化读

Lectura sucia: modificada pero aún no confirmada, la transacción a lee los datos que han sido modificados pero no confirmados por la transacción b.
Lectura no repetible: cuando los datos que se han leído se vuelven a leer, los datos han cambiado;
lectura fantasma: transacción a Se leen los datos recién agregados de la transacción b, siempre que las dos transacciones ocurran simultáneamente. No cumple con el aislamiento de la transacción;

Ver el nivel de aislamiento de transacciones de la base de datos actual:
mostrar variables como "tx_isolation";

Con respecto a cómo mysql implementa bloqueos a nivel de fila,
mysql implementa bloqueos a nivel de fila a través del protocolo de control de múltiples versiones mvcc.
Comprensión en profundidad de los cuatro niveles de aislamiento y principios de implementación subyacentes de mysql (MVCC y bloqueos)

Después de que el índice falla, el bloqueo de fila cambia al bloqueo de tabla; mysql por defecto se bloquea según el índice. Los bloqueos de fila son bloqueos establecidos en el índice, que se convertirán en bloqueos de tabla después de que el índice falle.

¿Qué es un bloqueo de espacio?

Cuando recuperamos datos usando condiciones de rango en lugar de condiciones iguales y solicitamos bloqueos compartidos o exclusivos, InnoDB bloqueará las entradas de índice de los registros de datos existentes que cumplan con las condiciones; para registros cuyos valores clave están dentro del rango de condiciones pero no existen, Brecha llamada

Innodb también bloqueará este espacio, este mecanismo de bloqueo es el llamado bloqueo de espacio

Daño: debido a que la consulta busca en el rango durante la ejecución, bloqueará todos los valores de clave de índice en todo el rango, incluso si el valor de clave no existe.
El bloqueo de espacios tiene una debilidad fatal, es decir, después de bloquear un rango de valores de clave, incluso algunos valores de clave inexistentes se bloquearán inocentemente, lo que provocará que no se inserten datos en el rango bloqueado cuando se bloquee.
Por ejemplo, nuestra base de datos tiene datos en el rango de id 1-6 pero sin valor id = 5. Cuando agregamos el valor id = 5 en otra ventana, se producirá el bloqueo;
Inserte la descripción de la imagen aquí

Cómo bloquear una fila

Después de la declaración, agregue una consulta para una fila y agregue para actualizar en la parte posterior; esto agregará un bloqueo a esta fila;
en las operaciones posteriores, solo nosotros podemos manipular los datos de esta fila por nosotros mismos, y los demás deben ser bloqueados Espere;

Replicación maestro-esclavo

El principio básico de replicación:

  1. El esclavo leerá el binlog del maestro para sincronizar los datos Estos procesos de registro se denominan eventos de registro binario;
  2. El esclavo copia los eventos del registro binario del maestro en su registro de retransmisión;
  3. esclavo relé rehacer registros de eventos que cambiará la aplicación a su propia base de datos, la replicación de mysql es asincrónica y serializada Inserte la descripción de la imagen aquí
    regla básica de copia
  4. Cada esclavo tiene un solo maestro
  5. Cada maestro solo puede tener un ID de servidor único
  6. Cada maestro puede tener varios esclavos

Configuración común de configuración maestro-esclavo

  • La versión de mysql es consistente y el fondo se ejecuta como un servicio
  • El maestro y el esclavo se configuran en el nodo [mysqld], todo en minúsculas
  • Configure un id único server-id = 1 en el servidor mysql principal
  • Configurar la ubicación de logbin
  • log-bin = D: / mysql-8 / data / mysqlbin
  • log-err = D: / mysql-8 / data / mysqlerr
  • basedir = D: / mysql-8 /
  • tmpdir = D: / mysql-8 /
    configuración de la base de datos esclava:
    apague server-id = 1 y encienda server-id = 2

Autorizar al esclavo a iniciar sesión en el host;
conceder el esclavo de replicación activado . A "zhangsan" @ "de la base de datos de la máquina ip" identifcado por "contraseña" ';
actualizar los permisos: eliminar los preivilegios;
Inserte la descripción de la imagen aquí
configurar el esclavo:
indicar la base de datos del esclavo desde el host Dónde iniciar el
comando de respaldo

change master to master_host = "192.168.14.165",
master_user="zhangsan",
master_password ="123456",
master_log_file="mysqlbin.000035",master_log_pos=341;

Entonces inicia el esclavo

start slave\G;

Inserte la descripción de la imagen aquí
De esta forma, cada vez que el maestro inserta, actualiza y elimina la base de datos, se sincronizará con el esclavo.

Supongo que te gusta

Origin blog.csdn.net/qq_43079376/article/details/106503309
Recomendado
Clasificación