MySQL数据库表举行锁定详解[MySQL防范]
本文“MySQL数据库表举行锁定详解[MySQL防范]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
1.内部锁定
内部锁定可以避免客户机的恳求彼此干扰——比方,避免客户机的SELECT查询被另一个客户机的UPDATE查询所干扰.也可以操纵内部锁定机制避免服务器在操纵myisamchk或isamchk查抄或修复表时对表的拜候.
语法:
锁定表:LOCK TABLES tbl_name {READ | WRITE},[ tbl_name {READ | WRITE},…]
解锁表:UNLOCK TABLES
LOCK TABLES为当前线程锁定表.UNLOCK TABLES释放被当前线程持有的任何锁.当线程发出别的一个LOCK TABLES时,或当服务器的衔接被关闭时,当前线程锁定的全部表自动被解锁.
假如一个线程得到在一个表上的一个READ锁,该线程(和全部其他线程)只能从表中读.假如一个线程得到一个表上的一个WRITE锁,那么只有持锁的线程READ或WRITE表,其他线程被禁止.
每个线程等候(没有超时)直到它得到它恳求的全部锁.
WRITE锁普通比READ锁有更高的优先级,以确保更改尽快被处理.这意味着,假如一个线程得到READ锁,并且然后别的一个线程恳求一个WRITE锁, 随后的READ锁恳求将等候直到WRITE线程得到了锁并且释放了它.
明显关于查抄,你只需求得到读锁.再者钟情跨下,只能读取表,但不能改正它,因此他也答应别的客户机读取表.关于修复,你必须得到些所以避免任何客户机在你对表举行操作时改正它.
2.外部锁定
服务器还可以利用外部锁定(文件级锁)来避免别的程序在服务器利用表时改正文件.普通,在表的查抄操作中服务器将外部锁定与myisamchk或isamchk作合利用.但是,外部锁定在某些系统中是禁用的,因为他不能坚固的举行工作.对运行myisamchk或isamchk所挑选的历程取决于服务器能否能利用外部锁定.假如不利用,则必修利用内部锁定协议.
假如服务器用--skip-locking选项运行,则外部锁定禁用.该选项在某些系统中是缺省的,如Linux.可以通过运行mysqladmin variables号令肯定服务器能否可以利用外部锁定.查抄skip_locking变量的值并按以下办法举行:
◆ 假如skip_locking为off,则外部锁定有效您可以持续并运行人和一个实用程序来查抄表.服务器和实用程序将合作对表举行拜候.但是,运行任何一个实用程序之前,应当利用mysqladmin flush-tables.为了修复表,应当利用表的修复锁定协议.
◆ 假如skip_locaking为on,则禁用外部锁定,所以在myisamchk或isamchk查抄修复表示服务器并不知道,最好关闭服务器.假如保持是服务器保持开启状况,月确保在您利用此表示没有客户机来拜候它.必须利用卡党的锁定协议奉告服务器是该表不被其他客户机拜候.
查抄表的锁定协议
本节只介绍假如利用表的内部锁定.关于查抄表的锁定协议,此历程只针对表的查抄,不针对表的修复.
1.调用mysql公布下列语句:
$mysql –u root –p db_namemysql>LOCK TABLE tbl_name READ;mysql>FLUSH TABLES;
该锁避免别的客户机在查抄时写入该表和改正该表.FLUSH语句招致服务器关闭表的文件,它将革新仍在奉告缓存中的任作甚写入的改变.
2.履行查抄历程
$myisamchk tbl_name$ isamchk tbl_name
3.释放表锁
mysql>UNLOCK TABLES;
假如myisamchk或isamchk指动身现该表的问题,将需求履行表的修复.
修复表的锁定协议
这里只介绍假如利用表的内部锁定.修复表的锁定历程近似于查抄表的锁定历程,但有两个辨别.第一,你必须得到写锁而非读锁.由于你需求改正表,因此根本不答应客户机对其举行拜候.第二,必须在履行修复之后公布FLUSH TABLE语句,因为myisamchk和isamchk成立的新的索引文件,除非再次革新改表的高速缓存,不然服务器不会注意到这个改变.本例一样合适优化表的历程.
1.调用mysql公布下列语句:
$mysql –u root –p db_namemysql>LOCK TABLE tbl_name WRITE;mysql>FLUSH TABLES;
2.做数据表的拷贝,然后运行myisamchk和isamchk:
$cp tbl_name.* /some/other/dir$myisamchk --recover tbl_name$ isamchk --recover tbl_name
--recover选项只是针对安装而设置的.这些特别选项的挑选将取决与你履行修复的范例.
3.再次革新高速缓存,并释放表锁:
mysql>FLUSH TABLES;mysql>UNLOCK TABLES;
以上是“MySQL数据库表举行锁定详解[MySQL防范]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |