# 重新加载插件

```sql
RELOAD PLUGINS FROM SONAME 'plugin_library'
```

从给定库重新加载所有插件（UDF、排序器等）。从某种意义上说，重新加载过程是事务性的，确保：
1. 所有插件都成功更新到新版本；
2. 更新是原子的，意味着所有插件同时被替换。该原子性确保使用重新加载库中多个函数的查询不会混用旧版本和新版本。

在 `RELOAD` 期间，插件集保证是一致的；它们要么全部是旧的，要么全部是新的。

重新加载过程也是无缝的，因为某个版本的重新加载插件将始终可用于并发查询，无任何临时中断。这比使用 `DROP` 和 `CREATE` 语句对重加载的改进要好。使用那些语句时，在 `DROP` 和随后的 `CREATE` 之间有一个短暂窗口期，在此期间查询在技术上引用一个未知插件，因此会失败。

如果有任何失败，`RELOAD PLUGINS` 不执行任何操作，保留旧插件，并报告错误。

在 Windows 上，覆盖或删除当前正在使用的 DLL 库可能会有问题。然而，你仍然可以重命名它，将新版本置于旧名称下，然后 `RELOAD` 将起作用。成功重新加载后，你也可以删除重命名的旧库。

```sql
mysql> RELOAD PLUGINS FROM SONAME 'udfexample.dll';
Query OK, 0 rows affected (0.00 sec)
```
<!-- proofread -->

