仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 636|回复: 8
打印 上一主题 下一主题

[学习教程] MYSQL教程之怎样对MySQL数据库表举行锁定

[复制链接]
灵魂腐蚀 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-16 20:12:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
关于这个理由我把它放在最后一位。在很多业界专家中有一个相当一致的观点:MySQL不能很好的扩展。关于这点可能有很大的分歧,争论的焦点主要集中于水平可扩展性和垂直可扩展性上。MySQL则更倾向于垂直可扩展性。假如你同时运转表的反省/修复程序时,你也许不想让MySQL服务器和有用程序同时会见一个表。假如两个程序都向表中写数据明显会形成很年夜的贫苦,乃至会成心外情形产生。假如表正由一个程序写进,同时举行读取的另外一个程序也会发生凌乱的了局。本文次要报告怎样对MySQL数据库表举行锁定。
锁定表的办法
避免客户机的哀求相互搅扰大概服务器与保护程序互相搅扰的办法次要有多种。假如你封闭数据库,就能够包管服务器和myisamchk和isamchk之间没有交互感化。可是中断服务器的运转并非一个好注重,由于如许做会使得没有妨碍的数据库和表也不成用。本节次要会商的历程,是制止服务器和myisamchk或isamchk之间的交互感化。完成这类功效的办法是对表举行锁定。
服务器由两种表的锁定办法:
1.外部锁定
外部锁定能够制止客户机的哀求互相搅扰――比方,制止客户机的SELECT查询被另外一个客户机的UPDATE查询所搅扰。也能够使用外部锁定机制避免服务器在使用myisamchk或isamchk反省或修复表时对表的会见。
语法:
锁定表:LOCKTABLEStbl_name{READ|WRITE},[tbl_name{READ|WRITE},…]
解锁表:UNLOCKTABLES
LOCKTABLES为以后线程锁定表。UNLOCKTABLES开释被以后线程持有的任何锁。当线程收回别的一个LOCKTABLES时,或当服务器的毗连被封闭时,以后线程锁定的一切表主动被解锁。
假如一个线程取得在一个表上的一个READ锁,该线程(和一切其他线程)只能从表中读。假如一个线程取得一个表上的一个WRITE锁,那末只要持锁的线程READ或WRITE表,其他线程被制止。
每一个线程守候(没有超时)直到它取得它哀求的一切锁。
WRITE锁一般比READ锁有更高的优先级,以确保变动尽快被处置。这意味着,假如一个线程取得READ锁,而且然后别的一个线程哀求一个WRITE锁,随后的READ锁哀求将守候直到WRITE线程失掉了锁而且开释了它。
明显关于反省,你只必要取得读锁。再者钟情跨下,只能读取表,但不克不及修正它,因而他也同意别的客户机读取表。关于修复,你必需取得些以是避免任何客户机在你对表举行操纵时修正它。
2.内部锁定
服务器还可使用内部锁定(文件级锁)来避免别的程序在服务器利用表时修正文件。一般,在表的反省操纵中服务器将内部锁定与myisamchk或isamchk作合利用。可是,内部锁定在某些体系中是禁用的,由于他不克不及牢靠的举行事情。对运转myisamchk或isamchk所选择的历程取决于服务器是不是能利用内部锁定。假如不利用,则?利用外部锁定协定。
假如服务器用--skip-locking选项运转,则内部锁定禁用。该选项在某些体系中是缺省的,如linux。能够经由过程运转mysqladminvariables命令断定服务器是不是可以利用内部锁定。反省skip_locking变量的值并按以下办法举行:
◆假如skip_locking为off,则内部锁定无效您能够持续并运转人和一个有用程序来反省表。服务器和有用程序将互助对表举行会见。可是,运转任何一个有用程序之前,应当利用mysqladminflush-tables。为了修复表,应当利用表的修复锁定协定。
◆假如skip_locaking为on,则禁用内部锁定,以是在myisamchk或isamchk反省修复暗示服务器其实不晓得,最好封闭服务器。假如保持是服务器坚持开启形态,月确保在您利用此暗示没有客户机来会见它。必需利用卡党的锁定协定告知服务器是该表不被其他客户机会见。
反省表的锁定协定
本节只先容假如利用表的外部锁定。关于反省表的锁定协定,此历程只针对表的反省,不针对表的修复。
1.挪用mysql公布以下语句:

$mysqlCurootCpdb_namemysql>LOCKTABLEtbl_nameREAD;mysql>FLUSHTABLES;

该锁避免别的客户机在反省时写进该表和修正该表。FLUSH语句招致服务器封闭表的文件,它将革新仍在告知缓存中的任作甚写进的改动。
2.实行反省历程

$myisamchktbl_name$isamchktbl_name

3.开释表锁

mysql>UNLOCKTABLES;

假如myisamchk或isamchk指动身现该表的成绩,将必要实行表的修复。
修复表的锁定协定
这里只先容假如利用表的外部锁定。修复表的锁定历程相似于反省表的锁定历程,但有两个区分。第一,你必需失掉写锁而非读锁。因为你必要修正表,因而基本不同意客户机对其举行会见。第二,必需在实行修复以后公布FLUSHTABLE语句,由于myisamchk和isamchk创建的新的索引文件,除非再次革新改表的高速缓存,不然服务器不会注重到这个改动。本例一样合适优化表的历程。
1.挪用mysql公布以下语句:

$mysqlCurootCpdb_namemysql>LOCKTABLEtbl_nameWRITE;mysql>FLUSHTABLES;

2.做数据表的拷贝,然后运转myisamchk和isamchk:

$cptbl_name.*/some/other/dir$myisamchk--recovertbl_name$isamchk--recovertbl_name

--recover选项只是针对安装而设置的。这些特别选项的选择将取决与你实行修复的范例。
3.再次革新高速缓存,并开释表锁:

mysql>FLUSHTABLES;mysql>UNLOCKTABLES;
不可否认,MySQL也是一个很好的关系型数据库,或许在技术上它与其他领先的关系数据库相差并不大,或不具有劣势。但是,对于一些企业环境来说,MySQL显然不具有优势。
山那边是海 该用户已被删除
沙发
发表于 2015-1-18 18:40:04 | 只看该作者
SP4是一个累积性的ServicePack,包含自以前的ServicePack发布以来所有的修补程序(包括MS03-031安全公告)。
柔情似水 该用户已被删除
板凳
发表于 2015-1-26 14:40:56 | 只看该作者
这一点很好的加强了profiler的功能。但是提到profiler提醒大家注意一点。windows2003要安装sp1补丁才能启动profiler。否则点击没有反应。
愤怒的大鸟 该用户已被删除
地板
发表于 2015-2-4 19:29:27 | 只看该作者
连做梦都在想页面结构是怎么样的,绝非虚言
若相依 该用户已被删除
5#
发表于 2015-2-10 06:12:06 | 只看该作者
代替了原来VB式的错误判断。比Oracle高级不少。
简单生活 该用户已被删除
6#
发表于 2015-2-28 23:21:59 | 只看该作者
数据库物理框架没有变动undo和redo都放在数据库得transaction中,个人感觉是个败笔。如果说我们在设计数据库的时候考虑分多个数据库,可能能在一定程度上避免I/O效率问题。
飘灵儿 该用户已被删除
7#
发表于 2015-3-10 10:48:53 | 只看该作者
如果是将来做数据库的开发设计,就应该详细学习T-SQL的各种细节,包括T-SQL的程序设计、存储过程、触发器以及具体使用某个开发语言来访问数据库。
活着的死人 该用户已被删除
8#
发表于 2015-3-17 06:45:45 | 只看该作者
现在是在考虑:如果写到服务器端,我一下搞他个10个存储过程导过去,那久之服务器不就成垃圾箱了吗?即便优化了我的中间层.
老尸 该用户已被删除
9#
发表于 2015-3-24 00:50:47 | 只看该作者
你觉得我的非分区索引无法对起子分区,你可以提醒我一下呀!没有任何的提醒,直接就变成了非分区表。不知道这算不算一个bug。大家也可以试试。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-23 01:10

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表