Mysql 配置文件 my.cnf 参数详情参考

Mysql 配置文件 my.cnf 参数详情参考

参考地址:https://blog.csdn.net/qq_42768234/article/details/110089078

其中有些参数有待查询修改,本文档也是之前公司使用时 mysql 售后做主从时用的,但是有些参数不太适用。
这里可以简单参考一下。如有不对的还请指正,谢谢。

[mysql]

# 是否自动补全
no-auto-rehash

# 修改命令行链接mysql时的提示符
prompt = '\\u@\\h:\\p \\R:\\m:\\s [\\d]> '

#default-character-set = utf8mb4
#tee = /data/mysql_tmp/mysql_operation.log

[mysqld]
# DO NOT MODIFY, Universe will generate this part
# 端口
port = 3306

# 主备 id
server_id = 123456

# 软件目录
basedir = /opt/mysql/base

# 数据目录
datadir = /opt/mysql/data/3306


log_bin = /opt/mysql/binlog/3306

# 保存临时文件的目录
tmpdir = /opt/mysql/tmp/3306

# 从机保存同步中继日志的位置
relay_log = /opt/mysql/relaylog/3306

# innodb 重做日志保存目录
innodb_log_group_home_dir = /opt/mysql/innodblog/3306


log_error = mysql-error.log


report_host = 127.0.0.1

# BINLOG
binlog_error_action = ABORT_SERVER

# binlog 日志格式,一定设置为 row,否则可能会导致各种问题
binlog_format = row


binlog_rows_query_log_events = 1

# slave 更新是否记入日志,在做双主架构时异常重要,影响到双主架构是否能互相同步
log_slave_updates = 1

# 从机保存主节点信息方式,设成 file 时 会生成 master.info 和 relay-log.info2个文件,设成 table,信息就会存在 mysql.master_slave_info 表中。
master_info_repository = TABLE

# 最大 binlog 日志大小
max_binlog_size = 250M

# 用于保存 slave 读取 relay log 的位置信息,可选值为 “FILE”、“TABLE”,以便 crash 重启后继续恢复
relay_log_info_repository = TABLE

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

# 这个参数是对于MySQL系统来说是至关重要的,他不仅影响到Binlog对MySQL所带来的性能损耗,而且还影响到MySQL中数据的完整性。对于“sync_binlog”参数的各种设置的说明如下:
# sync_binlog=0,当事务提交之后,MySQL不做fsync之类的磁盘同步指令刷新binlog_cache中的信息到磁盘,而让Filesystem自行决定什么时候来做同步,或者cache满了之后才同步到磁盘。
# sync_binlog=n,当每进行n次事务提交之后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。
# 在MySQL中系统默认的设置是sync_binlog=0,也就是不做任何强制性的磁盘刷新指令,这时候的性能是最好的,但是风险也是最大的。因为一旦系统Crash,在binlog_cache中的所有binlog信息都会被丢失。
# 而当设置为“1”的时候,是最安全但是性能损耗最大的设置。因为当设置为1的时候,即使系统Crash,也最多丢失binlog_cache中未完成的一个事务,对实际数据没有任何实质性影响。
# 从以往经验和相关测试来看,对于高并发事务的系统来说,“sync_binlog”设置为0和设置为1的系统写入性能差距可能高达5倍甚至更多。
sync_binlog = 1

# GTID #
# 启用gtid类型,否则就是普通的复制架构
gtid_mode = ON

# 强制GTID的一致性
enforce_gtid_consistency = 1

# 这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代使用binlog文件的。 这个选项设置为真,会提升mysql执行恢复的性能。因为这样mysql-server启动和binlog日志清理更快
binlog_gtid_simple_recovery = 1


# ENGINE

default_storage_engine = InnoDB

# InnoDB 用来保存数据字典信息和其他内部数据结构的内存池的大小
# innodb_additional_mem_pool_size = 16M
# 缓存innodb表的索引,数据,插入数据时的缓冲,专用mysql服务器设置的大小: 操作系统内存的70%-80%最佳
innodb_buffer_pool_size = 1G

# innodb重做日志保存目录
# innodb_log_group_home_dir = /data/local/mysql/logs/redolog/
# 共享表空间大小
innodb_data_file_path = ibdata1:1G:autoextend

# 是否开启独立表空间
innodb_file_per_table = 1

# redo刷新机制
# 0:log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行。该模式下在事务提交的时候,不会主动触发写入磁盘的操作。
# 1:每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去,该模式为系统默认。
# 2:每次事务提交时MySQL都会把log buffer的数据写入log file,但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。
innodb_flush_log_at_trx_commit=1

# 默认值为 fdatasync. 如果使用硬件RAID磁盘控制器, 可能需要设置为 O_DIRECT. 这在读取InnoDB缓冲池时可防止“双缓冲(double buffering)”效应,否则会在文件系统缓存与InnoDB缓存间形成2个副本(copy). 
# 如果不使用硬件RAID控制器,或者使用SAN存储时, O_DIRECT 可能会导致性能下降
innodb_flush_method = O_DIRECT

# 根据服务器IOPS能力适当调整
# 一般配普通SSD盘的话,可以调整到 10000 - 20000
# 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
innodb_io_capacity = 1000

# 事务在内存中的缓冲。这个值不用太大的。他里面的内存一般一秒钟写到磁盘一次
innodb_log_buffer_size = 64M

# 这个值定义了日志文件的大小,innodb日志文件的作用是用来保存redo日志。
# 一个事务对于数据或索引的修改往往对应到表空间中的随机的位置,因此当刷新这些修改到磁盘中就会引起随机的I/O,而随机的I/O往往比顺序的I/O更加昂贵的开销,因为随机的I/O需要更多的开销来定位到指定的位置。
# innodb使用日志来将随机的I/O转为顺序的I/O,只要日志文件是安全的,那么事务就是永久的,尽管这些改变还没有写到数据文件中,如果出现了当机或服务器断电的情况,那么innodb也可以通过日志文件来恢复以及提交的事务。
# 但是日志文件是有一定的大小的,所以必须要把日志文件记录的改变写到数据文件中,innodb对于日志文件的操作是循环的,即当日志文件写满后,会将指针重新移动到文件开始的地方重新写,但是它不会覆盖那些还没有写到数据文件中的日志,
# 因为这是唯一记录了事务持久化的记录。如果对 Innodb 数据表有大量的写入操作,那么选择合适的 innodb_log_file_size 值对提升MySQL性能很重要。
# 然而设置太大了,就会增加恢复的时间,因此在MySQL崩溃或者突然断电等情况会令MySQL服务器花很长时间来恢复
innodb_log_file_size = 2G

# 重做日志组数
innodb_log_files_in_group = 2

# 当系统中 脏页 所占百分比超过这个值,INNODB就会进行写操作以把页中的已更新数据写入到磁盘文件中。默认75,一般现在流行的SSD硬盘很难达到这个比例。可依据实际情况在75-80之间调节
innodb_max_dirty_pages_pct = 60

#是否将死锁相关信息保存到MySQL 错误日志中
innodb_print_all_deadlocks=1

#是否自动更新统计信息
#innodb_stats_on_metadata = 0


innodb_strict_mode = 1


#innodb_undo_logs = 128 		#Deprecated In 5.7.19

#用于设定创建的undo表空间的个数,在mysql_install_db时初始化后,就再也不能被改动了;默认值为0,表示不独立设置undo的tablespace,默认记录到ibdata中;否则,则在undo目录下创建这么多个undo文件,
#例如假定设置该值为2,那么就会创建命名为undo001~undo002的undo tablespace文件,每个文件的默认大小为10M。
innodb_undo_tablespaces=3 	    #Deprecated In 5.7.21

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

# 开启在线回收(收缩)undo log日志文件
innodb_undo_log_truncate=1

# innodb读线程数
innodb_read_io_threads = 8

# innodb写线程数
innodb_write_io_threads = 8

# purge线程数量(清除二进制日志)
innodb_purge_threads = 4

# 默认为关闭OFF。如果开启该参数,启动MySQL服务时,MySQL将本地热数据加载到InnoDB缓冲池中
innodb_buffer_pool_load_at_startup = 1

# 默认为关闭OFF。如果开启该参数,停止MySQL服务时,InnoDB将InnoDB缓冲池中的热数据保存到本地硬盘
innodb_buffer_pool_dump_at_shutdown = 1


innodb_buffer_pool_dump_pct=25

# ORDER BY 或者GROUP BY 操作的buffer缓存大小
innodb_sort_buffer_size = 8M

# 从InnoDB的master线程中,独立出了一个页面清理进程来刷脏页
#innodb_page_cleaners = 8

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

# 事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败;参数的时间单位是秒
innodb_lock_wait_timeout = 10

# 这两个(innodb_io_capacity)设置会影响InnoDB每秒在后台执行多少操作. 大多数写IO(除了写InnoDB日志)是后台操作的. 如果你深度了解硬件性能(如每秒可以执行多少次IO操作),则使用这些功能是很可取的,而不是让它闲着
innodb_io_capacity_max = 2000

# InnoDB存储引擎在刷新一个脏页时,会检测该页所在区(extent)的所有页,如果是脏页,那么一起刷新。这样做的好处是通过AIO可以将多个IO写操作合并为一个IO操作。对于传统机械硬盘建议使用,而对于固态硬盘可以关闭。
innodb_flush_neighbors = 1

#mysql在5.6之前一直都是单列索引限制767,起因是256×3-1。这个3是字符最大占用空间(utf8)。但是在5.6以后,开始支持4个字节的uutf8。255×4>767, 于是增加了这个参数。这个参数默认值是OFF。当改为ON时,允许列索引最大达到3072
#8.0删除
#innodb_large_prefix = 1

# InnoDB kernel并发最大的线程数。最少设置为(num_disks+num_cpus)*2
innodb_thread_concurrency = 0


innodb_stats_persistent_sample_pages = 64


innodb_autoinc_lock_mode = 2

# online ddl row log 大小
innodb_online_alter_log_max_size = 1G

#指定MySQL可同时打开.ibd文件的最大个数,最小为10,默认300。此选项只针对InnoDB表打开的.ibd文件描述符,独立于open_files_limit。
innodb_open_files = 4096

# 设置临时表空间最大4G
innodb_temp_data_file_path = ibtmp1:12M:autoextend:max:50G


innodb_rollback_segments = 128


innodb_numa_interleave = 1

# CACHE

# 只对MyISAM表起作用。指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。
key_buffer_size = 16M

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

# 用户可以创建的内存表(memory table)的大小.这个值用来计算内存表的最大行数值。
max_heap_table_size = 64M

# sql_mode 模式,定义了你MySQL应该支持的sql语法,对数据的校验等等,限制一些所谓的‘不合法’的操作
# sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
# 所有线程打开表的数目。它的作用就是缓存表文件描述符,降低打开关闭表的频率, 如果这个参数设置得过小,就不得不关闭一些已打开的表以便为缓存新表,从而出现频繁的打开关闭MyISAM表文件的情况,
# 而INNODB表的打开不受这个参数控制,而是放到其数据字典当中,即在ibd文件中。当Opened_tables状态值较大,且不经常使用FLUSH TABLES 关闭并重新打开表,就需要增加该值。
table_open_cache = 2000


query_cache_type = 0

#建议关闭query cache,有些时候对性能反而是一种损害
#8.0删除
query_cache_size = 0

# 最大连接数限制
max_connections = 2000

# 线程池缓存大小(当客户端断开连接后,将当前线程缓存起来,当在接到新的连接请求时快速响应,无需创建新的线程 )
thread_cache_size = 200

# 最大打开文件数
open_files_limit = 65535

# 为每个session分配的内存,在事务过程中用来存储二进制日志的缓存,提高记录bin-log的效率。没有什么大事务,dml也不是很频繁的情况下可以设置小一点,如果事务大而且多,dml操作也频繁,则可以适当的调大一点。
binlog_cache_size = 1M

# 当我们的join是ALL,index,rang或者Index_merge的时候使用的buffer
join_buffer_size = 8M

# 是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存
sort_buffer_size = 2M

# 读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区
read_buffer_size = 8M

# 随机读缓冲区大小,当按任意顺序读取行时(列如按照排序顺序)将分配一个随机读取缓冲区,进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度
read_rnd_buffer_size = 8M

# 缓存表定义(.frm)文件的数量。如果表较多,可以增大该值加快打开表。与一般表缓存不同,表定义缓存不占用文件描述符,占用空间也小。
# 最小为400,上线为2000,默认为:400 + (table_open_cache / 2)。如果打开表数量高于table_definition_cache,则会通过LRU机制搜索表空间LRU文件列表并刷新列表。
# 对于InnoDB,打开文件的限制为max(table_definition_cache, innodb_open_files)。
table_definition_cache = 2000

#表缓存实例数,为通过减小会话间争用提高扩展性,表缓存会分区为table_open_cache/table_open_cache_instances大小的较小的缓存实例。
# DML语句会话只需要锁定所在缓存实例,这样多个会话访问表缓存时就可提升性能(DDL语句仍会锁定整个缓存)。默认该值为1,当16核以上可设置为8或16。
table_open_cache_instances = 8


# SLOW LOG
# 是否开启慢日志
slow_query_log = 1

# 慢日志文件路径
slow_query_log_file = mysql-slow.log

# 慢查询也记录那些慢的optimize table,analyze table和alter table语句
log_slow_admin_statements = 1

# 是否记录由Slave所产生的慢查询
log_slow_slave_statements = 1

# 大于此时间记录为慢日志query_time-lock_time
long_query_time = 1

# SEMISYNC #
# 加载插件,8.0.18引入了破坏性变更,像半同步插件这样的非必要插件是不会被加载的
plugin-load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"

# 控制主库上是否开启semisync
rpl_semi_sync_master_enabled = 1

#控制从库上是否开启semisync
rpl_semi_sync_slave_enabled = 0


rpl_semi_sync_master_wait_for_slave_count = 1


rpl_semi_sync_master_wait_no_slave = 0

# 单位毫秒,防止半同步复制在没有收到确认的情况下,发送堵塞。master在超时之前没有收到确认,将恢复到异步复制,继续执行半同步没有进行的操作
rpl_semi_sync_master_timeout = 30000 # 30s

# CLIENT_DEPRECATE_EOF
session_track_schema = 1


session_track_state_change = 1


session_track_system_variables = '*'

# MISC
# 在MySQL 5.7.2 新增了 log_timestamps 这个参数,该参数主要是控制 error log、genera log,等等记录日志的显示时间参数。 
# 在 5.7.2 之后改参数为默认 UTC 这样会导致日志中记录的时间比中国这边的慢,导致查看日志不方便。修改为 SYSTEM 就能解决问题
log_timestamps=SYSTEM

# 支持大小写
lower_case_table_names = 1

# mysqldump限制server接受的数据包大小
max_allowed_packet = 64M


read_only = 0


skip_external_locking = 1

# 禁用DNS主机名查找
skip_name_resolve = 1


skip_slave_start = 1

# sock文件位置
socket = mysqld.sock

# mysql pid 文件位置
pid_file = mysqld.pid

# disabled_storage_engines参数是5.7.8版本新引入的参数,它用来设置在CREATE TABLE时被禁用的存储引擎
# 借助disabled_storage_engines参数,可以在建表时实现存储引擎自动转换
disabled_storage_engines = ARCHIVE,BLACKHOLE,EXAMPLE,FEDERATED,MEMORY,MERGE,NDB


log-output = TABLE,FILE

# 服务器使用的字符集
character_set_server = utf8mb4

secure_file_priv = ""


performance-schema-instrument ='wait/lock/metadata/sql/mdl=ON'


performance-schema-instrument = 'memory/% = COUNTED'

# binlog日志自动过期清理天数,注意:MySQL 8.0开始,binlog_expire_logs_seconds选项也存在的话,会忽略expire_logs_days选项
expire_logs_days = 7

# 最大连接错误数,防止密码暴力破解
max_connect_errors = 1000

# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端
interactive_timeout = 1800

# 服务器关闭非交互连接之前等待活动的秒数,在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)
wait_timeout = 1800


log_bin_trust_function_creators = 1


performance-schema-instrument = 'stage/innodb/alter%=ON'


performance-schema-consumer-events-stages-current=ON


performance-schema-consumer-events-stages-history=ON


performance-schema-consumer-events-stages-history-long=ON

# MTS
# 并行模式
slave-parallel-type=LOGICAL_CLOCK

# 并行线程数
slave_parallel_workers=16

# 提交顺序保持一致
slave_preserve_commit_order = ON

# slave_rows_search_algorithms由三个值的组合组成:TABLE_SCAN,INDEX_SCAN, HASH_SCAN。
# TABLE_SCAN,INDEX_SCAN  (默认配置,表示如果有索引就用索引,否则使用全表扫描)
# HASH_SCAN可以部分解决无主键表导致的复制延迟问题。
slave_rows_search_algorithms = 'INDEX_SCAN,HASH_SCAN'

##BaseConfig

collation_server = utf8mb4_bin

# timestamp列如果没有显式定义为null,默认会被设置为not null属性。(其它的数据类型如果没有显式定义为not null,默认是可以为null的)。该参数可以解决此问题
explicit_defaults_for_timestamp = 1

# 隔离级别
transaction_isolation = READ-COMMITTED

##Unused
#plugin-load-add = validate_password.so
#validate_password_policy = MEDIUM

 
 
 
 
 

你可能感兴趣的:(mysql,mysql,数据库,database,my.cnf)