Category Archives: MySQL

MySQL InnoDB Cluster – A Hands on Tutorial

传统上,基于MySQL配置高可用(HA)是一项具有挑战的任务,特别是对于在MySQL方面没有进阶知识的人。即使只是计划做一次测试部署,从理解相关概念和技术到相关工具的使用、具体 命令和文件的执行和编辑,有很多需要你去了解的事情(Group Replication的 快速入门指南应该会对你有所启发)。 所以很多人一直拖着不去设置HA,直到灾难性打击和宕机事件的出现。

Oracle的MySQL团队最近发布了一个解决方案的预览版本,这个解决方案的目标是:让用户很容易就能把多个MySQL实例集成在一起提供冗余,来支持MySQL数据库高可用的特性。

在本文中,我们会使用新的MySQL Shell来创建三个沙箱实例,使用它们创建一个三个节点的Group Replication,并且使用MySQL Router作为中间层来将多个MySQL实例隐藏在一个TCP端口之后。Group Replication为InnoDB提供了同步复制和内置的Failover机制,同时Router可以让应用程序始终连接到集群中合适的节点上,除了对MySQL的连接参数做些调整外,不需要修改应用程序的任何代码。

下载和安装依赖包

除MySQL 5.7.17之外,你还需要从labs.mysql.com下载MySQL InnoDB Cluster包,里面包括以下内容:

  • MySQL Router 2.1.1 labs
  • MySQL Shell 1.0.6 labs with X AdminAPI

压缩包必须要解压,然后通过特定平台的具体方法,为各个组件安装对应的包。

部署沙箱实例

第一步是部署一个MySQL Server沙箱实例,这样我们就可以安全地玩耍以及试验,而不会影响已有的MySQL数据库。

启动MySQL Shell(像平常一样,使用non-root OS用户):

然后执行:

MySQL 8.0: MTR Configurations to Be Set to Server Defaults Where Possible

MySQL Test Run 或者 MTR,是一个MySQL测试项目。它的主要目的是为了确保MySQL服务器在新特性的功能测试阶段和旧功能完整性测试阶段符合预期。当MySQL服务器程序的任何组件出现变更时,都需要运行一系列的测试来检查这些变更是否会引起任何副作用。

MTR里的测试用例主要包含执行SQL语句和产生可以验证的结果。由于这些测试的目的是为了模仿客户端与MySQL服务器的交互,所以由MTR启动的MySQL服务的配置应该最好是与MySQL服务器的默认加载的配置相同。但是,MTR所使用的my.cnf配置文件会习惯性地将一些服务器系统参数设置设为非默认值,而不是采用默认值。而且这种配置已经被普遍使用多年,其原因可能是因为之前缺少性能强大的虚拟机。多年以来,大量的人力物力被投入到MySQL测试团队的组建之中。从当年只有少数几个工程师到现在,MySQL测试团队已经成长为一个完备的团队,并且可以用的机器也更为强大。由于每台物理机器都配置了海量内存和128 核心的处理器,因此可在在各种平台上运行数千个测试用例,这也正是本篇工作日志背后的驱动力。

WL#8795 开始仔细分析MTR使用的my.cnf配置文件,并将服务器系统变量的设置尽可能的更改为默认值。 除此之外,本日志还试图找到一些非默认设置的原因。

这篇博客将会讨论配置文件中的变量和它们的设置。

设置为服务器默认值的一些变量:

1. open-files-limit = 1024
2. local-infile
3. character-set-server = latin1
4. sort_buffer_size = 256K
5. loose-innodb_log_files_in_group = 2

下面的变量之前被设置为非默认值,但是现在已被修改为服务器的默认值:

1. key_buffer_size = 1M

由于增加这个变量的值可以为所有的读写操作提供更好的索引服务,所以在配置文件里,这个值被修改为默认值8M。这个变量的最大值是取决于服务器的物理内存大小以及每个进程的内存限制的。这也可能是之前设置为一个较小值的原因。

2. max_heap_table_size = 1M

这个变量的值被修改为默认值16M。这个值是表示允许的内存堆表大小的最大值,由于现在的机器都有了更大的内存,默认设置应该不会产生任何负面影响。

3.