组复制安装部署 | 全方位认识 MySQL 8( 二 )


组复制参数简介
在本示例中对于主机名的解析,我们使用本地hosts文件做解析 。
# 需要在即将配置组复制的三台主机中都进行配置[root@node3 ~]# cat /etc/hosts......10.10.30.162 s1 mysql110.10.30.163 s2 mysql210.10.30.164 s3 mysql3
PS:
如果使用的数据库版本低于MySQL 8.0.2,则还需要将变量配置为 。该系统变量指示MySQL 对每个事务,在收集写集数据()时使用散列算法进行计算 。从MySQL 8.0.2开始,该系统变量默认值被设置为了,如果低于该版本,那么,在配置组复制时需要将该系统变量添加到f配置文件中,如下:
transaction_write_set_extraction = XXHASH64
组中所有成员的配置非常相似 。因此,在配置其他成员时只需要对少量的系统变量稍作修改即可(例如:、、) 。在下文中将对这些每个成员必须修改的系统变量进行说明 。
2.1.3. 用户凭证 组复制在将组成员加入组时,使用分布式恢复过程来同步节点的数据 。分布式恢复会涉及到使用名为的组复制通道将事务从donor节点(捐赠者)的二进制日志传输到节点中 。因此,必须设置具有正确权限的复制用户,以便组复制可以在成员与成员之间建立复制通道 。如果组成员已设置了使用远程克隆的操作进行分布式恢复(从MySQL 8.0.17版本开始支持),则此复制用户还将在donor节点上当做克隆用户角色使用,因此也需要克隆用户角色的正确权限 。有关分布式恢复的完整描述,请参见"4.3. 分布式恢复" 。在组复制中,用于分布式恢复的复制用户可以通过二进制日志在成员之间相互同步,即,可以只在第一个组成员上创建复制用户,然后,后续节点依靠分布式恢复机制通过二进制日志中的创建用户语句将该用户进行同步 。也可以在组复制的每个成员中分别创建复制用户(但是,为了避免组复制中的各自创建用户的二进制日志在后续相互同步数据时发生冲突,每个在创建用户之前需要在会话级别临时关闭二进制日志,创建用户完成之后再重新启用二进制日志) 。
如果设置了克隆功能,则被克隆的节点在克隆操作完成之后,在创建组复制通道时使用的复制用户和密码是来自于donor节点的 。即,整个组复制中所有的成员都会使用相同的复制用户,需要确保复制用户在任意组成员都可以正常与组中其他成员进行分布式恢复与数据同步,因此,除非特殊原因,否则建议在整个组复制拓扑中,使用相同的复制用户和密码以及授权 。注意:如果在组复制中为分布式恢复配置且启用了SSL,则,必须在节点连接到donor节点之前为每个成员创建好启用SSL的复制用户(即,需要在每个组成员上单独创建启用SSL的复制用户),以便节点能够成功连接到donor节点 。有关为分布式恢复连接设置SSL的说明,请参见"5.2. 组复制安全套接字层(SSL)支持" 。如果要为组复制创建用于分布式恢复的复制用户,则请按照如下步骤进行操作 。1)启动MySQL,然后使用客户端连接到该实例 。2)如果要为组复制中的每个成员分别创建复制用户,则需要先在客户端会话级别关闭二进制日志记录,如下:
mysql> SET SQL_LOG_BIN=1;
3)创建一个MySQL用户,并为该用户授予 SLAVE权限,如果设置为支持克隆,则还需要为该用户授予权限 。这里以创建名为、密码为的用户为例,列出创建复制用户的语句,如下:
mysql> CREATE USER rpl_user@'%' IDENTIFIED BY 'password';mysql> GRANT REPLICATION SLAVE ON *.* TO rpl_user@'%';mysql> GRANT BACKUP_ADMIN ON *.* TO rpl_user@'%';mysql> FLUSH PRIVILEGES;# 注意,如果想要使用mysql_native_password密码认证插件,则在创建用户时,改用如下语句mysql> CREATE USER rpl_user@'%' IDENTIFIED WITH mysql_native_password BY 'password';