### 13.3.5 LOCK INSTANCE FOR BACKUP 和 UNLOCK INSTANCE 语句

[](<>)[](<>)

```
LOCK INSTANCE FOR BACKUP

UNLOCK INSTANCE
```

`为备份锁定实例`获取实例级别*备用锁*在线备份期间允许 DML，同时防止可能导致快照不一致的操作。

执行`为备份锁定实例`声明要求[`BACKUP_ADMIN`](privileges-provided.html#priv_backup-admin)特权。这[`BACKUP_ADMIN`](privileges-provided.html#priv_backup-admin)权限会自动授予具有以下权限的用户[`重新加载`](privileges-provided.html#priv_reload)从早期版本执行就地升级到 MySQL 8.0 时的特权。

多个会话可以同时持有一个备份锁。

`解锁实例`释放当前会话持有的备份锁。如果会话终止，会话持有的备份锁也会被释放。

`为备份锁定实例`防止文件被创建、重命名或删除。[`维修台`](repair-table.html) [`截断表`](truncate-table.html),[`优化表`](optimize-table.html)，并且帐户管理报表被阻止。看[第 13.7.1 节，“账户管理声明”](account-management-statements.html).修改的操作`InnoDB`未记录在`InnoDB`重做日志也被阻塞。

`为备份锁定实例`允许仅影响用户创建的临时表的 DDL 操作。实际上，可以在持有备份锁的同时创建、重命名或删除属于用户创建的临时表的文件。也允许创建二进制日志文件。

[`清除二进制日志`](purge-binary-logs.html)不应该发出而[`为备份锁定实例`](lock-instance-for-backup.html)语句对实例有效，因为它通过从服务器中删除文件违反了备份锁的规则。从 MySQL 8.0.28 开始，这是不允许的。

获得的备份锁`为备份锁定实例`独立于事务锁和由[`同花顺 *`tbl_name`* [, *`tbl_name`*] ...带读锁`](flush.html#flush-tables-with-read-lock-with-list), 并且允许以下语句序列：

```
LOCK INSTANCE FOR BACKUP;
FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK;
UNLOCK TABLES;
UNLOCK INSTANCE;
```

```
FLUSH TABLES tbl_name [, tbl_name] ... WITH READ LOCK;
LOCK INSTANCE FOR BACKUP;
UNLOCK INSTANCE;
UNLOCK TABLES;
```

这[`lock_wait_timeout`](server-system-variables.html#sysvar_lock_wait_timeout)设置定义了一个时间量`为备份锁定实例`语句在放弃之前等待获取锁。
