CHANGE REPLICATION SOURCE TO
使用|
指定的用户帐户
CHANGE MASTER TO
声明作为
PRIVILEGE_CHECKS_USER
复制通道的帐户必须具有
REPLICATION_APPLIER
特权,否则复制应用程序线程不会启动。如第 17.3.3 节“复制权限检查”中所述,该帐户需要进一步的权限,这些权限足以应用复制通道上预期的所有预期事务。只有在执行相关交易时才会检查这些权限。
对于使用帐户binlog_format=ROW
保护的复制通道,强烈建议
使用基于行的二进制日志记录 ( )。PRIVILEGE_CHECKS_USER
使用基于语句的二进制日志记录,帐户可能需要一些管理员级别的权限才能
PRIVILEGE_CHECKS_USER
成功执行事务。从 MySQL 8.0.19 开始,该
REQUIRE_ROW_FORMAT
设置可以应用于安全通道,这会限制通道执行需要这些权限的事件。
该REPLICATION_APPLIER
权限显式或隐式允许
PRIVILEGE_CHECKS_USER
帐户执行复制线程需要执行的以下操作:
设置系统变量
gtid_next
、original_commit_timestamp
、original_server_version
、immediate_server_version
和pseudo_replica_mode
或 的值pseudo_slave_mode
,以在执行事务时应用适当的元数据和行为。执行内部使用
BINLOG
语句以应用mysqlbinlog输出,前提是该帐户还具有对这些语句中的表和操作的权限。更新系统表
mysql.gtid_executed
、mysql.slave_relay_log_info
、mysql.slave_worker_info
和mysql.slave_master_info
,以更新复制元数据。(如果事件出于其他目的显式访问这些表,您必须授予对这些表的适当权限。)应用二进制日志
Table_map_log_event
,它提供表元数据但不对数据库进行任何更改。
如果|的REQUIRE_TABLE_PRIMARY_KEY_CHECK
选项
语句设置为默认值,帐户需要足够的权限来设置受限会话变量,以便它可以在会话期间更改
系统变量的值以匹配从源复制的设置。该
特权赋予帐户这种能力。此权限还允许该帐户应用使用该
选项创建的mysqlbinlog输出。如果您设置为或,副本始终使用该值作为
CHANGE REPLICATION SOURCE
TO
CHANGE MASTER TO
STREAM
PRIVILEGE_CHECKS_USER
sql_require_primary_key
SESSION_VARIABLES_ADMIN
--disable-log-bin
REQUIRE_TABLE_PRIMARY_KEY_CHECK
ON
OFF
sql_require_primary_key
复制操作中的系统变量,因此不需要这些会话管理级别的权限。
如果正在使用表加密,
table_encryption_privilege_check
系统变量设置为ON
,并且任何事件中涉及的表空间的加密设置与应用服务器的默认加密设置(由
default_table_encryption
系统变量指定)不同,该PRIVILEGE_CHECKS_USER
帐户需要TABLE_ENCRYPTION_ADMIN
权限才能覆盖默认加密设置。强烈建议您不要授予此特权。相反,确保副本上的默认加密设置与其复制的表空间的加密状态相匹配,并且复制组成员具有相同的默认加密设置,因此不需要特权。
为了根据需要从中继日志执行特定的复制事务,或从mysqlbinlog
输出执行事务,该PRIVILEGE_CHECKS_USER
帐户必须具有以下权限:
如果正在使用基于语句的二进制日志记录(不建议使用帐户),对于以语句格式记录的or或 DMLPRIVILEGE_CHECKS_USER
等事务控制语句
(记录为
),该
帐户需要执行包含的语句的权限在事件中。
BEGIN
COMMIT
Query_log_event
PRIVILEGE_CHECKS_USER
如果LOAD DATA
需要在复制通道上进行操作,请使用基于行的二进制日志记录(binlog_format=ROW
)。使用这种日志格式,
FILE
执行事件不需要特权,所以不要给
PRIVILEGE_CHECKS_USER
帐户这个特权。强烈建议将基于行的二进制日志记录与使用
PRIVILEGE_CHECKS_USER
帐户保护的复制通道一起使用。如果
REQUIRE_ROW_FORMAT
为通道设置,则需要基于行的二进制日志记录。删除由事件创建的
Format_description_log_event
任何临时文件LOAD
DATA
,在没有权限检查的情况下进行处理。有关详细信息,请参阅
第 17.5.1.19 节,“复制和加载数据”。
如果init_replica
or
init_slave
系统变量被设置为指定在复制 SQL 线程启动时要执行的一个或多个 SQL 语句,则该
PRIVILEGE_CHECKS_USER
帐户必须具有执行这些语句所需的权限。
建议您永远不要向该
PRIVILEGE_CHECKS_USER
帐户授予任何 ACL 权限,包括
CREATE USER
、
CREATE ROLE
、
DROP ROLE
和
GRANT OPTION
,并且不允许该帐户更新mysql.user
表。有了这些权限,该帐户可用于在服务器上创建或修改用户帐户。为避免在源服务器上发布的 ACL 语句被复制到安全通道执行(在没有这些权限的情况下它们会失败),您可以SET sql_log_bin =
0
在所有 ACL 语句和SET
sql_log_bin = 1
在它们之后,省略源二进制日志中的语句。或者,您可以在执行所有 ACL 语句之前设置一个专用的当前数据库,并使用复制过滤器 ( --binlog-ignore-db
) 在副本上过滤掉这个数据库。