2024-11-09  阅读(4)
版权声明:本文为博主付费文章,严禁任何形式的转载和摘抄,维权必究。 本文链接:https://www.skjava.com/mianshi/baodian/detail/1183688426

回答

MySQL 的锁机制用于处理数据库并发控制,确保数据的一致性和完整性。它分为全局锁、表级锁和行级锁。

一、全局锁(Global Lock)

全局锁指对整个数据库加锁,让整个数据库处于只读状态,所有更新操作停止。全局锁通常用于全库备份。

  1. FTWRL
// 全库只支持查询操作,DML、DDL以及事务类语句会被阻塞。
// 正在进行的写操作在执行完毕后被阻塞,不能再进行新的写操作。
// 锁定期间,所有对表的读操作仍然可以进行,但是写操作被阻塞。
FLUSH TABLES WITH READ LOCK;

// 执行备份操作 ……

// 解锁,恢复正常
UNLOCK TABLES;

FTWRL 可以确保全库备份的一致性视图,避免备份过程中数据不一致问题。但是由于它会阻塞所有写操作,可能导致长时间停机,影响正常业务的运行。对于高并发、高写入场景的数据库不适用。

  1. GLOBAL READ_ONLY
// 将整个 MySQL 实例设置为只读模式,阻止所有的写操作。
SET GLOBAL READ_ONLY = ON;

// 执行备份操作 ……

// 恢复正常
SET GLOBAL READ_ONLY = OFF;

SET GLOBAL READ_ONLY 设置 MySQL 为只读模式仍然允许读操作,对业务影响较小。适用于从库的备份操作,避免对主库的影响。

  1. mysqldump 备份命令
mysqldump --all-databases --single-transaction --quick --lock-all-tables > backup.sql

全局锁通常用于全库备份和主从复制初始化,确保数据的一致性和完整性。但是需要注意其对业务的影响,避免长时间锁定。

二、表级锁(Table-Level Lock)