赞
踩
MySQL InnoDB 集群提供完整的高可用性 MySQL 的解决方案。通过使用MySQL Shell附带的AdminAPI,您可以轻松 配置和管理至少三个MySQL服务器的组 实例以充当 InnoDB 集群。
InnoDB 集群中的每个 MySQL 服务器实例都运行 MySQL 组复制,提供复制机制 InnoDB 集群中的数据,具有内置故障转移功能。管理接口 无需在 InnoDB 集群,但有关更多信息,请参阅组复制,其中解释了详细信息。从 MySQL 8.0.27,你也可以设置 InnoDB ClusterSet(参见第 8 章 MySQL InnoDB ClusterSet)来提供灾难 通过链接主数据库对 InnoDB 集群部署的容忍度 InnoDB 集群,其自身的一个或多个副本交替存在 位置,例如不同的数据中心。
MySQL 路由器可以自动 根据您部署的群集进行自我配置,连接客户端 应用程序对服务器实例透明。如果发生以下情况 群集重新配置的服务器实例意外故障 自然而然。在默认的单主模式下,一个 InnoDB 集群具有单个读写服务器实例 - 主要。多个辅助服务器实例是 主要。如果主数据库发生故障,则会自动升级辅助数据库 到主要角色。MySQL 路由器检测到这一点并转发客户端 新主数据库的应用程序。高级用户还可以配置 集群以具有多个主数据库。
下图显示了这些技术的工作原理概述 一起:
在安装InnoDB Cluster的生产部署之前,请确保您打算使用的服务器实例满足以下要求。
disabled_storage_engines="MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY"
$ /usr/bin/env python
如果启动Python解释器,则不需要执行进一步的操作。如果上一个命令失败,请在/usr/bin/python和您选择的python二进制文件之间创建一个软链接。
从版本8.0.17开始,实例必须在InnoDB集群中使用唯一的server_id。当您使用Cluster.addInstance(实例)操作时,如果集群中的实例已经使用了实例的server_id,则该操作将失败并出现错误。
从版本8.0.23开始,应该将实例配置为使用并行复制应用程序。请参阅第7.5.6节“配置并行复制应用程序”。
在为InnoDB Cluster配置实例的过程中,配置了使用实例所需的大部分系统变量。但是AdminAPI没有配置transaction_instance系统变量,这意味着它默认为REPEATABLE READ。这不会影响单个主集群,但如果您使用的是多主集群,那么除非您在应用程序中依赖可重复的READ语义,否则我们建议使用READ COMMITTED隔离级别。
实例的相关配置选项,特别是组复制配置选项,必须位于单个选项文件中。InnoDB Cluster只支持服务器实例的单个选项文件,不支持使用--defaults extra file选项来指定额外的选项文件。对于使用实例的选项文件的任何AdminAPI操作,必须指定主文件。如果您想为与InnoDB Cluster无关的配置选项使用多个选项文件,则必须手动配置这些文件,确保根据使用多个选择文件的优先规则正确更新这些文件,并确保与InnoDB Cluster相关的设置不会被额外未识别的选项文件中的选项错误地覆盖。
由于InnoDB集群使用组复制,您还应该注意其限制。
由于元数据查询中的错误,MySQL Shell 8.0.27无法用于管理运行MySQL Server 8.0.25的InnoDB集群。要解决此问题,请在InnoDB Cluster成员实例上将MySQL Server升级到8.0.26或8.0.27版本,然后再将MySQL Shell 8.0.27与集群一起使用。该问题将在MySQL Shell 8.0.28中修复。
InnoDB集群中的成员服务器使用三种类型 的用户帐户。一个 InnoDB 集群服务器配置 帐户用于为群集配置服务器实例。 可以创建一个或多个InnoDB集群管理员帐户 供管理员在 群集已设置。一个或多个 MySQL 路由器帐户可以是 为 MySQL 路由器实例创建以连接到集群。每个 用户帐户必须存在于 InnoDB 集群,具有相同的用户名和相同的密码。
InnoDB 集群服务器配置帐户
此帐户用于创建和配置InnoDB集群的成员服务器。每个成员服务器只有一个服务器配置帐户。必须在群集中的每个成员服务器上使用相同的用户帐户名和密码。您可以为此目的使用服务器上的根帐户,但如果这样做,群集中每个成员服务器上的root帐户都必须具有相同的密码。出于安全原因,不建议这样做。
首选方法是使用带有clusterAdmin选项的dba.configureInstance()命令创建InnoDB集群服务器配置帐户。为了提高安全性,请在交互式提示下指定密码,否则请使用clusterAdminPassword选项指定密码。以相同的方式在将成为InnoDB集群一部分的每个服务器实例上创建相同的帐户,使用相同的用户名和密码,包括您连接到的创建集群的实例,以及之后将加入集群的实例。
dba.configureInstance()命令会自动授予帐户所需的权限。如果您愿意,您可以手动设置帐户,授予它手动配置InnoDB集群管理员帐户中列出的权限。除了MySQL管理员的完全权限外,该帐户还需要对InnoDB Cluster元数据表的完全读写权限。
使用dba.configureInstance()操作创建的InnoDB Cluster服务器配置帐户不会复制到InnoDB Cluster中的其他服务器。MySQL Shell禁用dba.configureInstance()操作的二进制日志记录。这意味着您必须在每个服务器实例上单独创建帐户。
InnoDB 集群管理员帐户
在您完成配置过程后,这些帐户可用于管理InnoDB集群。您可以设置多个。每个帐户必须存在于InnoDB集群中的每个成员服务器上,具有相同的用户名和密码。
要为InnoDB ClusterSet部署创建InnoDB Cluster管理员帐户,请在将所有实例添加到该集群后发出Cluster.setupAdminAccount()命令。该命令使用您指定的用户名和密码创建一个具有所有必需权限的帐户。使用cluster.setupAdminAccount()创建帐户的事务被写入二进制日志,并发送到集群中的所有其他服务器实例,以便在它们上创建帐户。
注意
如果主InnoDB Cluster是在MySQL Shell 8.0.20之前的版本中设置的,那么Cluster.setupAdminAccount()命令可能与update选项一起使用,以更新InnoDB Cluster服务器配置帐户的权限。这是对未写入二进制日志的命令的特殊使用。
MySQL 路由器帐户
MySQL路由器使用这些帐户连接InnoDB集群中的服务器实例。您可以设置多个。每个帐户必须存在于InnoDB集群中的每个成员服务器上,具有相同的用户名和密码。创建MySQL路由器帐户的过程与InnoDB Cluster管理员帐户的过程相同,但使用Cluster.setupRouterAccount()命令。
如果您想手动配置InnoDB集群管理用户,该用户需要此处列出的权限,所有权限都带有GRANT OPTION。
注意
此权限列表基于MySQL Shell的当前版本。权限可能会在不同版本之间更改。因此,建议使用dba.configureInstance()或cluster.setupAdminAccount()操作来设置管理帐户。
重要的
用于管理InnoDB Cluster、InnoDB ClusterSet或InnoDB ReplicaSet部署的每个帐户必须存在于部署中的所有成员服务器实例上,具有相同的用户名和密码。
如果只需要读取操作,例如创建用户 出于监控目的,帐户受到更多限制 可以使用特权。向用户授予your_user
所需的权限 监控 InnoDB 集群问题:
- GRANT SELECT ON mysql_innodb_cluster_metadata.* TO your_user@'%';
- GRANT SELECT ON mysql.slave_master_info TO your_user@'%';
- GRANT SELECT ON performance_schema.global_status TO your_user@'%';
- GRANT SELECT ON performance_schema.global_variables TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_applier_configuration TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_applier_status TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_applier_status_by_coordinator TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_applier_status_by_worker TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_connection_configuration TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_connection_status TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_group_member_stats TO your_user@'%';
- GRANT SELECT ON performance_schema.replication_group_members TO your_user@'%';
- GRANT SELECT ON performance_schema.threads TO your_user@'%' WITH GRANT OPTION;
作为使用Group Replication的一部分,InnoDB Cluster创建内部恢复用户,以启用集群中服务器之间的连接。这些用户是集群内部的,生成的用户的用户名遵循mysql_innodb_cluster_server_id@%的命名方案,其中server_id对实例是唯一的。在8.0.17之前的版本中,生成的用户的用户名遵循mysql_innodb_cluster_r[10_numbers]的命名方案。
用于这些内部用户的主机名设置为“%”。在v8.0.17之前,ipAllowlist通过在ipAllowlist中为每个主机创建一个帐户来影响主机名行为。有关详细信息,请参阅创建服务器的允许列表。
每个内部用户都有一个随机生成的密码。从版本8.0.18开始,AdminAPI使您能够更改为内部用户生成的密码。请参阅重置恢复帐户密码。随机生成的用户将获得以下授权:
GRANT REPLICATION SLAVE ON *.* to internal_user;
内部用户帐户在种子实例上创建,然后复制到集群中的其他实例。内部用户包括:
在v8.0.17之前,ipAllowlist导致Cluster.requestInstance()删除旧的内部用户并生成新用户,而不是重用它们。
从版本8.0.18开始,您可以使用Cluster.resetRecoveryAccountsPassword()操作重置InnoDB Cluster创建的内部恢复帐户的密码,例如遵循自定义密码生存期策略。使用Cluster.resetRecovery AccountsPassword()操作重置群集使用的所有内部恢复帐户的密码。该操作为每个联机实例上的内部恢复帐户设置一个新的随机密码。如果无法访问实例,则操作失败。您可以使用force选项来忽略此类实例,但不建议这样做,而且在使用此操作之前使实例重新联机更安全。此操作仅适用于InnoDB Cluster创建的密码,不能用于更新手动创建的密码。
MySQL InnoDB集群部署及管理全教程(二)_Doker 多克的博客-CSDN博客
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/酷酷是懒虫/article/detail/1006187
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。