目录
锁的作用:处理并发问题
锁的分类:
全局锁
命令:Flush tables with read lock (FTWRL) ,这个库处理只读状态
全库逻辑备份问题:1、主库备份,业务停摆 2、从库备份,不能执行binlog,导致主从延迟(在不支持事物的引擎下可以使用)
有事务机制的备份:mysqldump single-transaction会先拿到一致性视图
set global readonly=true,1、影响面更大 2、FTWRL如果客户端发生异常断开,mysql会释放这个全局锁,set global会一直让数据库保持readonly状态
表级锁
表锁 lock tables 表名 read/write 与FTWRL类似,可以用unlock tables释放锁。
元数据锁(meta data lock MDL) 读锁不互斥,读写锁之间、写锁之间互斥,给表加字段导致写锁,后面的事物(线程)被阻塞
小技巧:可以在information_schema中的表innodb_trx查看执行的事物
拿不到mdl写锁就先放弃 alter table tbl_name NOWAIT/WAIT add colum
行锁
两阶段锁,事物中的sql语句的锁,等到事物执行完毕才会释放
死锁:事物A等待事物B,事物B在等待事物A
死锁检测:innodb_deadlock_detect
死锁自动释放:innodb_lock_wait_timeout