MYSQL--架构--MGR--部署--03--配置

MYSQL–架构–MGR–部署–03–配置


1、配置说明

1.1、loose-xxxx

loose 前缀的意义在于第一次启动时还没加载组复制的plugin,可以让mysql server忽略该参数,继续启动。

1.2、loose-group_replication_group_name=“ce9be252-2b71-11e6-b8f4-00212844f856”

  1. 为mgr高可用组起一个名字,可以修改
  2. 必须是有效的UUID,在二进制日志中为组复制事件设置GTID时,将在内部使用此UUID。
    1. 使用SELECT UUID()生成一个UUID。
  3. MGR中每个实例必须完全相同

1.3、transaction_write_set_extraction=XXHASH64

  1. 写集合以XXHASH64的算法进行hash,哈希值将用于分布式冲突检测和处理、
    1. 所谓写集,是对事务中所修改的行进行的唯一标识,在后续检测并发事务之间是否修改同一行冲突时使用,它基于主键生成,所以使用组复制,表中必须要有主键。
  2. 从MySQL 8.0.2开始,此设置是默认设置,因此可以省略此行。

1.4、loose-group_replication_start_on_boot=off

  1. off:
    1. 服务器启动时,不启用组复制集群,这在设置组复制时很重要,因为它确保您可以在手动启动插件之前配置服务器。
    2. 配置成员后,可以设置为on,以便在服务器引导时自动启动Group Replication。
  2. on:
    服务器启动时,启用组复制集群

1.5、loose-group_replication_local_address=“mysql01:33061”

  1. 告诉插件 本机使用 网络地址mysql01 和 端口33061
  2. 用于组内成员内部通信

1.6、loose-group_replication_group_seeds=“mysql01:33061,mysql02:33061,mysql02:33061”

  1. 设置组成员(主机名:端口)列表,新成员使用它们建立与组的连接。
  2. 这些成员称为种子成员。
  3. 列表包含hostname:port每个组成员的列表 group_replication_local_address,但这不是强制性的,可以选择组成员的子集作为种子。

1.7、loose-group_replication_bootstrap_group=off

  1. off:
    1. 默认值
    2. 不启用 引导组,
  2. on: 表示该实例是整个集群的引导组。
  3. 注意: 引导的实例只需要一个,所以集群内其他实例都不需要开启这个参数。只有第一次初始化集群或者整个集群重启时需要通过set global来开启.

1.8、loose-group_replication_recovery_retry_count=10

尝试从供体池连接到供体时,加入该组的服务器尝试的次数是10

1.9、loose_group_replication_single_primary_mode=on

  1. ON:单主模式
  2. OFF:多主模式

1.10、loose_group_replication_enforce_update_everywhere_checks=off

  1. 强制检查每一个实例是否允许写操作
  2. 多主模式:on
  3. 单主模式:off

1.11、loose-group_replication_ip_whitelist=“172.30.45.0/24,127.0.0.1/8”

  1. 组复制的IP地址白名单
  2. 用于确定可以接受从哪个主机传入的组通信系统连接。假设Server S1中设置了该系统变量,然后使用S1引导组启动,之后,将Server S2作为joiner节点,当S2尝试与S1建立组通讯连接时,S1在接受S2的组通讯连接请求之前,先检查系统变量group_replication_ip_whitelist的设置是否允许S2访问,如果允许,则接受S2的组通讯连接请求,否则拒绝S2的组通讯连接请求。

1.12、plugin_load_add=‘group_replication.so’

启动时加载插件,这里配置的是组复制的插件。

1.12.1、plugin_load_add=“mysql_clone.so;group_replication.so”

  1. 这里加载是组复制,克隆插件
  2. 增加了 Clone Plugin,MGR 在新增节点时,可以使用 Clone Plugin 来传输集群中已有的数据给新增节点。

1.12.2、clone=FORCE_PLUS_PERMANENT

是否使用克隆插件。

  1. ON:使用
  2. OFF:不使用
  3. FORCE:强制使用
  4. FORCE_PLUS_PERMANENT:永久强制使用

1.13、gtid_mode=on

  1. 开启全局事务
  2. on:要求 enforce_gtid_consistency=on

1.15、server-id=1

Mysql服务ID

1.16、enforce_gtid_consistency=on

  1. ON:不允许任何事务违反GTID一致性
  2. OFF:允许事务违反GTID一致性。
  3. WARN:允许所有事务违反GTID一致性,但在这种情况下会生成警告

1.17、master_info_repository=TABLE

将master的连接信息写入表:mysql.salve_master_info

1.18、relay_log_info_repository=TABLE

将中继日志的信息写入表:mysql.slave_realy_log_info

1.19、binlog_checksum=none

  1. none: 服务器通过编写和检查每个事件的事件长度(而不是校验和)来验证它是否将完整事件写入二进制日志
  2. on: 使主服务器为二进制日志中的每个事件写入校验和

1.20、log_slave_updates=ON

从服务器 从 主服务器 收到的更新 记入到 从服务器 自己的二进制日志文件中。

1.21、binlog_format=ROW

以行的格式记录

1.22、loose-group_replication_member_weight=100

  1. 权重百分比,当主成员在发生故障转移时被选为master的可能性
  2. 权重越高,自动选举为primary节点的优先级就越高。

1.23、read_only=1

将MySQL设置为只读

1.24、super_read_only=1

禁止超级用户写入,包括普通用户,即针对所有用户。

1.25、binlog_transaction_dependency_tracking = WRITESET

并行复制

1.26、binlog_transaction_dependency_history_size = 25000

并行复制的容量

1.27、loose-group_replication_auto_increment_increment = 1

组复制中的自增变量

1.28、loose_group_replication_flow_control_mode = DISABLED

  1. 关闭流控机制
  2. 默认:QUOTA: 开启
  3. DISABLE:关闭流控机制
  4. 建议:由于判断机制不太准确,并且性能损耗严重,建议DISABLE

1.29、loose_group_replication_unreachable_majority_timeout = 10

  1. 网络不可达时,10秒后被踢出集群,状态变为error
  2. 发生网络分区时少数派节点离开集群的时间,建议设置为0不退出,避免分区导致少数派数据不一致

1.30、loose_group_replication_transaction_size_limit = 20971520

单个事务大小上限,建议20M,默认不限制

1.31、loose_group_replication_autorejoin_tries = 3

重试加入集群,8.0.16以上支持

1.32、loose_group_replication_compression_threshold = 131072

消息大小超过131072就进行压缩

1.33、loose_group_replication_member_weight = 50

权重在主库可以设置为60

1.34、group_replication_flow_control_period=60

流控检测频率,默认是1秒

1.35、group_replication_flow_control_applier_threshold=25000

触发流控的待执行队列长度,即replication_group_member_stats表里的COUNT_TRANSACTIONS_REMOTE_IN_APPLIER_QUEUE

1.36、group_replication_flow_control_certifier_threshold=25000

触发流控的待认证队列长度,即replication_group_member_stats表里的COUNT_TRANSACTIONS_IN_QUEUE

1.37、group_replication_communication_max_message_size=10M

将大事务切分成指定大小的小事务

1.38、group_replication_message_cache_size=1G

  1. 节点被踢出集群前缓存在本地内存中的数据大小
  2. 默认1G
  3. 并发事务高的话可以调大该值,如果物理内存很小可以调低,避免OOM

1.39、group_replication_exit_state_action=READ_ONLY

节点退出集群后进入只读模式,避免被意外修改数据导致无法重新加入集群

1.40、group_replication_consistency=EVENTUAL

从节点提升为主前,要处理积压的事务,默认EVENTUAL

  1. EVENTUAL:不管是否有积压的事务,直接在新主上进行读写操作,性能最好,单主模式下基本适用;
  2. BEFORE:如果有积压的事务,需要等积压的事务全被应用完,才能在新主上进行读写操作;
  3. AFTER:表示所有写事务需要等待所有节点确认,如果一个节点故障会导致整个集群不可用,所以不太推荐

1.40.1、EVENTUAL

  1. 不管是否有积压的事务(ro事务/rw事务),直接在新主上进行读写操作,性能最好,单主模式下基本适用
  2. ro事务 可能会导致过期的值
  3. rw事务 可能会由于冲突导致回滚。

1.40.2、BEFORE_ON_PRIMARY_FAILOVER

如果有积压的(ro事务/rw事务),需要等积压的事务(ro事务/rw事务)全被应用完,才能在新主上进行读写操作;

  1. 这确保了当主节点发生故障转移时,无论是否有意,客户机总是看到主节点上的最新值。
  2. 这保证了一致性,但也意味着客户端 在事务积压时 会有延迟。
    1. 这种延迟取决于积压的大小(可靠性优先)。

1.40.3、BEFORE

  1. rw事务 等待 所有前面的事务完成后才应用新的事务。
  2. ro事务 等待 所有前一个事务完成后才执行。
  3. 这样可保证此事务仅通过事务的延迟的影响就能读取到最新值,这种通过仅在RO事务上的同步保障,减少了每个RW事务上的同步开销。
  4. 性能约下降10%

1.40.4、AFTER

  1. rw事务 等待其它成员都应用完成其改变才开始执行。该值对 ro事务 没有影响。
  2. 在本地成员上提交事务时,任何后续事务都会读取任何组成员的写入值或更新值。将此模式与主要用于ro操作的组一起使用,以确保应用的 rw事务 在提交后可在其它节点随处同步应用。
  3. 减少了每个 ro事务 上的同步开销,通过确保仅在 rw事务 上使用同步。
  4. 性能极差

1.40.5、BEFORE_AND_AFTER

  1. rw事务 等待所有先序的事务在应用之前完成且直到其更改在其它成员上完成应用。
  2. ro事务在执行之前等待所有先前的事务完成。
  3. 这可以保证此事务在最新的数据快照上执行,并且一旦事务完成,所有后续任何不管在哪个成员上执行的事务都会读取包含其更改的数据状态。
  4. 性能极差

1.41、disabled_storage_engines=“MyISAM,BLACKHOLE,FEDERATED,ARCHIVE,MEMORY”

MGR 只支持 InnoDB 存储引擎,这个参数来禁用其他引擎。

1.42、slave_parallel_type=LOGICAL_CLOCK

  1. 提供基于组提交的并行复制,通过设置参数slave_parallel_workers>0 并且 global.slave_parallel_type=’LOGICAL_CLOCK’启用基于并行复制。
  2. 即主库在ordered_commit中的第二阶段的时候,将同一批commit的 binlog 打上一个相同的seqno标签,同一时间戳的事务在备库是可以同时执行的,因此大大简化了并行复制的逻辑,并打破了相同 DB 不能并行执行的限制。备库在执行时,具有同一seqno的事务在备库可以并行的执行,互不干扰,也不需要绑定信息,后一批seqno的事务需要等待前一批相同seqno的事务执行完后才可以执行。这样的实现方式大大提高了slave 应用relaylog的速度。

1.43、slave_preserve_commit_order=1

  1. 设置为 1,表示并行事务的最终提交顺序与 Primary 提交的顺序保持一致,以保证数据一致性。

2、单主配置

[client]
# MySQL监听端口
port = 3307
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket  = /data/mysql/tmp/mysql.sock

[mysqldump]
# 用于转储大的表。
# 强制mysqldump 从服务器中一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。
quick
# 网络传输中一次消息量的最大值
max_allowed_packet = 64M

[mysql]
# 登陆后的,自定义提示信息,这里显示 登入主机名,登陆用户名,当前数据库schema 
prompt="\u@\h: \R:\m:\s [\d]> "
# 关闭命令自动补全功能
no-auto-rehash

[mysqld]
# -------------基础配置-------begin-----------

# Mysql唯一标识,用来做主从同步(主从时开启)
server-id = 1613307

# MySQL启动用户
user = mysql

# MySQL监听端口
port = 3307

# 安装目录
basedir = /data/mysql/install
# 临时文件目录
tmpdir = /data/mysql/tmp

# 数据目录
datadir = /data/mysql/data
# pid文件所在目录
pid-file = /data/mysql/tmp/mysql.pid
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket  = /data/mysql/tmp/mysql.sock

# 默认字符集 utf8mb4
character-set-server = utf8mb4

# 事务隔离级别,为了有效保证并发读取数据的正确性(默认 Repeatables Read 即:可重复读)
# Innodb 有四种隔离级别:Read Uncommitted(未提交读)、Read Committed(已提交读)、Repeatable Read(可重复读)、Serializable(可序列化)
transaction_isolation = READ-COMMITTED

# 默认情况下,timestamp类型字段所在数据行被更新时,该字段会自动更新为当前时间 
# explicit_defaults_for_timestamp=off,数据行更新时,timestamp类型字段更新为当前时间;
# explicit_defaults_for_timestamp=on,数据行更新时,timestamp类型字段不更新为当前时间。
explicit_defaults_for_timestamp = 1

# 网络传输中一次消息量的最大值,默认 4M,必须设为 1024 的整倍数
# 一个查询语句包的最大尺寸。
# 消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。
# 该值太小则会在处理大包时产生错误。如果使用大的BLOB列,必须增加该值。
# 这个值来限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败。
max_allowed_packet = 32M

# mysql打开最大文件数
open_files_limit = 65535

# 1. 定义了mysql应该支持的sql语法,数据校验等!  
# 2. 这里表示不进行引擎替换
sql_mode = NO_ENGINE_SUBSTITUTION

# GROUP_CONCAT函数 将多个字符串连接成一个字符串A,设置A的长度最大为1024000字节
group_concat_max_len = 1024000

# 在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)
lock_wait_timeout = 120
# 禁止DNS解析
skip_name_resolve = 1
# 不区分大小写
lower-case-table-names = 1

# 修改时区为 东8区
default_time_zone = "+8:00"  

# 默认使用 mysql_native_password 插件认证
default_authentication_plugin = mysql_native_password

# 开启了binlog后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。
# 如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 
# 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 
# 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建
# 那么为什么MySQL有这样的限制呢? 因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。
log_bin_trust_function_creators = 1



# -------------基础配置-------end-----------


# -------------缓存和会话-------begin-----------
 
# 表定义的缓存大小,其默认值是1400。
table_definition_cache = 2048
# 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源(对性能有影响,默认 2000)
table_open_cache = 10240


# 全局参数,默认16,最小1,最大64
# 打开的表缓存实例的数量。为了通过减少会话间的争用来提高可伸缩性,可以将打开的表缓存划分为几个大小为table_open_cache / table_open_cache_instances的较小缓存实例。一个会话只需要锁定一个实例就可以访问DML语句。
table_open_cache_instances = 16


# Mysql 读入缓冲区大小
# 对表进行顺序扫描的请求将分配一个读入缓冲区,Mysql 会为其分配一段内存缓冲区
# 默认 128K,此参数为每线程分配 
read_buffer_size = 4M

# MySQL的随机读缓冲区大小。
# 当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。
# 默认 256K,该缓冲也是为每线程分配,所以应尽量适当设置该值,以避免内存开销过大。

read_rnd_buffer_size = 8M

# 系统中对数据进行排序时使用的 buffer,如果系统中排序比较大,且内存充足、并发不大时,可以适当增大此值
# 默认 256K,此参数为每线程分配独立的 buffer
sort_buffer_size = 8M

# join 为 ALL、index、rang 或 index_merge 时使用的 buffer
# 默认 256K,每 Thread 都会建立自己独立的 buffer
# 应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减少参与Join的"被驱动表"的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。
# 当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。
join_buffer_size =  8M


# 临时表大小
# 它规定了内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
# 如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
tmp_table_size =  16M

# 独立的内存表所允许的最大容量
# 为了防止意外创建一个超大的内存表导致用尽所有的内存资源.
max_heap_table_size = 64M

# Thread Cache 池中存放的连接线程数
# 此池中的线程不是启动服务时就创建的,而是随着连接线程的创建和使用,逐渐将用完的线程存入其中,达到此值后将不再缓存连接线程
# 如果线程池存在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓存,很快就能响应连接请求。
# 缓存命中率计算公式:Thread_Cache_Hit =(Connections - Thread_created) / Connections * 100%
# 系统运行一段时间后,Thread Cache 命中率应该保持在 90% 以上
thread_cache_size = 128


# 参数表示每线程的堆栈大小
thread_stack = 512K

# 用来缓存 MyISAM存储引擎 的索引
# 默认 8M,如果使用 Innodb 存储引擎,此值设为 64M 或更小
# 计算公式:key_reads / key_read_requests * 100% 的值小于 0.1%
key_buffer_size = 4M

# 双路排序:
# 读取行指针和order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
# 双路排序的开销可能会非常巨大,因为他会读取表两次,第二次读取会引发大量的随机IO,对于myisam涞说,这个代价尤其昂贵,myisam表利用系统调用去提取每行的数据。

# 单路排序:
# 读取查询需要的所有列,按照order by 列对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。、

# mysql有两种文件排序算法(双路排序和单路排序),如果需要排序的列的总大小加上order by列的大小超过了 max_length_for_sort_data定义的字节,mysql就会使用双路排序,

max_length_for_sort_data = 8096

# 默认8M
# 当对MyISAM非空表执行insert … select/ insert … values(…),(…)或者load data infile时,使用树状cache缓存数据,每个thread分配一个
# 注:当对MyISAM表load 大文件时,调大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size会极大提升速度
bulk_insert_buffer_size = 4M


# -------------缓存和会话-------end-----------




# -------------连接设置-------begin-----------
 
# 指的是mysql在关闭一个交互的连接之前所要等待的秒数
# 交互连接:如mysql gui tool中的连接
interactive_timeout = 300

# 服务器关闭非交换连接之前等待活动的秒数
# 默认 28800秒
# 注意:在 my.cnf 中修改这个参数需要配合 interactive_timeout(超时间隔)参数一起修改,否则不生效 
# Mysql 处理完一条连接后所等待释放的时间
# 如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误
# 如果这个值很低,比如 5,可能会导致出现 "ERROR 2006(HY000) MySQL server has gone away" 的错误,出现这个错误还有可能是 max_allowed_packet 设置过小
wait_timeout = 300

# Mysql 最大连接数,直接影响 Mysql 应用的并发处理能力 
# 注意:每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存  
# MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,因此MySQL的实际最大可连接数为max_connections+1;
# 这个参数的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
# 增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
# 该参数设置过小的最明显特征是出现"Too many connections"错误
max_connections = 3000

# 设置单个用户最大连接数限制,0不限制
max_user_connections = 0   

# 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关
# 达到此上限后会无条件阻止其连接数据库,防止暴力破解密码的情况
# 默认 100 
max_connect_errors = 1000

# Mysql 连接请求队列存放数,当某一时刻客户端连接请求过多,造成 Mysql Server 无法为其建立连接时存放的数量,最大 65535(增大时需同时调整 OS 级别的网络监听队列限制)
back_log = 2048

# -------------连接设置-------end-----------




# -------------日志设置-------begin-----------
 
# 错误日志文件位置
log-error = /data/mysql/logs/error.log

# 慢查询日志存放位置
slow_query_log_file = /data/mysql/logs/slow.log

# 开启二进制日志功能,binlog数据位置
log-bin = /data/mysql/binlog/mysql-bin

# relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,
# 然后SQL线程会读取relay-log日志的内容并应用到从服务器
relay-log = /data/mysql/relaylog/mysql-relay-bin

# 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句(一般临时开启即可)
slow_query_log = 1
# 定义执行时间超过多少秒为慢查询,默认 10s
long_query_time = 1

# 该参数决定是否记录未使用索引的SQL
log_queries_not_using_indexes =1

# 用于设置每分钟允许记录到慢查询日志的未使用索引的 SQL 次数,默认为0,即不限制。
log_throttle_queries_not_using_indexes = 60

# 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中;
min_examined_row_limit = 1000

# 该参数决定是否记录管理类的命令,有 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,REPAIR TABLE
log_slow_admin_statements = 1


# 该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。
log_slow_slave_statements = 1

 
# 	基于SQL语句的复制(statement-based replication, SBR),格式 STATEMENT
# 	基于行的复制(row-based replication, RBR),格式 ROW
# 	混合模式复制(mixed-based replication, MBR),格式 MIXED
binlog_format = row
 

# binlog日志记录所有前镜像和后镜像。
binlog_row_image = full

 

# 二进制日志缓冲大小,此参数是为每 Session 单独分配的,当一个线程开始一个事务时,Mysql 就会为此 Session 分配一个 binlog cache,当这个事务提交时,binlog cache 中的数据被写入 binlog 文件 
# 当事务的记录大于设定的binlog_cache_size时,mysql会把缓冲区中的日志信息写入一个临时文件中,所以该值也不能设置过小。
binlog_cache_size = 4M
# 为每个session 最大可分配的内存,在事务过程中用来存储二进制日志的缓存。
max_binlog_cache_size = 2G

 
# 如果二进制日志写入的内容超出给定值,日志就会发生滚动。
# 你不能将该变量设置为大于1GB或小于4096字节。
# 默认值是1GB。
max_binlog_size = 1G


# binlog过期时间,8.0已废弃
# expire_logs_days = 7

 
# slave复制进程不随mysql启动而启动skip-slave-start
skip_slave_start = 1  

# 中继日志文件最大大小
max_relay_log_size = 500M

# 中继日志自我修复;
# 当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
relay_log_recovery = 1


# SQL 线程在执行完一个relay log后自动将其删除
relay-log-purge = 1

# 将master的连接信息写入表:mysql.salve_master_info
master_info_repository = TABLE

# 将中继日志的信息写入表:mysql.slave_realy_log_info
relay_log_info_repository = TABLE

# error log、slow_log、genera log 记录日志的显示时间为系统时间
log_timestamps = SYSTEM
# 用来验证 binlog内容的正确性。保证主从同步
binlog_checksum = 1

# 开启全局事务
# on:要求 enforce_gtid_consistency=on
gtid_mode = on
# 从服务器 从 主服务器 收到的更新 记入到 从服务器 自己的二进制日志文件中。
log_slave_updates = 1

# ON:不允许任何事务违反GTID一致性 
# OFF:允许事务违反GTID一致性。
# WARN:允许所有事务违反GTID一致性,但在这种情况下会生成警告
enforce_gtid_consistency = 1


# 这个变量用于在MySQL重启或启动的时候寻找GTIDs过程中,控制binlog 如何遍历的算法?
# FALSE 时:
# 为了初始化 gtid_executed,算法是: 从newest_binlog -> oldest_binlog 方向遍历读取,如果发现有Previous_gtids_log_event,那么就停止遍历
# 为了初始化 gtid_purged,算法是:   从oldest_binlog -> newest_binlog 方向遍历读取, 如果发现有Previous_gtids_log_event(not # empty)或者 至少有一个Gtid_log_event的文件,那么就停止遍历
# 当TRUE 时:
# 为了初始化 gtid_executed,算法是: 只需要读取newest_binlog
# 为了初始化 gtid_purged,算法是: 只需要读取oldest_binlog
binlog_gtid_simple_recovery = 1

# log security
  
 
# 值为 n 时代表进行 n 次事务提交后,Mysql 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
# 默认:0
# 设置为 0 时:代表事务提交后,Mysql 不做 fsync 之类的磁盘同步指令刷新 binlog_cache 中的信息到磁盘,而让 Filesystem 自行决定什么时候同步,或者 cache 满了之后才同步磁盘。性能最好,但是风险也最大。当系统崩溃时 binlog_cache 中的所有 binlog 信息都会丢失。
# 设置为 1 时:是最安全但是性能损耗最大。当系统崩溃时,最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有实质性的影响。
sync_binlog = 1000


# Innodb 事务日志刷新方式 
# 当设为 0 时:提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘,极端情况下会丢失一秒的数据
# 性能相对高一些。

# 当设为 1 时:提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。 
# 性能是最差的。

# 当设为 2 时 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。
# 性能是最好的,但故障后丢失数据也最多(OS 跟主机硬件、供电足够安全可以选择,或对数据少量丢失可以接受)。

innodb_flush_log_at_trx_commit = 2


# -------------日志设置-------end-----------


# -------------并行复制-------begin-----------

# 并行复制配置,配置为LOGICAL_CLOCK,那么 slave_preserve_commit_order = on
slave_parallel_type = LOGICAL_CLOCK
slave_preserve_commit_order = on

# 4个worker线程并发执行relay log中主库提交的事务。
slave_parallel_workers = 4

 
# 如果在同一台主机部署多个实例,并启动增强半同步,需指定以下参数
# 套接字
mysqlx_socket=/data/mysql/tmp/mysqlx.sock
# 端口
mysqlx_port = 13308
# -------------并行复制-------end-----------

# -------------增强半同步复制-------begin-----------
 
# 插件目录
# plugin_dir=/data/mysql/install/lib/plugin
# 启动的时候,加载的插件
# plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# 启动的时候,直接安装插件  semisync_master.so
# loose_rpl_semi_sync_master_enabled = 1

# 启动的时候,直接安装插件  semisync_slave.so
# loose_rpl_semi_sync_slave_enabled = 1

# 超时5秒,切回异步
# loose_rpl_semi_sync_master_timeout = 5000

# -------------增强半同步复制-------end-----------



# -------------INNODB 配置-------begin-----------
 
# 企业级部署,可以直接初始化10G

# InnoDB 用来高速缓冲数据和索引内存缓冲大小。 
# 更大的设置可以使访问数据时减少磁盘 I/O。
innodb_buffer_pool_size = 7G

# innodb_buffer_pool_size/innodb_buffer_pool_instances 可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写。
innodb_buffer_pool_instances = 8

# 启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup = 1

# 关闭数据库时把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_at_shutdown = 1

# 指定一个大小为 128M 的、可扩展的 ibdata1,ibdata2 数据文件
# innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend


# 针对每个缓冲池实例,指定页面清理线程扫描,以查找要刷新的脏页面的缓冲池LRU列表的下行距离。
innodb_lru_scan_depth = 4096

# 在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)
innodb_lock_wait_timeout = 10

# 参数定义了InnoDB后台任务每秒可用的I/O操作数(IOPS),例如用于从buffer pool中刷新脏页和从change buffer中合并数据。
# innodb后台进程最大的I/O性能指标,影响刷新赃页和插入缓冲的数量,在高转速磁盘下,尤其是现在SSD盘得到普及,可以根据需要适当提高该参数的值
innodb_io_capacity = 10000

# innodb_io_capacity的最大数
innodb_io_capacity_max = 15000

# 控制着innodb数据文件及redo log的打开、刷写模式
# 有三个值:fdatasync(默认),O_DSYNC,O_DIRECT
# 默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer
# 为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
# 为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log
innodb_flush_method = O_DIRECT

# innodb_undo_tablespaces已废弃,innodb默认创建2个undo表空间,如果需要更多,后期使用CREATE UNDO TABLESPACE命令进行添加
# innodb_undo_tablespaces = 127


# undo表空间文件超过此值即标记为可收缩
innodb_max_undo_log_size = 4G
 
# 开启undo表空间的自动压缩
innodb_undo_log_truncate = 1

# 控制buffer pool刷脏页时是否把脏页邻近的其他脏页一起刷到磁盘,在传统的机械硬盘时代,打开这个参数能够减少磁盘寻道的开销,显著提升性能。
innodb_flush_neighbors = 0
 
# InnoDB 存储引擎使用一个指定大小的Redo log空间(一个环形的数据结构),Redo log的空间通过innodb_log_file_size和innodb_log_files_in_group(默认为2)参数来调节。将这俩参数相乘即可得到总的可用Redo log 空间
innodb_log_file_size = 2G
# 指定有5个日志组
innodb_log_files_in_group = 5


# 事务日志所使用的缓冲区。Innodb 在写事务日志时,为了提高写 Log 的 IO 性能,先将信息写入 Innodb Log Buffer 中,当满足 Innodb_flush_log_trx_commit 参数或日志缓冲区写满时,再将日志同步到磁盘中。
# 设置大的日志缓冲可以减少磁盘I/O。
# 默认 8M,一般设为 16~64M 即可,可以通过 show status like 'innodb_log%'; 查看状态
innodb_log_buffer_size = 32M

# 在mysql8.0已废弃innodb_large_prefix
# innodb_large_prefix = 1

# Innodb 线程并发数,0 为不限制,默认 0
innodb_thread_concurrency = 0

# 当mysql 数据库发生死锁时, innodb status 里面会记录最后一次死锁的相关信息,但mysql 错误日志里面 
# 不会记录死锁相关信息,要想记录,启动 innodb_print_all_deadlocks  参数 。
innodb_print_all_deadlocks = 1


# 开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。
innodb_strict_mode = 1

# 开启碎片回收线程。
# 这个应该能让碎片回收得更及时而且不影响其他线程的操作
innodb_purge_threads = 4

# Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 4
innodb_write_io_threads = 8
innodb_read_io_threads = 8


# 刷脏数据的线程个数
innodb_page_cleaners = 8

# innodb_sort_buffer_size 是指对数据插入时,针对数据写入内存,排序后,在一次写入到磁盘的缓冲区的大小. 实际上innodb_sort_buffer_size 本身和查询无关,和DML 操作有关,如果系统上的表有索引的情况下,并且UPDATE, INSERT数据频繁,则 innodb_sort_buffer_size 可以提高数据的写入索引的速度.
innodb_sort_buffer_size = 32M

# 开启独享表空间
innodb_file_per_table = 1

# 来控制使用永久性的统计数据时,计算统计数据时采样的页面数量。该值设置的越大,统计出的 n_rows 值越精确,但是统计耗时也就最久;该值设置的越小,统计出的 n_rows 值越不精确,但是统计耗时特别少。
innodb_stats_persistent_sample_pages = 64
 
# 控制着在向有auto_increment 列的表插入数据时,相关锁的行为,通过对它的设置可以达到性能与安全(主从的数据一致性)的平衡
# 值为2:没有auto_inc锁,这个模式下的性能是最好的;但是它也有一个问题,就是对于同一个语句来说它所得到的auto_incremant值可能不是连续的。
innodb_autoinc_lock_mode = 2


# 因为在online ddl过程中需要保持delete、update、insert这些数据,所以需要一个日志去保持,这个参数就是限制这个日志的最大大小
# 当ddl过程中需要的这个日志的大小比这个限制还大的时候就会报错。
innodb_online_alter_log_max_size = 4G


# 限制Innodb能打开的表的数量
innodb_open_files = 65535

# InnoDB使用的校验算法。
innodb_checksum_algorithm = crc32

# 值为1:一旦锁等待超时,是事务内sql将全部回滚,且释放之前请求的锁。、
# 值为0:一旦以begin;start transaction;等语句开启一个事务,当锁等待超时后,该事务请求的锁将不释放,直到事务提交或回滚或会话超时;
innodb_rollback_on_timeout = 1

# 内部临时表的存储引擎,在mysql8.0.16中已废弃
# internal_tmp_disk_storage_engine = InnoDB

# 启用InnoDB的status file,便于管理员查看以及监控 
innodb_status_file = 1 
 
# 禁用标准InnoDB监视器
innodb_status_output = 0
# 禁用 InnoDB锁定监视器
innodb_status_output_locks = 0
# 是在放弃CPU时间片之前进行多少次等待,
innodb_sync_spin_loops = 100

# innodb_sync_spin_loops是在放弃CPU时间片之前进行多少次等待,innodb_spin_wait_delay是一次等待的时间。。
innodb_spin_wait_delay = 30

# 控制是否要开启同步刷脏功能。 
innodb_flush_sync = 0

# 控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90
# 这个参数的另一个用处:当Innodb的内存分配过大,致使swap占用严重时,可以适当的减小调整这个值,使达到swap空间释放出来。
# 建义:这个值最大在90%,最小在15%。太大,缓存中每次更新需要致换数据页太多,太小,放的数据页太小,更新操作太慢。
innodb_max_dirty_pages_pct = 50

# 默认是关闭了,这个会对INFORMATION_SCHEMA中的一些表进行查询操作,以方便索引统计信息,如果读要求高的建议关闭
innodb_stats_on_metadata = 0


# -------------INNODB 配置-------end-----------


# -------------mysql8 配置-------begin-----------

 
# 控制日志记录的详细程度 1是ERROR,2是ERROR, WARNING,3是ERROR, WARNING, INFORMATION
log_error_verbosity = 3

# 值为1:将ddl日志存储在mysql.innodb_ddl_log表中。
innodb_print_ddl_logs = 1
# binlog过期时间,604800秒 即7天
binlog_expire_logs_seconds = 604800

# 开启后 自动调整以下参数
# innodb_buffer_pool_size
# innodb_log_file_size
# innodb_flush_method
# innodb_log_files_in_group 
innodb_dedicated_server = OFF

# -------------8.0的 配置-------end-----------

# -------------PERFORMANCE_SCHEMA库 设置-------begin-----------

# 开启性能优化的引擎
performance_schema = 1


# 是否在MySQL Server启动时就启用某些采集器,由于instruments配置项多达数千个,所以该配置项支持key-value模式,还支持%号进行通配等 
# 启用所有的instruments
performance_schema_instrument = '%=on'
performance-schema-instrument='stage/%=ON'


# 控制events_statements_summary_by_digest表中的最大行数。
# 如果产生的语句摘要信息超过此最大值,便无法继续存入该表,此时performance_schema会增加状态变量
performance_schema_digests_size = 40000

# 加载到内存的表数量
performance_schema_max_table_instances = 40000

# 控制存入events_statements_current,events_statements_history和events_statements_history_long语句事件表中的SQL_TEXT列的最大SQL长度字节数。# 超出系统变量performance_schema_max_sql_text_length的部分将被丢弃,不会记录
# 一般情况下不需要调整该参数,除非被截断的部分与其他SQL比起来有很大差异
performance_schema_max_sql_text_length = 4096

# 控制 SQL语句文本在存入performance_schema时的限制长度,该变量与max_digest_length变量相关(max_digest_length变量含义请自行查阅相关资料)
performance_schema_max_digest_length = 4096
 
# 是否在mysql server启动时就开启events_statements_current表的记录功能(该表记录当前的语句事件信息),启动之后也可以在setup_consumers表中使用UPDATE语句进行动态更新setup_consumers配置表中的events_statements_current配置项,默认值为TRUE
performance-schema-consumer-events-stages-current=ON

# 与performance-schema-consumer-events-stages-current类似,但该选项是用于配置是否记录语句事件短历史信息,默认为TRUE
performance-schema-consumer-events-stages-history=ON

# 与performance-schema-consumer-events-stages-current类似,但该选项是用于配置是否记录语句事件长历史信息,默认为FALSE
performance-schema-consumer-events-stages-history-long=ON
# 控制最多保留多少条事务记录(包含所有session)
performance-schema-consumer-events-transactions-history-long=ON


# -------------PERFORMANCE_SCHEMA库 设置-------end-----------


# -------------INNODB 监控-------begin-----------
 
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"

# -------------INNODB 监控-------end-----------

# -------------MGR 设置-------begin-----------

# 将MySQL设置为只读
read_only=1
# super_read_only=1
# 并行复制
binlog_transaction_dependency_tracking = WRITESET
# 写集合以XXHASH64的算法进行hash,哈希值将用于分布式冲突检测和处理、
transaction-write-set-extraction = XXHASH64
# 并行复制的容量
binlog_transaction_dependency_history_size = 25000
# 组复制中的自增变量
loose-group_replication_auto_increment_increment = 1
# 服务器通过编写和检查每个事件的事件长度(而不是校验和)来验证它是否将完整事件写入二进制日志
binlog_checksum = NONE
# 为mgr高可用组起一个名字,可以修改
loose-group_replication_group_name = 'd8316b12-a119-4850-bdb1-37275c5a3f3f'
# 服务器启动时,不启用组复制集群,这在设置组复制时很重要,因为它确保您可以在手动启动插件之前配置服务器。
loose-group_replication_start_on_boot = off
# 告诉插件 本机使用 网络地址mysql01 和 端口33061
loose-group_replication_local_address = 111.200.6.35:13307
# 设置组成员(主机名:端口)列表,新成员使用它们建立与组的连接。
loose-group_replication_group_seeds = "111.200.6.35:13307,111.200.6.37:13307,111.200.6.54:13307"
# 不启用 引导组
loose-group_replication_bootstrap_group = off
# 单主模式
loose_group_replication_single_primary_mode = on
# 强制检查每一个实例是否允许写操作
loose_group_replication_enforce_update_everywhere_checks = off
 
 # 关闭流控机制
loose_group_replication_flow_control_mode = DISABLED
# 网络不可达时,10秒后被踢出集群,状态变为error
loose_group_replication_unreachable_majority_timeout = 10      
  # 允许的事务大小,建议20M,默认不限制  
loose_group_replication_transaction_size_limit = 20971520     
  # auto-rejoin,重试加入集群,8.0.16以上支持 
loose_group_replication_autorejoin_tries = 3    
# 消息大小超过131072就进行压缩               
loose_group_replication_compression_threshold = 131072
# 权重在主库可以设置为60
loose_group_replication_member_weight = 50                      
# compress binlog, ratio: 50%    # 以下2个参数仅适用于8.0.20及以上版本
binlog_transaction_compression = on
binlog_transaction_compression_level_zstd = 10



# -------------MGR 设置-------end-----------


# -------------以下参数将自动填充-----------

 
# 基本参数
port=3307
server_id=12201651

innodb_buffer_pool_size=15990M
read_buffer_size=2M
read_rnd_buffer_size=4M
sort_buffer_size=4M
join_buffer_size=4M
tmp_table_size=8M

# mgr配置
# uuid  自动生成一个
loose_group_replication_group_name="e6670473-4a7c-4030-b99c-83e57ffeaeb6"
loose_group_replication_local_address=11.207.0.146:13307
loose_group_replication_group_seeds=11.207.0.85:13307,11.207.0.146:13307,11.207.0.151:13307
loose_group_replication_ip_whitelist=11.207.0.0/24


3、多主配置

[client]
# MySQL监听端口
port = 3307
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket  = /data/mysql/tmp/mysql.sock

[mysqldump]
# 用于转储大的表。
# 强制mysqldump 从服务器中一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。
quick
# 网络传输中一次消息量的最大值
max_allowed_packet = 64M

[mysql]
# 登陆后的,自定义提示信息,这里显示 登入主机名,登陆用户名,当前数据库schema 
prompt="\u@\h: \R:\m:\s [\d]> "
# 关闭命令自动补全功能
no-auto-rehash

[mysqld]
# -------------基础配置-------begin-----------

# Mysql唯一标识,用来做主从同步(主从时开启)
server-id = 1613307

# MySQL启动用户
user = mysql

# MySQL监听端口
port = 3307

# 安装目录
basedir = /data/mysql/install
# 临时文件目录
tmpdir = /data/mysql/tmp

# 数据目录
datadir = /data/mysql/data
# pid文件所在目录
pid-file = /data/mysql/tmp/mysql.pid
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket  = /data/mysql/tmp/mysql.sock

# 默认字符集 utf8mb4
character-set-server = utf8mb4

# 事务隔离级别,为了有效保证并发读取数据的正确性(默认 Repeatables Read 即:可重复读)
# Innodb 有四种隔离级别:Read Uncommitted(未提交读)、Read Committed(已提交读)、Repeatable Read(可重复读)、Serializable(可序列化)
transaction_isolation = READ-COMMITTED

# 默认情况下,timestamp类型字段所在数据行被更新时,该字段会自动更新为当前时间 
# explicit_defaults_for_timestamp=off,数据行更新时,timestamp类型字段更新为当前时间;
# explicit_defaults_for_timestamp=on,数据行更新时,timestamp类型字段不更新为当前时间。
explicit_defaults_for_timestamp = 1

# 网络传输中一次消息量的最大值,默认 4M,必须设为 1024 的整倍数
# 一个查询语句包的最大尺寸。
# 消息缓冲区被初始化为net_buffer_length字节,但是可在需要时增加到max_allowed_packet个字节。
# 该值太小则会在处理大包时产生错误。如果使用大的BLOB列,必须增加该值。
# 这个值来限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制,导致写入或者更新失败。
max_allowed_packet = 32M

# mysql打开最大文件数
open_files_limit = 65535

# 1. 定义了mysql应该支持的sql语法,数据校验等!  
# 2. 这里表示不进行引擎替换
sql_mode = NO_ENGINE_SUBSTITUTION

# GROUP_CONCAT函数 将多个字符串连接成一个字符串A,设置A的长度最大为1024000字节
group_concat_max_len = 1024000

# 在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)
lock_wait_timeout = 120
# 禁止DNS解析
skip_name_resolve = 1
# 不区分大小写
lower-case-table-names = 1

# 修改时区为 东8区
default_time_zone = "+8:00"  

# 默认使用 mysql_native_password 插件认证
default_authentication_plugin = mysql_native_password

# 开启了binlog后,这个变量就会启用。它控制是否可以信任存储函数创建者,不会创建写入二进制日志引起不安全事件的存储函数。
# 如果设置为0(默认值),用户不得创建或修改存储函数,除非它们具有除CREATE ROUTINE或ALTER ROUTINE特权之外的SUPER权限。 
# 设置为0还强制使用DETERMINISTIC特性或READS SQL DATA或NO SQL特性声明函数的限制。 
# 如果变量设置为1,MySQL不会对创建存储函数实施这些限制。 此变量也适用于触发器的创建
# 那么为什么MySQL有这样的限制呢? 因为二进制日志的一个重要功能是用于主从复制,而存储函数有可能导致主从的数据不一致。所以当开启二进制日志后,参数log_bin_trust_function_creators就会生效,限制存储函数的创建、修改、调用。
log_bin_trust_function_creators = 1



# -------------基础配置-------end-----------


# -------------缓存和会话-------begin-----------
 
# 表定义的缓存大小,其默认值是1400。
table_definition_cache = 2048
# 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源(对性能有影响,默认 2000)
table_open_cache = 10240


# 全局参数,默认16,最小1,最大64
# 打开的表缓存实例的数量。为了通过减少会话间的争用来提高可伸缩性,可以将打开的表缓存划分为几个大小为table_open_cache / table_open_cache_instances的较小缓存实例。一个会话只需要锁定一个实例就可以访问DML语句。
table_open_cache_instances = 16


# Mysql 读入缓冲区大小
# 对表进行顺序扫描的请求将分配一个读入缓冲区,Mysql 会为其分配一段内存缓冲区
# 默认 128K,此参数为每线程分配 
read_buffer_size = 4M

# MySQL的随机读缓冲区大小。
# 当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。
# 默认 256K,该缓冲也是为每线程分配,所以应尽量适当设置该值,以避免内存开销过大。

read_rnd_buffer_size = 8M

# 系统中对数据进行排序时使用的 buffer,如果系统中排序比较大,且内存充足、并发不大时,可以适当增大此值
# 默认 256K,此参数为每线程分配独立的 buffer
sort_buffer_size = 8M

# join 为 ALL、index、rang 或 index_merge 时使用的 buffer
# 默认 256K,每 Thread 都会建立自己独立的 buffer
# 应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减少参与Join的"被驱动表"的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。
# 当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。
join_buffer_size =  8M


# 临时表大小
# 它规定了内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
# 如果内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下
tmp_table_size =  16M

# 独立的内存表所允许的最大容量
# 为了防止意外创建一个超大的内存表导致用尽所有的内存资源.
max_heap_table_size = 64M

# Thread Cache 池中存放的连接线程数
# 此池中的线程不是启动服务时就创建的,而是随着连接线程的创建和使用,逐渐将用完的线程存入其中,达到此值后将不再缓存连接线程
# 如果线程池存在的空闲线程,需要重新建立新连接,则会优先调用线程池中的缓存,很快就能响应连接请求。
# 缓存命中率计算公式:Thread_Cache_Hit =(Connections - Thread_created) / Connections * 100%
# 系统运行一段时间后,Thread Cache 命中率应该保持在 90% 以上
thread_cache_size = 128


# 参数表示每线程的堆栈大小
thread_stack = 512K

# 用来缓存 MyISAM存储引擎 的索引
# 默认 8M,如果使用 Innodb 存储引擎,此值设为 64M 或更小
# 计算公式:key_reads / key_read_requests * 100% 的值小于 0.1%
key_buffer_size = 4M

# 双路排序:
# 读取行指针和order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
# 双路排序的开销可能会非常巨大,因为他会读取表两次,第二次读取会引发大量的随机IO,对于myisam涞说,这个代价尤其昂贵,myisam表利用系统调用去提取每行的数据。

# 单路排序:
# 读取查询需要的所有列,按照order by 列对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。、

# mysql有两种文件排序算法(双路排序和单路排序),如果需要排序的列的总大小加上order by列的大小超过了 max_length_for_sort_data定义的字节,mysql就会使用双路排序,

max_length_for_sort_data = 8096

# 默认8M
# 当对MyISAM非空表执行insert … select/ insert … values(…),(…)或者load data infile时,使用树状cache缓存数据,每个thread分配一个
# 注:当对MyISAM表load 大文件时,调大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size会极大提升速度
bulk_insert_buffer_size = 4M


# -------------缓存和会话-------end-----------




# -------------连接设置-------begin-----------
 
# 指的是mysql在关闭一个交互的连接之前所要等待的秒数
# 交互连接:如mysql gui tool中的连接
interactive_timeout = 300

# 服务器关闭非交换连接之前等待活动的秒数
# 默认 28800秒
# 注意:在 my.cnf 中修改这个参数需要配合 interactive_timeout(超时间隔)参数一起修改,否则不生效 
# Mysql 处理完一条连接后所等待释放的时间
# 如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误
# 如果这个值很低,比如 5,可能会导致出现 "ERROR 2006(HY000) MySQL server has gone away" 的错误,出现这个错误还有可能是 max_allowed_packet 设置过小
wait_timeout = 300

# Mysql 最大连接数,直接影响 Mysql 应用的并发处理能力 
# 注意:每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存  
# MySQL无论如何都会保留一个用于管理员(SUPER)登陆的连接,因此MySQL的实际最大可连接数为max_connections+1;
# 这个参数的最大值(实际最大可连接数)为16384,即该参数最大值不能超过16384,即使超过也以16384为准;
# 增加max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等;
# 该参数设置过小的最明显特征是出现"Too many connections"错误
max_connections = 3000

# 设置单个用户最大连接数限制,0不限制
max_user_connections = 0   

# 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关
# 达到此上限后会无条件阻止其连接数据库,防止暴力破解密码的情况
# 默认 100 
max_connect_errors = 1000

# Mysql 连接请求队列存放数,当某一时刻客户端连接请求过多,造成 Mysql Server 无法为其建立连接时存放的数量,最大 65535(增大时需同时调整 OS 级别的网络监听队列限制)
back_log = 2048

# -------------连接设置-------end-----------




# -------------日志设置-------begin-----------
 
# 错误日志文件位置
log-error = /data/mysql/logs/error.log

# 慢查询日志存放位置
slow_query_log_file = /data/mysql/logs/slow.log

# 开启二进制日志功能,binlog数据位置
log-bin = /data/mysql/binlog/mysql-bin

# relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,
# 然后SQL线程会读取relay-log日志的内容并应用到从服务器
relay-log = /data/mysql/relaylog/mysql-relay-bin

# 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句(一般临时开启即可)
slow_query_log = 1
# 定义执行时间超过多少秒为慢查询,默认 10s
long_query_time = 1

# 该参数决定是否记录未使用索引的SQL
log_queries_not_using_indexes =1

# 用于设置每分钟允许记录到慢查询日志的未使用索引的 SQL 次数,默认为0,即不限制。
log_throttle_queries_not_using_indexes = 60

# 对于查询扫描行数小于此参数的SQL,将不会记录到慢查询日志中;
min_examined_row_limit = 1000

# 该参数决定是否记录管理类的命令,有 ALTER TABLE,ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE,REPAIR TABLE
log_slow_admin_statements = 1


# 该参数在从库上设置,决定是否记录在复制过程中超过long_query_time的SQL,如果binlog格式是row,则即使开启了该参数,也不会记录相关SQL。
log_slow_slave_statements = 1

 
# 	基于SQL语句的复制(statement-based replication, SBR),格式 STATEMENT
# 	基于行的复制(row-based replication, RBR),格式 ROW
# 	混合模式复制(mixed-based replication, MBR),格式 MIXED
binlog_format = row
 

# binlog日志记录所有前镜像和后镜像。
binlog_row_image = full

 

# 二进制日志缓冲大小,此参数是为每 Session 单独分配的,当一个线程开始一个事务时,Mysql 就会为此 Session 分配一个 binlog cache,当这个事务提交时,binlog cache 中的数据被写入 binlog 文件 
# 当事务的记录大于设定的binlog_cache_size时,mysql会把缓冲区中的日志信息写入一个临时文件中,所以该值也不能设置过小。
binlog_cache_size = 4M
# 为每个session 最大可分配的内存,在事务过程中用来存储二进制日志的缓存。
max_binlog_cache_size = 2G

 
# 如果二进制日志写入的内容超出给定值,日志就会发生滚动。
# 你不能将该变量设置为大于1GB或小于4096字节。
# 默认值是1GB。
max_binlog_size = 1G


# binlog过期时间,8.0已废弃
# expire_logs_days = 7

 
# slave复制进程不随mysql启动而启动skip-slave-start
skip_slave_start = 1  

# 中继日志文件最大大小
max_relay_log_size = 500M

# 中继日志自我修复;
# 当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
relay_log_recovery = 1


# SQL 线程在执行完一个relay log后自动将其删除
relay-log-purge = 1

# 将master的连接信息写入表:mysql.salve_master_info
master_info_repository = TABLE

# 将中继日志的信息写入表:mysql.slave_realy_log_info
relay_log_info_repository = TABLE

# error log、slow_log、genera log 记录日志的显示时间为系统时间
log_timestamps = SYSTEM
# 用来验证 binlog内容的正确性。保证主从同步
binlog_checksum = 1

# 开启全局事务
# on:要求 enforce_gtid_consistency=on
gtid_mode = on
# 从服务器 从 主服务器 收到的更新 记入到 从服务器 自己的二进制日志文件中。
log_slave_updates = 1

# ON:不允许任何事务违反GTID一致性 
# OFF:允许事务违反GTID一致性。
# WARN:允许所有事务违反GTID一致性,但在这种情况下会生成警告
enforce_gtid_consistency = 1


# 这个变量用于在MySQL重启或启动的时候寻找GTIDs过程中,控制binlog 如何遍历的算法?
# FALSE 时:
# 为了初始化 gtid_executed,算法是: 从newest_binlog -> oldest_binlog 方向遍历读取,如果发现有Previous_gtids_log_event,那么就停止遍历
# 为了初始化 gtid_purged,算法是:   从oldest_binlog -> newest_binlog 方向遍历读取, 如果发现有Previous_gtids_log_event(not # empty)或者 至少有一个Gtid_log_event的文件,那么就停止遍历
# 当TRUE 时:
# 为了初始化 gtid_executed,算法是: 只需要读取newest_binlog
# 为了初始化 gtid_purged,算法是: 只需要读取oldest_binlog
binlog_gtid_simple_recovery = 1

# log security
  
 
# 值为 n 时代表进行 n 次事务提交后,Mysql 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
# 默认:0
# 设置为 0 时:代表事务提交后,Mysql 不做 fsync 之类的磁盘同步指令刷新 binlog_cache 中的信息到磁盘,而让 Filesystem 自行决定什么时候同步,或者 cache 满了之后才同步磁盘。性能最好,但是风险也最大。当系统崩溃时 binlog_cache 中的所有 binlog 信息都会丢失。
# 设置为 1 时:是最安全但是性能损耗最大。当系统崩溃时,最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有实质性的影响。
sync_binlog = 1000


# Innodb 事务日志刷新方式 
# 当设为 0 时:提交事务的时候,不立即把 redo log buffer 里的数据刷入磁盘文件的,而是依靠 InnoDB 的主线程每秒执行一次刷新到磁盘,极端情况下会丢失一秒的数据
# 性能相对高一些。

# 当设为 1 时:提交事务的时候,就必须把 redo log 从内存刷入到磁盘文件里去,只要事务提交成功,那么 redo log 就必然在磁盘里了。 
# 性能是最差的。

# 当设为 2 时 提交事务的时候,把 redo 日志写入磁盘文件对应的 os cache 缓存里去,而不是直接进入磁盘文件,可能 1 秒后才会把 os cache 里的数据写入到磁盘文件里去。
# 性能是最好的,但故障后丢失数据也最多(OS 跟主机硬件、供电足够安全可以选择,或对数据少量丢失可以接受)。

innodb_flush_log_at_trx_commit = 2


# -------------日志设置-------end-----------


# -------------并行复制-------begin-----------

# 并行复制配置,配置为LOGICAL_CLOCK,那么 slave_preserve_commit_order = on
slave_parallel_type = LOGICAL_CLOCK
slave_preserve_commit_order = on

# 4个worker线程并发执行relay log中主库提交的事务。
slave_parallel_workers = 4

 
# 如果在同一台主机部署多个实例,并启动增强半同步,需指定以下参数
# 套接字
mysqlx_socket=/data/mysql/tmp/mysqlx.sock
# 端口
mysqlx_port = 13308
# -------------并行复制-------end-----------

# -------------增强半同步复制-------begin-----------
 
# 插件目录
# plugin_dir=/data/mysql/install/lib/plugin
# 启动的时候,加载的插件
# plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# 启动的时候,直接安装插件  semisync_master.so
# loose_rpl_semi_sync_master_enabled = 1

# 启动的时候,直接安装插件  semisync_slave.so
# loose_rpl_semi_sync_slave_enabled = 1

# 超时5秒,切回异步
# loose_rpl_semi_sync_master_timeout = 5000

# -------------增强半同步复制-------end-----------



# -------------INNODB 配置-------begin-----------
 
# 企业级部署,可以直接初始化10G

# InnoDB 用来高速缓冲数据和索引内存缓冲大小。 
# 更大的设置可以使访问数据时减少磁盘 I/O。
innodb_buffer_pool_size = 7G

# innodb_buffer_pool_size/innodb_buffer_pool_instances 可以开启多个内存缓冲池,把需要缓冲的数据hash到不同的缓冲池中,这样可以并行的内存读写。
innodb_buffer_pool_instances = 8

# 启动时把热数据加载到内存。
innodb_buffer_pool_load_at_startup = 1

# 关闭数据库时把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_at_shutdown = 1

# 指定一个大小为 128M 的、可扩展的 ibdata1,ibdata2 数据文件
# innodb_data_file_path = ibdata1:128M;ibdata2:128M:autoextend


# 针对每个缓冲池实例,指定页面清理线程扫描,以查找要刷新的脏页面的缓冲池LRU列表的下行距离。
innodb_lru_scan_depth = 4096

# 在回滚(rooled back)之前,InnoDB 事务将等待超时的时间(单位 秒)
innodb_lock_wait_timeout = 10

# 参数定义了InnoDB后台任务每秒可用的I/O操作数(IOPS),例如用于从buffer pool中刷新脏页和从change buffer中合并数据。
# innodb后台进程最大的I/O性能指标,影响刷新赃页和插入缓冲的数量,在高转速磁盘下,尤其是现在SSD盘得到普及,可以根据需要适当提高该参数的值
innodb_io_capacity = 10000

# innodb_io_capacity的最大数
innodb_io_capacity_max = 15000

# 控制着innodb数据文件及redo log的打开、刷写模式
# 有三个值:fdatasync(默认),O_DSYNC,O_DIRECT
# 默认是fdatasync,调用fsync()去刷数据文件与redo log的buffer
# 为O_DSYNC时,innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件
# 为O_DIRECT时,innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log
innodb_flush_method = O_DIRECT

# innodb_undo_tablespaces已废弃,innodb默认创建2个undo表空间,如果需要更多,后期使用CREATE UNDO TABLESPACE命令进行添加
# innodb_undo_tablespaces = 127


# undo表空间文件超过此值即标记为可收缩
innodb_max_undo_log_size = 4G
 
# 开启undo表空间的自动压缩
innodb_undo_log_truncate = 1

# 控制buffer pool刷脏页时是否把脏页邻近的其他脏页一起刷到磁盘,在传统的机械硬盘时代,打开这个参数能够减少磁盘寻道的开销,显著提升性能。
innodb_flush_neighbors = 0
 
# InnoDB 存储引擎使用一个指定大小的Redo log空间(一个环形的数据结构),Redo log的空间通过innodb_log_file_size和innodb_log_files_in_group(默认为2)参数来调节。将这俩参数相乘即可得到总的可用Redo log 空间
innodb_log_file_size = 2G
# 指定有5个日志组
innodb_log_files_in_group = 5


# 事务日志所使用的缓冲区。Innodb 在写事务日志时,为了提高写 Log 的 IO 性能,先将信息写入 Innodb Log Buffer 中,当满足 Innodb_flush_log_trx_commit 参数或日志缓冲区写满时,再将日志同步到磁盘中。
# 设置大的日志缓冲可以减少磁盘I/O。
# 默认 8M,一般设为 16~64M 即可,可以通过 show status like 'innodb_log%'; 查看状态
innodb_log_buffer_size = 32M

# 在mysql8.0已废弃innodb_large_prefix
# innodb_large_prefix = 1

# Innodb 线程并发数,0 为不限制,默认 0
innodb_thread_concurrency = 0

# 当mysql 数据库发生死锁时, innodb status 里面会记录最后一次死锁的相关信息,但mysql 错误日志里面 
# 不会记录死锁相关信息,要想记录,启动 innodb_print_all_deadlocks  参数 。
innodb_print_all_deadlocks = 1


# 开启InnoDB严格检查模式,尤其采用了页数据压缩功能后,最好是开启该功能。开启此功能后,当创建表(CREATE TABLE)、更改表(ALTER TABLE)和创建索引(CREATE INDEX)语句时,如果写法有错误,不会有警告信息,而是直接抛出错误,这样就可直接将问题扼杀在摇篮里。
innodb_strict_mode = 1

# 开启碎片回收线程。
# 这个应该能让碎片回收得更及时而且不影响其他线程的操作
innodb_purge_threads = 4

# Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 4
innodb_write_io_threads = 8
innodb_read_io_threads = 8


# 刷脏数据的线程个数
innodb_page_cleaners = 8

# innodb_sort_buffer_size 是指对数据插入时,针对数据写入内存,排序后,在一次写入到磁盘的缓冲区的大小. 实际上innodb_sort_buffer_size 本身和查询无关,和DML 操作有关,如果系统上的表有索引的情况下,并且UPDATE, INSERT数据频繁,则 innodb_sort_buffer_size 可以提高数据的写入索引的速度.
innodb_sort_buffer_size = 32M

# 开启独享表空间
innodb_file_per_table = 1

# 来控制使用永久性的统计数据时,计算统计数据时采样的页面数量。该值设置的越大,统计出的 n_rows 值越精确,但是统计耗时也就最久;该值设置的越小,统计出的 n_rows 值越不精确,但是统计耗时特别少。
innodb_stats_persistent_sample_pages = 64
 
# 控制着在向有auto_increment 列的表插入数据时,相关锁的行为,通过对它的设置可以达到性能与安全(主从的数据一致性)的平衡
# 值为2:没有auto_inc锁,这个模式下的性能是最好的;但是它也有一个问题,就是对于同一个语句来说它所得到的auto_incremant值可能不是连续的。
innodb_autoinc_lock_mode = 2


# 因为在online ddl过程中需要保持delete、update、insert这些数据,所以需要一个日志去保持,这个参数就是限制这个日志的最大大小
# 当ddl过程中需要的这个日志的大小比这个限制还大的时候就会报错。
innodb_online_alter_log_max_size = 4G


# 限制Innodb能打开的表的数量
innodb_open_files = 65535

# InnoDB使用的校验算法。
innodb_checksum_algorithm = crc32

# 值为1:一旦锁等待超时,是事务内sql将全部回滚,且释放之前请求的锁。、
# 值为0:一旦以begin;start transaction;等语句开启一个事务,当锁等待超时后,该事务请求的锁将不释放,直到事务提交或回滚或会话超时;
innodb_rollback_on_timeout = 1

# 内部临时表的存储引擎,在mysql8.0.16中已废弃
# internal_tmp_disk_storage_engine = InnoDB

# 启用InnoDB的status file,便于管理员查看以及监控 
innodb_status_file = 1 
 
# 禁用标准InnoDB监视器
innodb_status_output = 0
# 禁用 InnoDB锁定监视器
innodb_status_output_locks = 0
# 是在放弃CPU时间片之前进行多少次等待,
innodb_sync_spin_loops = 100

# innodb_sync_spin_loops是在放弃CPU时间片之前进行多少次等待,innodb_spin_wait_delay是一次等待的时间。。
innodb_spin_wait_delay = 30

# 控制是否要开启同步刷脏功能。 
innodb_flush_sync = 0

# 控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90
# 这个参数的另一个用处:当Innodb的内存分配过大,致使swap占用严重时,可以适当的减小调整这个值,使达到swap空间释放出来。
# 建义:这个值最大在90%,最小在15%。太大,缓存中每次更新需要致换数据页太多,太小,放的数据页太小,更新操作太慢。
innodb_max_dirty_pages_pct = 50

# 默认是关闭了,这个会对INFORMATION_SCHEMA中的一些表进行查询操作,以方便索引统计信息,如果读要求高的建议关闭
innodb_stats_on_metadata = 0


# -------------INNODB 配置-------end-----------


# -------------mysql8 配置-------begin-----------

 
# 控制日志记录的详细程度 1是ERROR,2是ERROR, WARNING,3是ERROR, WARNING, INFORMATION
log_error_verbosity = 3

# 值为1:将ddl日志存储在mysql.innodb_ddl_log表中。
innodb_print_ddl_logs = 1
# binlog过期时间,604800秒 即7天
binlog_expire_logs_seconds = 604800

# 开启后 自动调整以下参数
# innodb_buffer_pool_size
# innodb_log_file_size
# innodb_flush_method
# innodb_log_files_in_group 
innodb_dedicated_server = OFF

# -------------8.0的 配置-------end-----------

# -------------PERFORMANCE_SCHEMA库 设置-------begin-----------

# 开启性能优化的引擎
performance_schema = 1


# 是否在MySQL Server启动时就启用某些采集器,由于instruments配置项多达数千个,所以该配置项支持key-value模式,还支持%号进行通配等 
# 启用所有的instruments
performance_schema_instrument = '%=on'
performance-schema-instrument='stage/%=ON'


# 控制events_statements_summary_by_digest表中的最大行数。
# 如果产生的语句摘要信息超过此最大值,便无法继续存入该表,此时performance_schema会增加状态变量
performance_schema_digests_size = 40000

# 加载到内存的表数量
performance_schema_max_table_instances = 40000

# 控制存入events_statements_current,events_statements_history和events_statements_history_long语句事件表中的SQL_TEXT列的最大SQL长度字节数。# 超出系统变量performance_schema_max_sql_text_length的部分将被丢弃,不会记录
# 一般情况下不需要调整该参数,除非被截断的部分与其他SQL比起来有很大差异
performance_schema_max_sql_text_length = 4096

# 控制 SQL语句文本在存入performance_schema时的限制长度,该变量与max_digest_length变量相关(max_digest_length变量含义请自行查阅相关资料)
performance_schema_max_digest_length = 4096
 
# 是否在mysql server启动时就开启events_statements_current表的记录功能(该表记录当前的语句事件信息),启动之后也可以在setup_consumers表中使用UPDATE语句进行动态更新setup_consumers配置表中的events_statements_current配置项,默认值为TRUE
performance-schema-consumer-events-stages-current=ON

# 与performance-schema-consumer-events-stages-current类似,但该选项是用于配置是否记录语句事件短历史信息,默认为TRUE
performance-schema-consumer-events-stages-history=ON

# 与performance-schema-consumer-events-stages-current类似,但该选项是用于配置是否记录语句事件长历史信息,默认为FALSE
performance-schema-consumer-events-stages-history-long=ON
# 控制最多保留多少条事务记录(包含所有session)
performance-schema-consumer-events-transactions-history-long=ON


# -------------PERFORMANCE_SCHEMA库 设置-------end-----------


# -------------INNODB 监控-------begin-----------
 
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"

# -------------INNODB 监控-------end-----------

# -------------MGR 设置-------begin-----------

# 将MySQL设置为只读
read_only=1
# super_read_only=1
# 并行复制
binlog_transaction_dependency_tracking = WRITESET
# 写集合以XXHASH64的算法进行hash,哈希值将用于分布式冲突检测和处理、
transaction-write-set-extraction = XXHASH64
# 并行复制的容量
binlog_transaction_dependency_history_size = 25000
# 组复制中的自增变量
loose-group_replication_auto_increment_increment = 1
# 服务器通过编写和检查每个事件的事件长度(而不是校验和)来验证它是否将完整事件写入二进制日志
binlog_checksum = NONE
# 为mgr高可用组起一个名字,可以修改
loose-group_replication_group_name = 'd8316b12-a119-4850-bdb1-37275c5a3f3f'
# 服务器启动时,不启用组复制集群,这在设置组复制时很重要,因为它确保您可以在手动启动插件之前配置服务器。
loose-group_replication_start_on_boot = off
# 告诉插件 本机使用 网络地址mysql01 和 端口33061
loose-group_replication_local_address = 111.200.6.35:13307
# 设置组成员(主机名:端口)列表,新成员使用它们建立与组的连接。
loose-group_replication_group_seeds = "111.200.6.35:13307,111.200.6.37:13307,111.200.6.54:13307"
# 不启用 引导组
loose-group_replication_bootstrap_group = off
# 单主模式
loose_group_replication_single_primary_mode = off
# 强制检查每一个实例是否允许写操作
loose_group_replication_enforce_update_everywhere_checks = ON
 
 # 关闭流控机制
loose_group_replication_flow_control_mode = DISABLED
# 网络不可达时,10秒后被踢出集群,状态变为error
loose_group_replication_unreachable_majority_timeout = 10      
  # 允许的事务大小,建议20M,默认不限制  
loose_group_replication_transaction_size_limit = 20971520     
  # auto-rejoin,重试加入集群,8.0.16以上支持 
loose_group_replication_autorejoin_tries = 3    
# 消息大小超过131072就进行压缩               
loose_group_replication_compression_threshold = 131072
# 权重在主库可以设置为60
loose_group_replication_member_weight = 50                      
# compress binlog, ratio: 50%    # 以下2个参数仅适用于8.0.20及以上版本
binlog_transaction_compression = on
binlog_transaction_compression_level_zstd = 10



# -------------MGR 设置-------end-----------


# -------------以下参数将自动填充-----------

 
# 基本参数
port=3307
server_id=12201651

innodb_buffer_pool_size=15990M
read_buffer_size=2M
read_rnd_buffer_size=4M
sort_buffer_size=4M
join_buffer_size=4M
tmp_table_size=8M

# mgr配置
# uuid  自动生成一个
loose_group_replication_group_name="e6670473-4a7c-4030-b99c-83e57ffeaeb6"
loose_group_replication_local_address=11.207.0.146:13307
loose_group_replication_group_seeds=11.207.0.85:13307,11.207.0.146:13307,11.207.0.151:13307
loose_group_replication_ip_whitelist=11.207.0.0/24



  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值