InnoDB群集的沙箱部署
本节说明如何设置沙箱InnoDB集群部署。您可以使用带有随附的AdminAPI的MySQL Shell创建和管理InnoDB集群。本节假定您熟悉MySQL Shell,有关更多信息,请参见MySQL Shell 8.0(MySQL 8.0的一部分)。
最初部署和使用MySQL的本地沙箱实例是开始探索InnoDB集群的好方法。在部署到生产服务器上之前,您可以在本地全面测试InnoDB集群。MySQL Shell具有内置功能,可用于创建沙盒实例,这些实例已正确配置为在本地部署的方案中与组复制一起使用。
重要沙盒实例仅适合在本地计算机上部署和运行以进行测试。在生产环境中,MySQL Server实例被部署到网络上的各种主机上。有关更多信息,请参见“ InnoDB Cluster的生产部署”。
本教程显示了如何使用MySQL Shell创建由三个MySQL服务器实例组成的InnoDB集群。它包括以下步骤:
- 部署沙箱实例
- 创建沙盒InnoDB集群
- 将实例添加到InnoDB集群
- 保留沙箱配置
部署沙箱实例
MySQL Shell包含添加dba
全局变量的AdminAPI,该全局变量提供了用于管理沙箱实例的功能。在此示例设置中,您将使用创建三个沙箱实例dba.deploySandboxInstance()
。
发出以下命令,从命令提示符启动MySQL Shell:
shell>mysqlsh
除了本机SQL模式外,MySQL Shell还提供了两种脚本语言模式,即JavaScript和Python。在本指南中,MySQL Shell主要用于JavaScript模式。MySQL Shell启动时,默认情况下处于JavaScript模式。通过发出\js
JavaScript模式,\py
Python模式和\sql
SQL模式来切换模式。通过发出\js
命令确保您处于JavaScript模式,然后执行:
mysql-js> dba.deploySandboxInstance(3310)
注意在JavaScript和Python模式下,不需要使用分号终止命令。
传递给的参数deploySandboxInstance()
是MySQL服务器实例在其中侦听连接的TCP端口号。默认情况下,沙箱是在Unix系统上命名的目录中创建的。对于Microsoft Windows系统,目录为。$HOME/mysql-sandboxes/port
%userprofile%\MySQL\mysql-sandboxes\port
提示输入实例的root用户密码。
重要每个沙箱实例都使用root用户和密码。在生产中不建议这样做,有关该选项的信息,请参阅配置生产实例
clusterAdmin
。
要部署另一个沙箱服务器实例,请对端口3310的沙箱实例重复执行以下步骤,为每个实例选择不同的端口号。对于每个其他沙箱实例问题:
mysql-js> dba.deploySandboxInstance(port_number)注意
在clusterAdmin
属于集群的所有实例上,用户名和密码必须相同。对于沙盒部署,root用户名和密码在所有实例上都必须相同。
要遵循本教程,请对三个沙箱服务器实例使用端口号3310、3320和3330。问题:
mysql-js> dba.deploySandboxInstance(3320) mysql-js> dba.deploySandboxInstance(3330)
要更改存储沙箱的目录(例如,为了测试而在一台主机上运行多个沙箱),请使用MySQL Shell sandboxDir选项。例如,要在/home/user/sandbox1
目录中使用沙箱,请发出:
mysql-js> shell.options.sandboxDir='/home/user/sandbox1'
然后,所有后续与沙盒相关的操作都针对处的实例执行/home/user/sandbox1
。
部署沙箱时,MySQL Shell搜索mysqld二进制文件,然后使用该二进制文件创建沙箱实例。您可以通过配置环境变量来配置MySQL Shell在哪里搜索mysqld二进制文件PATH
。这对于在将新版本的MySQL部署到生产环境之前在本地测试它很有用。例如,要在路径问题上使用mysqld二进制文件/home/user/mysql-latest/bin/mysqld
:
PATH=/home/user/mysql-latest/bin/mysqld:$PATH
然后在PATH
设置了环境变量的终端上运行MySQL Shell 。您部署的所有沙箱都将使用在配置路径中找到的mysqld二进制文件。
创建沙盒InnoDB集群
下一步是在连接到种子MySQL Server实例时创建InnoDB集群。种子实例包含要复制到其他实例的数据。在此示例中,沙箱实例为空白,因此我们可以选择任何实例。沙箱还使用MySQL Clone,请参见“将MySQL Clone与InnoDB集群一起使用”。
将MySQL Shell连接到种子实例,在这种情况下,将其连接到端口3310:
mysql-js> \connect root@localhost:3310
的\connect
MySQL的Shell命令是针对一个快捷方式shell.connect()
的方法:
mysql-js> shell.connect('root@localhost:3310')
建立连接后,AdminAPI可以写入本地实例的选项文件。这与生产部署不同,在生产部署中,需要先连接到远程实例并在实例上本地运行MySQL Shell应用程序,然后AdminAPI才能写入实例的选项文件。
使用该dba.createCluster()
方法以当前连接的实例作为种子创建InnoDB集群:
mysql-js>var cluster = dba.createCluster('testCluster')
该createCluster()
方法将InnoDB集群元数据部署到所选实例,并将您当前连接的实例添加为种子实例。该createCluster()
方法返回创建的群集,在上面的示例中,该群集已分配给cluster
变量。传递给createCluster()
方法的参数是此InnoDB集群的符号名称,在这种情况下为testCluster
。
如果实例具有,super_read_only=ON
则可能需要确认AdminAPI可以设置super_read_only=OFF
。有关更多信息,请参见超级只读和实例。
将实例添加到InnoDB集群
下一步是向InnoDB集群添加更多实例。种子实例执行的所有事务都会在添加时由每个辅助实例重新执行。本教程使用之前在端口3320和3330创建的沙箱实例。
此示例中的种子实例是最近创建的,因此几乎为空。因此,几乎没有数据需要从种子实例复制到辅助实例。在生产环境中,种子实例上具有现有数据库,则可以使用MySQL Enterprise Backup之类的工具来确保在复制开始之前,辅助数据库具有匹配的数据。这样可以避免在将数据从主数据库复制到辅助数据库时出现长时间延迟的可能性。请参见“将MySQL Enterprise Backup与组复制一起使用”。
将第二个实例添加到InnoDB集群:
mysql-js> cluster.addInstance('root@localhost:3320')
提示输入root用户的密码。从种子实例中恢复指定的实例。换句话说,来自种子的事务将复制到加入集群的实例。
以相同的方式添加第三个实例:
mysql-js> cluster.addInstance('root@localhost:3330')
提示输入root用户的密码。
至此,您已经创建了具有三个实例的集群:一个主实例和两个辅助实例。
注意如果实例是沙箱实例localhost
,addInstance()
则只能指定。这也适用于addInstance()
发行后的隐式createCluster()
。
保留沙箱配置
将沙箱实例添加到集群后,必须将InnoDB集群所需的配置持久化到每个实例的选项文件中。处理方式取决于实例是否自动支持持久配置更改,请参阅持久设置。当您正在使用的MySQL实例支持持久配置自动更改时,添加该实例会自动配置该实例。当您使用的MySQL实例不支持持久配置更改时,您必须在本地配置该实例。请参阅使用配置实例dba.configureLocalInstance()
。
要检查集群是否已创建,请使用集群实例的status()
功能。请参阅使用检查集群的状态Cluster.status()
。
一旦部署了集群,就可以配置MySQL路由器以提供高可用性,请参见“将MySQL路由器与InnoDB集群一起使用”。