MYSQL--基础--8.1--my.cnf--配置说明

MYSQL–基础–8.1–my.cnf–配置说明




# 定义客户端连接信息,端口号、socket 存放位置
[client]
# 默认连接端口
port = 3306
# 用于本地连接的socket套接字
socket = /usr/local/mysql/data/mysql.sock

# 编码
default-character-set = utf8mb4



[mysqldump]
# 用于转储大的表。
# 强制mysqldump 从服务器中一次一行地检索表中的行而不是检索所有行,并在输出前将它缓存到内存中。
quick
# 使用 mysqldump 工具备份数据库时,当某张表过大时备份会报错,需要增大该值(增大到大于表大小的值)
max_allowed_packet = 4M


# Mysql 基本信息,端口号、socket、安装目录、数据存放目录、临时目录
[mysqld]

# MySQL监听端口
port = 3306
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket = /usr/local/mysql/data/mysql.sock
# 安装目录
basedir = /usr/local/mysql
# 数据目录
datadir = /usr/local/mysql/data
# 临时文件目录
tmpdir = /usr/local/mysql/data
# pid文件所在目录
pid-file = /data/mysqldata/3306/mysql.pid  

# 插件所在目录
plugin_dir=/usr/local/mysql/plugin

# 启动的时候,加载的插件
#plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"


# 服务端默认编码(数据库级别)
character_set_server = utf8mb4	       

# 服务端默认的比对规则,排序规则
collation_server = utf8mb4_bin	       

# MySQL启动用户
user = mysql	                



# 开启了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	    	
 




# 性能优化的引擎,默认关闭
performance_schema = 0	           


# 1. secure_auth 为了防止低版本的MySQL客户端(<4.1)使用旧的密码认证方式访问高版本的服务器。
# 2. MySQL 5.6.7开始secure_auth 默认为启用值1
secure_auth = 1               

 

# 自动修复MySQL的myisam表
myisam_recover	              	


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


# 计划任务(事件调度器)
event_scheduler	              	

# 1. 跳过外部锁定,减少出错几率、增强稳定性
# 2. External-locking用于多进程条件下为MyISAM数据表进行锁定
skip-external-locking           


# 禁止 Mysql 对外部连接进行 DNS 解析,加快连接速度。开启后所有远程连接主机只能使用 IP 的方式
skip-name-resolve             
 


# MySQL绑定IP
bind-addres = 127.0.0.1          


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


# 主从复制的时候,当Master和Slave之间的网络中断,Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,然后才会重连并且追赶这段时间主库的数据。

# 1. 用这三个参数来判断主从是否延迟是不准确的,还是用pt-heartbeat吧。
# 	1. Slave_IO_Running
# 	2. Slave_SQL_Running
# 	3. Seconds_Behind_Master
# 2. slave_net_timeout不要用默认值,设置一个你能接受的延时时间。
slave_net_timeout = 30	           


# 设定是否支持命令load data local infile。
# 如果指定local关键词,则表明支持从客户主机读文件

# 禁止 SQL 读取本地文件
local-infile = 0	              


 

# 1. 定义了mysql应该支持的sql语法,数据校验等!  
# 2. NO_AUTO_CREATE_USER:禁止GRANT创建密码为空的用户。
sql_mode = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'


# 如果需要的存储引擎被禁用或未编译,可以防止自动替换存储引擎
NO_ENGINE_SUBSTITUTION 

 
 
# 通信缓冲区在查询期间被重置到该大小。通常不要改变该参数值,但是如果内存不足,可以将它设置为查询期望的大小。即,客户发出的SQL语句期望的长度。如果语句超过这个长度,缓冲区自动地被扩大,直到max_allowed_packet个字节。
net_buffer_length = 16K           




# 禁止 SQL 读取本地文件
local-infile = 0


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


# 默认存储引擎
default-storage-engine = innodb


# 开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘 IO 开销,影响性能
# general_log = on

# 查询日志存放位置及文件名
# general_log_file = /usr/local/mysql/data/mysql.log


# 错误日志文件位置
log-error = /usr/local/mysql/data/error.log



# 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句(一般临时开启即可)
# slow_query_log = on

# 定义执行时间超过多少秒为慢查询,默认 10s
# long_query_time = 2


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


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

 


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


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


# binlog过期时间,系统重启、执行 flush logs 或 binlog 日志文件大小达到上限时删除 binlog 日志,8.0已废弃
expire_logs_days = 30


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


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


max_connections = 2000

# 服务器关闭非交换连接之前等待活动的秒数
# 默认 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 gui tool中的连接
interactive_timeout = 100



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

max_connect_errors = 2000

# 连接超时时间为 20 秒

connect_timeout = 20


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

# 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源(对性能有影响,默认 2000)
table_open_cache = 2000


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

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

 

read_rnd_buffer_size = 512K

# 系统中对数据进行排序时使用的 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


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


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

 

 
# 决定是否缓存查询结果 即是否启用 query_cache 
# 这个变量有三个取值:0,1,2,分别代表了off、on、demand。   
# 0 为不使用(若要关闭 query_cache 时,需同时将 query_cache_size 、query_cache_limit 设为 0)
 
query_cache_type = 1



# 查询缓冲大小,当重复查询时会直接从该缓冲中获取,但是当所查询表有改变时,缓冲的查询将失效(频繁写入、更新、高并发的环境下建议关闭此缓冲)

# 查询缓冲大小          
# 工作原理:
# 一个SELECT查询在DB中工作后,DB会把该语句缓存下来,当同样的一个SQL再次来到DB里调用时,把结果从缓存中返回给Client。但是当所查询表有改变时,缓冲的查询将失效

# 在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。
# 频繁写入、更新、高并发的环境下建议关闭此缓冲。
query_cache_size = 32M




# 单个查询所能够使用的缓冲区大小
query_cache_limit = 1M


# 使用全文索引最小长度
ft_min_word_len = 1


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

transaction_isolation = REPEATABLE-READ

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

tmp_table_size = 32M


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





# 当对MyISAM表执行repair table或创建索引时,用以缓存排序索引;
# 设置太小时可能会遇到"myisam_sort_buffer_size is too small"
myisam_sort_buffer_size = 128M   
   


# 默认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 = 32M       


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


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

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

# 该参数决定是否记录管理类的命令,有 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
log_queries_not_using_indexes     

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

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


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


             

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

# 二进制日志索引目录
log-bin-index = /data/mysqldata/3307/binlog/mysql-bin.index


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



# binlog传到备机被写道relaylog里,备机的slave sql线程从relaylog里读取然后应用到本地。
relay-log-index = /data/mysqldata/3307/relay/mysql-relay-bin.index	


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


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


# 服务端ID,用来高可用时做区分
server_id = 100             	

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


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


# replicate-wild-ignore-table参数能同步所有跨数据库的更新,比如replicate-do-db或者replicate-ignore-db不会同步类似 
replicate-wild-ignore-table = mysql.% 

# 设定需要复制的Table
replicate-wild-do-table = db_name.%  	


# 复制时跳过一些错误;
# 不要胡乱使用这些跳过错误的参数,除非你非常确定你在做什么。
# 当你使用这些参数时候,MYSQL会忽略那些错误,这样会导致你的主从服务器数据不一致。
slave-skip-errors = 1062,1053,1146    


# 这两个参数一般用在主主同步中,用来错开自增值, 防止键值冲突
auto_increment_offset = 1
auto_increment_increment = 2        


 

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

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

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






# --------------- innodb 配置 ---------------

 



# --------Innodb 存储引擎相关参数--------

# 每个Innodb的表,有自已独立的表空间。如删除文件后可以回收那部分空间。
# 分配原则:只有使用不使用。但DB还需要有一个共享表空间。

# 关闭独享表空间,使用共享表空间
# innodb_file_per_table = 0






# Innodb 存储引擎核心参数,用于缓存 Innodb 表的索引、数据(默认 128M,单独使用 Innodb 存储引擎且单一 Mysql 服务时建议设为物理内存的 70% - 80 %)
# 可以通过 show status like 'innodb_buffer_pool_%'; 来获取 innodb buffer pool 的实时状态信息
# Innodb_buffer_pool_pages_total 总共的 pages(Innodb 存储引擎中所有数据存放最小物理单位 page,每个 page 默认为 16KB)
# Innodb_buffer_pool_pages_free  空闲的 pages
# Innodb_buffer_pool_pages_data  有数据的 pages
# Innodb_buffer_pool_read_requests  总共的 read 请求次数
# Innodb_buffer_pool_reads  读取物理磁盘读取数据的次数,即:在 buffer pool 中没有找到
# Innodb_buffer_pool_wait_free  因 buffer 空间不足而产生的 wait_free
# Innodb_buffer_pool_read_ahead_rnd  记录进行随机读的时候产生的预读次数
# Innodb_buffer_pool_read_ahead_seq  记录连续读的时候产生的预读次数
# Innodb_buffer_pool_size  使用率 = innodb_buffer_pool_pages_data / innodb_buffer_pool_pages_total * 100%
# Innodb_buffer_pool_read  命中率 =(innodb_buffer_pool_read_requests - innodb_buffer_pool_reads)/ innodb_buffer_pool_read_requests * 100%


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


# 使用系统自带的内存分配器,替代 innodb_additional_mem_pool_size 参数
# 默认设置值为1
# 设置为0:表示Innodb使用自带的内存分配程序
# 设置为1:表示InnoDB使用操作系统的内存分配程序。
innodb_use_sys_malloc = 1

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


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


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



# 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


# 事务日志所使用的缓冲区。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 = 8M


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


# 采用手工方式把热数据 dump 到本地磁盘。
innodb_buffer_pool_dump_now = 1


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


# 采用手工方式把热数据加载到内存。
# 以上四条参数会快速预热 Buffer_pool 缓冲池,当机器正常重启后,热数据还保留在内存中,避免瞬间连接数爆满导致机器死机。
innodb_buffer_pool_load_now = 1


 
 
 
# Innodb Plugin引擎开始引入多种格式的行存储机制
# 目前支持:Antelope、Barracuda两种。
# 其中Barracuda兼容Antelope格式。
innodb_file_format = Barracuda      


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

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


# 分布式事务
innodb_support_xa = FALSE        

 


 
#  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
     

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

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


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

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

# innodb_io_capacity的最大数
innodb_io_capacity_max = 15000     

 

# 当更新/插入的非聚集索引的数据所对应的页不在内存中时(对非聚集索引的更新操作通常会带来随机IO),会将其放到一个insert buffer中,当随后页面被读到内存中时,会将这些变化的记录merge到页中。当服务器比较空闲时,后台线程也会做merge操作
innodb_change_buffering = inserts    


# 该值影响每秒刷新脏页的操作,开启此配置后,刷新脏页会通过判断产生重做日志的速度来判断最合适的刷新脏页的数量;
innodb_adaptive_flushing = 1      


 
# 控制着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  


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

# undo表空间文件超过此值即标记为可收缩
innodb_max_undo_log_size = 4G

# 开启undo表空间的自动压缩
innodb_undo_log_truncate = 1

# 控制buffer pool刷脏页时是否把脏页邻近的其他脏页一起刷到磁盘,在传统的机械硬盘时代,打开这个参数能够减少磁盘寻道的开销,显著提升性能。
innodb_flush_neighbors = 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_page_cleaners = 8

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

# 来控制使用永久性的统计数据时,计算统计数据时采样的页面数量。该值设置的越大,统计出的 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_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

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













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


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

# 禁止DNS解析
skip_name_resolve = 1


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

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


# 表定义的缓存大小,其默认值是1400。
table_definition_cache = 2048


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


# 双路排序:
# 读取行指针和order by列,对他们进行排序,然后扫描已经排序好的列表,按照列表中的值重新从列表中读取对应的数据输出。
# 双路排序的开销可能会非常巨大,因为他会读取表两次,第二次读取会引发大量的随机IO,对于myisam涞说,这个代价尤其昂贵,myisam表利用系统调用去提取每行的数据。
# 单路排序:
# 读取查询需要的所有列,按照order by 列对他们进行排序,然后扫描排序后的列表进行输出,它的效率更快一些,避免了第二次读取数据。并且把随机IO变成了顺序IO,但是它会使用更多的空间,因为它把每一行都保存在内存中了。、
# mysql有两种文件排序算法(双路排序和单路排序),如果需要排序的列的总大小加上order by列的大小超过了 max_length_for_sort_data定义的字节,mysql就会使用双路排序,
max_length_for_sort_data = 8096


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

#  error log、slow_log、genera log 记录日志的显示时间为系统时间
log_timestamps = SYSTEM

# 用来验证 binlog内容的正确性。保证主从同步
binlog_checksum = 1



# 开启全局事务
# on:要求 enforce_gtid_consistency=on
gtid_mode = on

# 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


#binlog_transaction_dependency_tracking是设在主库,可以取commit_order,writeset,writeset_session,主要是控制binlog文件中last_committed的计算方式:
# commit_order即group commit,同在prepare阶段的事务,在binlog中last_committed数值一样,传到从库之后可以并行执行;
# writeset,会对事务处理的行数据哈希出一个writeset值,放到一个哈希表里,如果两个事务先后提交,但是处理的行数据没有冲突,即wirteset不一样,就可以有同样的last_committed,在从库可以并行执行;
# writeset_session,比writeset多了一个约束,同一个session的事务,在binlog里保留先后顺序,也就是last_committed按先后顺序递增。
 
#binlog-transaction-dependency-tracking = commit_order




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



# -------------增强半同步复制-------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

 

# -------------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-----------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值