`
hlidc
  • 浏览: 27639 次
  • 性别: Icon_minigender_2
  • 来自: 南京
文章分类
社区版块
存档分类
最新评论

锁定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;


温情提示:有服务器的问题及服务器租用、托管需求的朋友联系www.163ns.com QQ:6041800 联系人:小郑
分享到:
评论

相关推荐

    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数据库的备份与还原的方法

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

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

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

    Mysql数据库优化详细大全

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

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

    对数据库操作系统的物理文件(如数据文件,日志文件等)的备份,物理备份的方法: 1.冷备份(脱机备份):是在关闭数据库的时候进行的。 2.热备份(联机备份):数据库处于运行状态,依赖于数据库的日志文件。 3....

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

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

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

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

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

    MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL ...

    基于python的wxpy结合mysql数据库做的一个微信娱乐机器人.zip

    以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL...

    xiyoulinux 成员管理系统,基于 Qt 4 + Mysql数据库。.zip

    以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL...

    MYSQL网络数据库PDF学习资源

    MySQL 是完全网络化的跨平台关系型数据库系统,同时是具有客户机/服务器体系结构的分布式数据库管理系统。 它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点,用户可利用许多语言编写访问MySQL ...

    mysql锁定单个表的方法

    主要介绍了mysql锁定单个表的方法 ,需要的朋友可以参考下

    这是一个简单的学生管理系统网站,基于前端+flask框架+mysql数据库.zip

    以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL...

    这是基于SSH三大框架所编写的学生管理系统(课设),MySql数据库.zip

    以下是对MySQL数据库的详细介绍: 核心特性与优势 开源与跨平台 MySQL遵循GPL开源协议,这意味着任何人都可以免费下载、使用和修改其源代码。这种开放性促进了广泛的社区支持和第三方插件、工具的发展。此外,MySQL...

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

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

    mysqldump命令 MySQL数据库备份

    mysqldump命令是MySQL数据库中备份工具,用于将MySQL服务器中的数据库以标准的sql语言的方式导出,并保存到文件中。 语法格式: mysqldump [参数] 常用参数: — -add-drop-table 在每个创建数据库表语句前添加...

Global site tag (gtag.js) - Google Analytics