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语句打开校验和。在my.cnf/my.ini文件中添加binlog_checksum = CRC32,以确保下次启动服务器时启用校验和。

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

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

严重程度轻微的警告

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

从二进制日志读取时,主不验证校验和

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

严重程度轻微的警告

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

从检测网络中断过高

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

严重程度轻微的警告

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

Slave未配置为只读

描述对从机的任意或无意的更新可能会中断复制或导致从机与其主机不一致。将从服务器设为read_only是非常有用的,可以确保从服务器只接受来自主服务器的更新,而不接受来自客户端的更新;它最小化了意外更新的可能性。

严重程度轻微的警告

建议在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 Server 5.6版本开始,复制现在支持在从服务器上使用多线程并行执行事务。当启用并行执行时,从SQL线程充当多个从工作线程的协调器,这些从工作线程由slave_parallel_workers服务器系统变量的值决定。注意,从库上多线程的当前实现假设数据和更新是按每个数据库分区的,并且给定数据库中的更新发生的相对顺序与主库上的相同。但是,不需要协调不同数据库之间的事务。事务还可以分布在每个数据库上,这意味着从线程上的工作线程可以处理给定数据库上的连续事务,而无需等待对其他数据库的更新完成。还要注意,由于不同数据库上的事务在从服务器上与在主服务器上以不同的顺序发生,所以简单地检查最近执行的事务并不能保证主服务器上所有以前的事务都已在从服务器上执行。这对使用多线程从库时的日志记录和恢复有影响。然而,从MySQL Server 5.7.5开始,您可以使用slave_preserve_commit_order选项变量来确保将事务提交到主服务器二进制日志的顺序保留在从服务器上:MySQL Manual: Replication slave Options and Variables。最后,请注意,从MySQL Server 5.7.2开始,还支持模式内并行化(LOGICAL_CLOCK): MySQL Manual: Replication Slave Options和Variables。

严重程度轻微的警告

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