10bet网址
MySQL 8.0参考手册
相关的文档10bet官方网站 本手册下载
PDF (Ltr)- 42.0 mb
PDF (A4)- 42.1 mb
手册页(TGZ)- 266.5 kb
手册页(邮政编码)- 376.2 kb
信息(Gzip)- 4.0 mb
信息(邮政编码)- 4.0 mb
本手册节选

8.11.5外部锁

外部锁定是使用文件系统锁定来管理争用MyISAM数据库表由多个进程。当单个进程(如MySQL服务器)不能被假定为需要访问表的唯一进程时,就会使用外部锁定。下面是一些例子:

  • 如果运行多个使用相同数据库目录的服务器(不推荐),则每个服务器必须启用外部锁定。

  • 如果你使用myisamchk执行表维护操作MyISAM对于表,您必须确保服务器没有运行,或者服务器启用了外部锁定,以便根据需要锁定表文件进行协调myisamchk访问表格。对于of的使用也是如此myisampack包装MyISAM表。

    如果服务器运行时启用了外部锁定,则可以使用myisamchk随时进行读取操作等检查表。在这种情况下,如果服务器试图更新一个表myisamchk正在使用,服务器等待吗myisamchk在它继续之前结束。

    如果你使用myisamchk对于诸如修复或优化表之类的写操作,或者如果使用myisampack整理桌子,你必须始终确保mysqld服务器没有使用该表。如果你不停下来mysqld,至少做一个mysqladmin刷新表在你跑之前myisamchk.你的表可能会损坏如果服务器和myisamchk同时访问表。

在外部锁定生效的情况下,每个需要访问表的进程在继续访问表之前都需要获得表文件的文件系统锁。如果无法获得所有必要的锁,则会阻止进程访问表,直到获得锁为止(在当前持有锁的进程释放锁之后)。

外部锁定会影响服务器性能,因为服务器有时必须等待其他进程才能访问表。

如果您运行单个服务器来访问给定的数据目录(这是通常的情况),如果没有其他程序,例如myisamchk需要在服务器运行时修改表。如果你只表与其他程序,外部锁定是不需要的,尽管myisamchk可能报告警告,如果服务器更改表myisamchk阅读它们。

当外部锁定禁用时,使用myisamchk时,您必须停止服务器myisamchk执行或在运行前锁定和刷新表myisamchk.要避免此要求,请使用检查表而且修理表对帐单进行检查和修理MyISAM表。

mysqld的值控制外部锁定skip_external_locking系统变量。当启用此变量时,将禁用外部锁定,反之亦然。默认情况下禁用外部锁定。

控件可以在服务器启动时控制外部锁定的使用——外部锁——skip-external-locking选择。

如果使用外部锁定选项来启用更新MyISAM表从许多MySQL进程,不启动服务器与delay_key_write系统变量设置为所有或使用DELAY_KEY_WRITE = 1表选项用于任何共享表。否则,就会发生索引损坏。

满足这个条件的最简单的方法是总是使用——外部锁在一起——delay-key-write =了.(默认情况下不会这样做,因为在许多设置中,混合使用上述选项是很有用的。)