• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • 部署InnoDB ReplicaSet

    您以与InnoDB群集类似的方式部署InnoDB ReplicaSet。首先,您配置一些MySQL服务器实例,最少为两个实例。在本教程中,其中一个作为主要功能rs-1;在本教程中,其他实例充当辅助实例rs-2;复制主数据库应用的事务。这等效于异步MySQL复制中已知的主服务器和从服务器。然后,使用MySQL Shell连接到实例之一,并创建一个副本集。创建副本集后,您可以向其添加实例。

    InnoDB ReplicaSet与沙箱实例兼容,您可以将其用于本地部署(例如出于测试目的)。有关说明,请参阅部署沙盒实例。但是,本教程假定您正在部署生产InnoDB ReplicaSet,其中每个实例都在不同的主机上运行。

    InnoDB ReplicaSet先决条件

    要使用InnoDB ReplicaSet,您应该了解以下先决条件:

    • 仅支持运行MySQL 8.0及更高版本的实例
    • 仅支持基于GTID的复制,二进制日志文件位置复制与InnoDB ReplicaSet不兼容
    • 仅支持基于行的复制(RBR),不支持基于语句的复制(SBR)
    • 不支持复制过滤器
    • 在任何情况下都不允许非托管复制通道
    • 一个副本集最多包含一个主实例,并且支持一个或多个第二实例。尽管可以添加到副本集的辅助副本数量没有限制,但是连接到副本集的每个MySQL路由器都会监视每个实例。因此,添加到副本集的实例越多,必须执行的监视越多。
    • 复制集必须完全由MySQL Shell管理。例如,复制帐户由MySQL Shell创建和管理。不支持在MySQL Shell之外对实例进行配置更改,例如,直接使用SQL语句更改主实例。始终使用MySQL Shell与InnoDB ReplicaSet一起使用。

    AdminAPI和InnoDB ReplicaSet使您可以在不深入了解基础概念的情况下使用MySQL复制。但是,有关背景信息,请参见复制

    配置InnoDB副本集实例

    使用配置要在副本集中使用的每个实例。MySQL Shell可以连接到实例然后进行配置,也可以传入以配置特定的远程实例。进行方式取决于实例是否支持持久设置,请参阅持久设置。例如,在不支持持久设置的实例上,以适当的权限与用户连接以配置实例:dba.configureReplicaSetInstance(instance)instance

    mysql-js> \connect root@example1.com:3306
    

    dba.configureReplicaSetInstance()如果clusterAdmin提供该功能,则该功能可以选择创建管理员帐户。创建的帐户具有管理InnoDB集群和InnoDB ReplicaSet所需的正确特权集。创建用户以管理副本集的首选方法是使用该clusterAdmin选项。

    小费

    在同一群集或副本集的所有实例中,管理员帐户必须具有相同的用户名和密码。

    rs-1:3306使用名为rsadmin issue 的集群管理员在处配置实例,请执行以下操作:

    mysql-js> dba.configureReplicaSetInstance('root@rs-1:3306', \ 
    {clusterAdmin: "'rsadmin'@'rs-1%'"});
    

    交互式提示要求指定用户所需的密码。要配置MySQL Shell当前连接的实例,可以指定一个空实例定义。例如问题:

    mysql-js> dba.configureReplicaSetInstance('', {clusterAdmin: "'rsadmin'@'rs-1%'"});
    

    交互式提示要求指定用户所需的密码。这将检查当前与MySQL Shell连接的实例是否可在InnoDB ReplicaSet中使用。如果可能,请配置与InnoDB ReplicaSet不兼容的设置。使用InnoDB ReplicaSet所需的特权创建集群管理员帐户。

    创建一个InnoDB副本集

    配置完实例后,连接到实例并用于dba.createReplicaSet()创建使用MySQL异步复制(而不是InnoDB群集使用的MySQL组复制)的托管副本集。MySQL Shell当前连接到的MySQL实例用作副本集的初始主实例。此操作仅支持TCP / IP连接。

    dba.createReplicaSet()操作将执行多项检查,以确保实例状态和配置与托管副本集兼容,如果是,则在实例上初始化元数据架构。如果要检查操作,但实际上不对实例进行任何更改,请使用该dryRun选项。这显示了MySQL Shell将采取哪些行动来创建副本集。如果成功创建了副本集,ReplicaSet则返回一个对象。因此,最佳实践是将返回ReplicaSet值分配给变量。这使您可以使用副本集,例如通过调用ReplicaSet.status()操作。创建名为的副本集example在实例上rs-1并将其分配给rs变量,发出:

    mysql-js> \connect root@rs-1:3306
    ...
    mysql-js> var rs = dba.createReplicaSet("example")
    A new replicaset with instance 'rs-1:3306' will be created.
    
    * Checking MySQL instance at rs-1:3306
    
    This instance reports its own address as rs-1:3306
    rs-1:3306: Instance configuration is suitable.
    
    * Updating metadata...
    
    ReplicaSet object successfully created for rs-1:3306.
    Use rs.add_instance() to add more asynchronously replicated instances to this replicaset
    and rs.status() to check its status.
    

    要验证操作是否成功,您可以使用返回的ReplicaSet对象。例如,这提供了ReplicaSet.status()操作,该操作显示有关副本集的信息。我们已经将return分配ReplicaSet给了变量rs,所以发出:

    mysql-js> rs.status()
    {
        "replicaSet": {
            "name": "example", 
            "primary": "rs-1:3306", 
            "status": "AVAILABLE", 
            "statusText": "All instances available.", 
            "topology": {
                "rs-1:3306": {
                    "address": "rs-1:3306", 
                    "instanceRole": "PRIMARY", 
                    "mode": "R/W", 
                    "status": "ONLINE"
                }
            }, 
            "type": "ASYNC"
        }
    }
    

    此输出显示example已创建名为的副本集,并且主副本集为rs-1。当前只有一个实例,下一个任务是将更多实例添加到副本集。