mysql外部锁定_mysql8 参考手册--外部锁定

外部锁定是使用文件系统锁定来管理MyISAM多个进程对数据库表的争用。在不能将单个进程(例如MySQL服务器)假定为唯一需要访问表的进程的情况下,可以使用外部锁定。这里有些例子:

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

2、如果使用myisamchk对表执行表维护操作 MyISAM,则必须确保服务器未运行,或者服务器已启用外部锁定,以便根据需要锁定表文件以与myisamchk协作以 访问表。使用myisampack打包 MyISAM表也是如此 。

如果服务器在启用了外部锁定的情况下运行,则可以随时使用myisamchk进行诸如检查表之类的读取操作。在这种情况下,如果服务器尝试更新myisamchk正在使用的表 ,则服务器将等待myisamchk完成后才能继续。

如果使用myisamchk进行诸如修复或优化表之类的写操作,或者使用 myisampack打包表,则 必须始终确保 mysqld服务器未使用该表。如果不停止mysqld,至少 在运行myisamchk之前先执行 mysqladmin flush-tables。如果服务器和myisamchk同时访问表,则 表可能已损坏。

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

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

如果您运行单个服务器来访问给定的数据目录(这是通常的情况),并且在服务器运行时不需要其他程序(例如myisamchk)来修改表,则不需要外部锁定。如果仅 使用其他程序读取表,则不需要外部锁定,尽管 如果myisamchk在读取表时服务器更改表,myisamchk可能会报告警告 。

在禁用外部锁定的情况下,要使用 myisamchk,必须在myisamchk执行时停止服务器,或者在运行myisamchk之前锁定并刷新表。为避免此要求,请使用CHECK TABLEand REPAIR TABLE 语句检查和修复 MyISAM表。

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

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

如果确实使用外部锁定选项来启用MyISAM来自许多MySQL进程的表更新 ,则不要在delay_key_write系统变量设置为的情况下启动服务器,也不要 对任何共享表ALL使用 DELAY_KEY_WRITE=1表选项。否则,可能会发生索引损坏。

满足此条件的最简单方法是始终 --external-locking与一起使用 --delay-key-write=OFF。(默认情况下不会执行此操作,因为在许多设置中,混合使用上述选项会很有用。)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值