8.3 MySQL复制标准规则

以下是 MySQL 复制标准合规性规则:

禁用二进制日志校验和

描述MySQL 服务器写入和读取的二进制日志现在是崩溃安全的,因为只有完整的事件(或事务)才会被记录或回读。默认情况下,服务器会记录事件的长度以及事件本身,并使用此信息来验证事件是否已正确写入。您还可以通过设置 binlog_checksum 系统变量使服务器使用 CRC32 校验和为事件写入校验和,从而为日志和复制过程增加额外的安全级别。要使服务器从二进制日志中读取校验和,请使用 master_verify_checksum 系统变量。slave_sql_verify_checksum 系统变量导致从 SQL 线程从中继日志中读取校验和。

严重性轻微警告

建议调查为什么 binlog_checksum 设置为 %binlog_checksum%。通过发出 SET GLOBAL binlog_checksum = CRC32 语句打开校验和。将 binlog_checksum = CRC32 添加到您的 my.cnf/my.ini 文件中,以确保下次启动服务器时启用校验和。

基于二进制日志行的图像过多

描述从 MySQL Server 5.6 开始,基于行的复制现在支持行图像控制。通过仅记录为每行更改(而不是所有列)唯一标识和执行更改所需的那些列,可以节省磁盘空间、网络资源和内存使用量。您可以通过将 binlog_row_image 服务器系统变量设置为 minimal(仅记录所需列)、full(记录所有列)或 noblob(记录除不需要的 BLOB 或 TEXT 列之外的所有列)之一来确定记录完整行还是最少行).

严重性轻微警告

建议调查为什么 binlog_row_image 设置为 %binlog_row_image%。通过发出 SET GLOBAL binlog_row_image = minimal 仅记录在每一行上唯一标识和执行更改所需的那些列。将 binlog_row_image = minimal 添加到您的 my.cnf/my.ini 文件,以确保新设置在下次服务器启动时生效。

Master 在读取二进制日志时不验证校验和

描述MySQL 服务器写入和读取的二进制日志现在是崩溃安全的,因为只有完整的事件(或事务)才会被记录或回读。默认情况下,服务器会记录事件的长度以及事件本身,并使用此信息来验证事件是否已正确写入。您还可以通过设置 binlog_checksum 系统变量使服务器使用 CRC32 校验和为事件写入校验和,从而为日志和复制过程增加额外的安全级别。要使服务器从二进制日志中读取校验和,请使用 master_verify_checksum 系统变量。slave_sql_verify_checksum 系统变量导致从 SQL 线程从中继日志中读取校验和。

严重性轻微警告

建议调查为什么将 master_verify_checksum 设置为 %verify_checksum%。通过发出 SET GLOBAL master_verify_checksum = ON 语句打开校验和的服务器验证。将 master_verify_checksum = ON 添加到您的 my.cnf/my.ini 文件,以确保在下次启动服务器时启用服务器校验和验证。但是,请记住,这会增加 master 的开销,因为 master 需要读取二进制日志事件并验证磁盘上事件的校验和是否与它在内存中的内容相匹配。您可能希望在进行此更改之前和之后测量测试系统上的数据库性能,以确保在将更改部署到生产环境之前开销是可以接受的。

从站检测网络中断太高

描述从站必须处理影响从站从主站获取最新数据的能力的网络连接中断,从而导致复制落后。然而,slave 只有在 slave_net_timeout seconds 没有收到来自 master 的数据后才会注意到网络中断。您可能希望减少 slave_net_timeout 以便更快地检测和解决中断以及相关的连接重试。此参数的默认值为 3600 秒(1 小时),这对于许多环境来说太高了。

严重性轻微警告

建议在 my.cnf/my.ini 文件的 [mysqld] 部分中设置 slave_net_timeout=60(或检测环境中网络连接中断的任何合理值)。slave_net_timeout 的当前值为 %net_timeout%。

从站未配置为只读

描述对从站的任意或意外更新可能会破坏复制或导致从站与其主站不一致。使从服务器只读可以确保从服务器仅接受来自其主服务器而不是来自客户端的更新;它最大限度地减少了意外更新的可能性。

严重性轻微警告

建议在 my.cnf/my.ini 文件中设置 read_only=1 以确保从服务器只接受来自其主服务器而不是来自客户端的更新,然后重新启动 MySQL 服务器。

从中继日志读取时从站不验证校验和

描述MySQL 服务器写入和读取的二进制日志现在是崩溃安全的,因为只有完整的事件(或事务)才会被记录或回读。默认情况下,服务器会记录事件的长度以及事件本身,并使用此信息来验证事件是否已正确写入。您还可以通过设置 binlog_checksum 系统变量使服务器使用 CRC32 校验和为事件写入校验和,从而为日志和复制过程增加额外的安全级别。要使服务器从二进制日志中读取校验和,请使用 master_verify_checksum 系统变量。slave_sql_verify_checksum 系统变量导致从 SQL 线程从中继日志中读取校验和。

严重性轻微警告

建议调查为什么 slave_sql_verify_checksum 设置为 %sql_verify_checksum%。通过发出 SET GLOBAL slave_sql_verify_checksum = ON 语句来打开校验和的从验证。将 slave_sql_verify_checksum = ON 添加到您的 my.cnf/my.ini 文件,以确保在下次启动服务器时启用从属校验和验证。

从 SQL 处理不是多线程的

描述从 MySQL 服务器版本 5.6 开始,复制现在支持在从属服务器上使用多线程并行执行事务。启用并行执行时,从属 SQL 线程充当多个从属工作线程的协调器,由 slave_parallel_workers 服务器系统变量的值确定。请注意,当前在从属服务器上实现多线程假设数据和更新在每个数据库的基础上进行分区,并且给定数据库内的更新以与在主服务器上相同的相对顺序发生。但是,没有必要协调不同数据库之间的事务。然后还可以按数据库分发事务,这意味着从服务器上的工作线程可以处理给定数据库上的连续事务,而无需等待对其他数据库的更新完成。另请注意,由于不同数据库上的事务在从服务器上的发生顺序可能与在主服务器上的顺序不同,因此仅检查最近执行的事务并不能保证主服务器上的所有先前事务都已在从服务器上执行。这对使用多线程从站时的日志记录和恢复有影响。但是,从 MySQL Server 5.7.5 开始,您可以使用 slave_preserve_commit_order 选项变量确保将事务提交到主服务器上的二进制日志的顺序保留在从服务器上:MySQL 手册:复制从选项和变量。最后,请注意从 MySQL Server 5.7.2 开始,还支持模式内并行化 (LOGICAL_CLOCK):MySQL 手册:复制从选项和变量。

严重性轻微警告

建议调查为什么将 slave_parallel_workers 设置为 %parallel_workers%。通过发出 SET GLOBAL slave_parallel_workers = n 语句打开从站上的事务并行执行,其中 n 取决于您的特定环境。将 slave_parallel_workers = n 添加到您的 my.cnf/my.ini 文件,以确保在下次启动服务器时启用事务的并行执行。