MySQL Enterprise Firewall 安装是一种一次性操作,它安装第 6.4.7.1 节,“MySQL Enterprise Firewall的元素”中描述的元素。可以使用图形界面或手动执行安装:
在 Windows 上,MySQL Installer 包含一个为您启用 MySQL Enterprise Firewall 的选项。
MySQL Workbench 6.3.4 或更高版本可以安装 MySQL Enterprise Firewall,启用或禁用已安装的防火墙,或者卸载防火墙。
手动 MySQL Enterprise Firewall 安装涉及运行位于
share
MySQL 安装目录中的脚本。
在按照其说明进行操作之前,请阅读整个部分。该过程的某些部分因您的环境而异。
如果安装,MySQL Enterprise Firewall 会涉及一些最小的开销,即使在禁用时也是如此。为避免这种开销,请不要安装防火墙,除非您打算使用它。
有关使用说明,请参阅第 6.4.7.3 节,“使用 MySQL 企业防火墙”。有关参考信息,请参阅 第 6.4.7.4 节,“MySQL 企业防火墙参考”。
如果已经从旧版本的 MySQL 安装了 MySQL Enterprise Firewall,请使用本节后面给出的说明将其卸载,然后在安装当前版本之前重新启动服务器。在这种情况下,还需要重新注册您的配置。
在 Windows 上,您可以使用 MySQL Installer 安装 MySQL Enterprise Firewall, 如图 6.2 “Windows 上的 MySQL Enterprise Firewall 安装”所示。选中启用 MySQL 企业防火墙复选框。(Open Firewall port for network access有不同的用途。它指的是 Windows 防火墙,控制 Windows 是否阻止 MySQL 服务器侦听客户端连接的 TCP/IP 端口。)
如果在服务器配置步骤中选择了 MySQL Enterprise Firewall,则使用 MySQL Installer 安装的 MySQL 8.0.19 会阻止服务器启动。如果服务器启动操作失败,单击“取消”结束配置过程并返回仪表板。您必须卸载服务器。
解决方法是在未选择 MySQL Enterprise Firewall 的情况下运行 MySQL Installer。(也就是说,不要选中启用 MySQL Enterprise Firewall复选框。)然后使用本节后面的手动安装说明安装 MySQL Enterprise Firewall。此问题已在 MySQL 8.0.20 中得到纠正。
要使用 MySQL Workbench 6.3.4 或更高版本安装 MySQL Enterprise Firewall,请参阅 MySQL Enterprise Firewall Interface。
要手动安装 MySQL Enterprise Firewall,请查看
share
MySQL 安装目录并选择适合您平台的脚本。可用脚本的不同之处在于用于引用插件库文件的后缀:
win_install_firewall.sql
:选择此脚本用于 Windows 系统.dll
用作文件名后缀。linux_install_firewall.sql
: 选择此脚本用于 Linux 和类似的系统.so
用作文件名后缀。
安装脚本在默认数据库中创建存储过程,因此选择要使用的数据库。然后按如下方式运行脚本,在命令行上命名所选的数据库。这里的示例使用mysql
系统数据库和 Linux 安装脚本。为您的系统进行适当的替换。
$> mysql -u root -p mysql < linux_install_firewall.sql
Enter password: (enter root password here)
要在源/副本复制、组复制或 InnoDB 集群的上下文中使用 MySQL Enterprise Firewall,您必须在源节点上运行安装脚本之前准备好副本节点。这是必要的,因为
INSTALL PLUGIN
脚本中的语句不会被复制。
在每个副本节点上,
INSTALL PLUGIN
从安装脚本中提取语句并手动执行它们。在源节点上,如前所述运行安装脚本。
使用图形界面或手动安装 MySQL Enterprise Firewall 应该启用防火墙。要验证这一点,请连接到服务器并执行以下语句:
mysql> SHOW GLOBAL VARIABLES LIKE 'mysql_firewall_mode';
+---------------------+-------+
| Variable_name | Value |
+---------------------+-------+
| mysql_firewall_mode | ON |
+---------------------+-------+
如果插件无法初始化,请检查服务器错误日志以获取诊断消息。
可以使用 MySQL Workbench 或手动卸载 MySQL Enterprise Firewall。
要使用 MySQL Workbench 6.3.4 或更高版本卸载 MySQL Enterprise Firewall,请参阅 第 31 章MySQL Workbench中的 MySQL Enterprise Firewall Interface。
要手动卸载 MySQL Enterprise Firewall,请执行以下语句。使用语句IF EXISTS
是因为,根据先前安装的防火墙版本,某些对象可能不存在,或者可能通过卸载安装它们的插件而隐式删除。
DROP TABLE IF EXISTS mysql.firewall_group_allowlist;
DROP TABLE IF EXISTS mysql.firewall_groups;
DROP TABLE IF EXISTS mysql.firewall_membership;
DROP TABLE IF EXISTS mysql.firewall_users;
DROP TABLE IF EXISTS mysql.firewall_whitelist;
UNINSTALL PLUGIN MYSQL_FIREWALL;
UNINSTALL PLUGIN MYSQL_FIREWALL_USERS;
UNINSTALL PLUGIN MYSQL_FIREWALL_WHITELIST;
DROP FUNCTION IF EXISTS firewall_group_delist;
DROP FUNCTION IF EXISTS firewall_group_enlist;
DROP FUNCTION IF EXISTS mysql_firewall_flush_status;
DROP FUNCTION IF EXISTS normalize_statement;
DROP FUNCTION IF EXISTS read_firewall_group_allowlist;
DROP FUNCTION IF EXISTS read_firewall_groups;
DROP FUNCTION IF EXISTS read_firewall_users;
DROP FUNCTION IF EXISTS read_firewall_whitelist;
DROP FUNCTION IF EXISTS set_firewall_group_mode;
DROP FUNCTION IF EXISTS set_firewall_mode;
DROP PROCEDURE IF EXISTS mysql.sp_firewall_group_delist;
DROP PROCEDURE IF EXISTS mysql.sp_firewall_group_enlist;
DROP PROCEDURE IF EXISTS mysql.sp_reload_firewall_group_rules;
DROP PROCEDURE IF EXISTS mysql.sp_reload_firewall_rules;
DROP PROCEDURE IF EXISTS mysql.sp_set_firewall_group_mode;
DROP PROCEDURE IF EXISTS mysql.sp_set_firewall_group_mode_and_user;
DROP PROCEDURE IF EXISTS mysql.sp_set_firewall_mode;