`
xumingrencai
  • 浏览: 1172881 次
文章分类
社区版块
存档分类
最新评论

如何锁定MySQL数据库表

 
阅读更多

如果你同时运行表的检查/修复程序时,你或许不想让MySQL服务器和实用程序同时访问一个表。如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生。如果表正由一个程序写入,同时进行读取的另一个程序

<!--正文-->
<!--判断阅读权限--><!--判断是否已经扣点-->

  如果你同时运行表的检查/修复程序时,你或许不想让MySQL服务器和实用程序同时访问一个表。如果两个程序都向表中写数据显然会造成很大的麻烦,甚至会有意外情况发生。如果表正由一个程序写入,同时进行读取的另一个程序也会产生混乱的结果。本文主要讲述如何对MySQL数据库表进行锁定。

  锁定表的方法

  防止客户机的请求互相干扰或者服务器与维护程序相互干扰的方法主要有多种。如果你关闭数据库,就可以保证服务器和myisamchk和 isamchk之间没有交互作用。但是停止服务器的运行并不是一个好注意,因为这样做会使得没有故障的数据库和表也不可用。本节主要讨论的过程,是避免服务器和myisamchk或isamchk之间的交互作用。实现这种功能的方法是对表进行锁定。

  服务器由两种表的锁定方法:

  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 数据库锁定机制,全揭秘,非常不错的,实践文档

    MySQL数据库:锁定与解锁.pptx

    MySQL提供了LOCK TABLES语句来锁定当前线程的表,语法格式如下: LOCK TABLES tbl_name [AS alias] {READ [LOCAL] | [LOW_PRIORITY] WRITE} 说明: 表锁定支持以下类型的锁定。 READ:读锁定,确保用户可以读取表,...

    MySQL数据库:MySQL存储引擎.pptx

    而MySQL数据库提供了多种存储引擎,用户可以根据不同的需求为数据表选择不同的存储引擎,用户也可以根据自己的需要编写自己的存储引擎,MySQL的核心就是存储引擎。 ;MySQL 5.7支持的存储引擎有:InnoDB、MyISAM、...

    mysql数据库优化的学习心得

    MySQL数据库优化心得:选取最适用的字段属性;使用连接(JOIN)来代替子查询(Sub-Queries);使用联合(UNION)来代替手动创建的临时表;事务;锁定表;外键等。

    mysql数据库my.cnf配置文件

    # 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将...

    Mysql数据库优化详细大全

    29. MYSQL各种锁定 12 30. 给MYSQL更多信息以更好地解决问题的技巧 12 31. 事务的例子 13 32. 使用REPLACE的例子 13 33. 一般技巧 14 34. 使用MYSQL 3.23的好处 14 35. 正在积极开发的重要功能 14

    Mysql数据库锁定机制详细介绍

    前言 为了保证数据的一致完整性,任何一个数据库都存在锁定机制。锁定机制的优劣直接应想到一个数据库系统...MySQL数据库由于其自身架构的特点,存在多种数据存储引擎,每种存储引擎所针对的应用场景特点都不太一样,为

    虚拟主机MySQL数据库的备份与还原的方法

    以前介绍过一个小巧的MYSQL备份PHP脚本程序,不过那适合没有MySQL Shell权限的虚拟主机...其次备份时候要停止MYSQL服务器或者锁定相应的表,否则如果拷贝过程中正好在插入/改写数据库就挂了,不适合需要不间断的服务器

    关于MySQL数据库的存储引擎详细介绍

    MySQL中的数据用各种不同的技术存储在文件(或者内存)中。这些技术中的每一种技术都使用不同的存储机制、索引技巧、锁定水平并且最终提供广泛的不同的功能和能力。通过选择不同的技术,你能够获得额外的速度或者功能...

    MySQL数据库面试题(50道题含答案和思维导图总结)

    3、简述在 MySQL 数据库中 MyISAM 和 InnoDB 的区别 MyISAM: (1)不支持事务,但是每次查询都是原子的; (2)支持表级锁,即每次操作是对整个表加锁; (3)存储表的总行数; (4)一个 MYISAM 表有三个文件:...

    MySql数据库备份与还原!!!

    温备份:数据库锁定表格(不可写入但可读)的状态下进行备份操作。 2)逻辑备份 对数据库逻辑组件(如:表等数据库对象)的备份 1.以sql语句的形式,把库,表结构,表数据保存下来。 数据库的备份策略 完全备份...

    mysql网络数据库指南(中文版) part1

    10.2.3 数据库表的表示法 283 10.2.4 数据库和表命名中的操作系统 约束 284 10.2.5 系统性能的数据目录结构的 含义 285 10.2.6 MySQL的状态文件 286 10.3 重定位数据目录的内容 288 10.3.1 重定位方法 288 ...

    MYSQL网络数据库PDF学习资源

    10.2.3 数据库表的表示法 283 10.2.4 数据库和表命名中的操作系统 约束 284 10.2.5 系统性能的数据目录结构的 含义 285 10.2.6 MySQL的状态文件 286 10.3 重定位数据目录的内容 288 10.3.1 重定位方法 288 10.3.2 ...

    mysqldump命令 MySQL数据库备份

    备份数据库表时锁定数据库表 — -all-databases 备份MySQL服务器上的所有数据库 — -comments 添加注释信息 — -compact 压缩模式,产生更少的输出 — -complete-insert 输出完成的插入语句 — -databases...

    用phpMyadmin创建Mysql数据库及独立数据库帐号的图文教程

    在一个服务器上一般来讲都不止一个站点,更不止一个MySQL(和PHP搭配之最佳组合)数据库。

    Mysql基础教程.chm

    1、MySQL安全性指南 2、MySQL查询优化... 7、MYSQL初学者使用指南 8、MySQL入门学习 9、MYSQL数据库的用户帐号管理基础知识 10、MySQL数据库函数详解 11、图解MySQL数据库的安装和操作

    MySQL性能调优与架构设计.mobi

    同时还分析了 MySQL 数据库中主要存储引擎的锁定机制。架构设计篇则主要以设计一个高可用可扩展的分布式企业级数据库集群环境为目标,分析介绍了通过 MySQL 实现这一目标的多种架构方式。主要包括可扩展和高可用两...

    Mysql数据库管理系统优化方案.doc

    Mysql数据库管理系统优化方案 首先,为了使一个系统更快,最重要的部分就是基础设计,不过有些东西是现有情况下 无法逾越的,比如说系统常见的瓶颈. 我所能想到的: 1:磁盘寻道能力,以高速硬盘(7200转/秒),理论上每秒寻道...

    MySQL性能调优与架构设计

    包括Schema 设计,Query 语句的性能优化, MySQL Server 中SQL层和存储引擎层的优化思路,以及MySQL 数据库锁定机制的实现。, 架构篇则以设计一个高可用可扩展的企业级分布式数据库集群环境为目标,分析了多种通过 ...

    MYSQL

    9.4 MySQL数据库表类型 10 从 MySQL 得到最大的性能 10.1 优化概述 10.2 系统/编译时和启动参数的调节 10.2.1 编译和链接如何影响 MySQL 的速度 10.2.2 磁盘问题 10.2.2.1 为数据库和...

Global site tag (gtag.js) - Google Analytics