【学习背景】

本文主要分享一下MySQL日常开发运维当中,关于配置文件my.cnf[client][mysqld][mysql][mysqld_safe]四个组下比较常见的参数、参数值以及参数值说明


学习目录

  • 一、[client]组下参数
  • 二、[mysqld]组下参数
  • 三、[mysql]组下参数
  • 四、[mysqld_safe]组下参数


一、[client]组下参数

[client]
 #客户端端口号
 port=3306 
 #套接字文件,本地连接使用 
 socket=/data/mysqldata/mysql.sock
 #客户端字符集
 default-character-set=utf8mb4

二、[mysqld]组下参数

[mysqld]
 #数据库服务器id,这个id主要用在主从数据库服务器之间标记唯一mysql标识
 server-id=8008 
 #数据库提供对外的端口 
 port=3306
 #mysql启动时使用的用户
 user=mysql
 #服务器的默认字符集
 character-set-server=utf8mb4
 #软件介质安装目录
 basedir=/opt/mysql/mysql-5.7.29
 #数据库数据目录
 datadir=/data/mysqldata/3306
 #数据库临时文件目录
 tmpdir=/data/mysqltmp
 #套接字文件,本地连接使用
 socket=/data/mysqldata/mysql.sock
 #进程号文件
 pid-file=/data/mysqldata/mysqld.pid
 #默认数据库存储引擎
 default-storage-engine=Innodb
 #大小写是否敏感,1为不区分
 lower_case_table_names=1
 #默认数据库隔离级别,读提交
 transaction_isolation=READ-COMMITTED
 #数据库可拥有的未完成连接请求数
 back_log=400
 #数据库允许的最大连接数
 max_connections=1000
 #数据库关闭一个交互的连接之前所要等待的秒数
 interactive_timeout=28800
 #数据库关闭一个非交互的连接之前所要等待的秒数
 wait_timeout=28800
 #备库等待主库发送数据的超时时间,如果超过这个时间主库还未发送任何消息,开始尝试重连操作
 slave_net_timeout=300
 #二进制binlog日志文件存放位置及文件名前缀
 log_bin=/data/mysqllog/bin-log/mysql-bin
 #relaylog的存放位置及文件名前缀
 relay-log=/data/mysqllog/relay-log/mysql-relay
 #binlog日志的保留天数
 expire_logs_days=7
 #二进制binglog日志缓冲大小
 binlog_cache_size=8M
 #二进制日志的格式,row格式为记录每行数据的变化
 binlog_format=ROW
 #自动清理relaylog开启
 relay_log_purge=1
 #控制是否可以信任存储函数创建者,1为信任
 log-bin-trust-function-creators=1
 #指定延迟时间内,一次组提交允许等待的最大事务数量
 binlog_group_commit_sync_no_delay_count=20
 #控制在二进制日志文件同步到磁盘之间等待多少微秒以把事务合并到一个binloggroup中一次性提交(单位:us)
 binlog_group_commit_sync_delay=10
 #开启GTID模式的复制
 gtid_mode=on
 #强制GTID的一致性
 enforce_gtid_consistency=1
 #slave更新是否记入日志,在做双主架构时异常重要,影响到架构是否能相互同步
 log_slave_updates=1
 #与事务在主库上相同二进制日志组提交的方式在从库并行应用事务
 slave_paralle_type=LOGICAL_CLOCK
 #设置从库SQL线程并行重放events(事务)的worker线程数量
 slave_paralle_workers=8
 #把IO线程对应的masterstatus(IO线程读取主库的binlog位置)和masterconnection(IO线程连接主库的账号和密码)信息保存在mysql.slave_master_info表中
 master_info_repository=TABLE
 #把SQL线程对应的masterstatus(SQL当前重放的relaylog对应主库binlog的位置)和从库relaylog位置保存在mysql.slave_relay_log_info表中
 relay_log_info_repository=TABLE
 #控制从库并行复制时,重放binlog是否完全按照主库的提交顺序进行提交,on为启动
 slave_preserve_commit_order=on
 #加载密码验证和半同步插件
 plugin-load=validate_password.so;semisync_master.so;semisync_slave.so
 #在主库上启用半同步复制插件
 rpl_semi_sync_master_enabled=1
 #该参数控制主库使用半同步复制机制把binlog发送到slave之后,等待从库ACK接收确认包的时间,如果在这个超时时间之内未收到任何slave的接收确认包,则从库自动切换为异步复制
 rpl_semi_sync_master_timeout=3000
 #在从库上启用半同步复制插件
 rpl_semi_sync_slave_enabled=1
 #主库需要接收到多少个从库的ACK确认之后,主库的事务才进行提交
 rpl_semi_sync_master_wait_for_slave_count=1
 #开启增强半同步(无损复制)
 rpl_semi_sync_master_wait_point=AFTER_SYNC
 #开启强密码策略
 validate_password_policy=STRONG
 #服务在启动时加载插件,并防止在服务器运行时将其删除
 validate-password=FORCE_PLUS_PERMANENT
 #仅作用于使用MyISAM存储引擎,用来缓存批量插入数据的时候临时缓存写入数据的大小
 bulk_insert_buffer_size=8M
 #用于缓存Innodb存储引擎表的数据、索引等的最大缓存区大小,是数据库性能影响最大的一个参数,一般专用数据库服务器,设置物理内存的50%-70%
 innodb_buffer_pool_size=16G
 #缓存池实例数量,减少内部对缓存池数据结构的争用
 innodb_buffer_pool_instance=4
 #redolog日志文件的缓冲区大小
 innodb_log_buffer_size=32M
 #innodb表在创建索引期间对数据排序的排序缓冲区大小
 innodb_sort_buffer_size=4M
 #用于存放join查询中间结果的缓存大小
 join_buffer_size=8M
 #用于存放排序数据的缓存大小,超过这个大小就会使用文件排序
 sort_buffer_size=4M
 #MyISAM表的索引块缓冲大小
 key_buffer_size=16M
 #设置bufferpool中的最大脏页比例,innodb会尝试刷新脏页,以使得bufferpool中的脏页比例不高于这个比例
 innodb_max_dirty_pages_pct=50
 #控制一个数据包发送的任何参数的最大大小
 max_allowed_packet=128M
 #控制用户创建的内存表的数据大小
 max_heap_table_size=16M
 #MyISAM表顺序扫描的缓存大小
 read_buffer_size=1M
 #变量控制的buffer在从任何存储引擎读取数据的时候,都会用于缓存读取的数据,包括MRR优化特性也会使用
 read_rnd_buffer_size=32M
 #数据库获取文件描述符的最大数量
 open-files-limit=65535
 #缓存表定义文件.frm的数量
 table_definition_cache=4096
 #关闭查询缓存
 query_cache_type=0
 #控制所有SQL执行线程可打开缓存表的数量
 table_open_cache=4096
 #table_open_cache实例的数量
 table_open_cache_instance=16
 #定义InnoDB临时表空间数据文件的相对路径,名称、文件大小和属性
 innodb_temp_data_file_path=ibtmp1:12M:autoextend:max:20G
 #定义InnoDB数据库锁超时时间
 innodb_lock_wait_timeout=60
 #mysql缓存客户端服务线程的数量
 thread_cache_size=256
 #控制同时有多少个线程进入innodb内核
 innodb_thread_concurrency=128
 #设置由Innodb后台任务执行的I/O活动操作数IOPS
 innodb_io_capacity=5000
 #如果刷新活动滞后,则innodb可以比innodb_io_capacity变量定义更高的每秒I/O操作(IOPS)速率更积极的进行刷新,该变量定义了inndb在这种情况下由后台任务执行的最大IOPS数
 innodb_io_capacity_max=10000
 #控制innodb内部写线程数量
 innodb_write_to_threads=8
 #控制innodb内部读线程数量
 innodb_read_to_threads=8
 #控制purge是否独立出主线程,开启多少个独立的purge线程
 innodb_purge_threads=4
 #从缓冲池实例刷新脏页的页面清理线程数
 innodb_page_cleaners=4
 #控制innodb数据文件及redolog的打开、刷写模式,O_DERECT指定写入操作是直接从mysqlinnodbbuffer到磁盘的,并不用通过操作系统的缓冲
 innodb_flush_method=O_DERECT
 #当自动扩展innodb表空间文件变满时用于扩展其大小的增量大小(单位:M)
 innodb_autoextend_increment=128
 #控制redobuffer何时刷新到磁盘文件的参数
 #0:在事务提交时,不会立即触发将缓存日志写入到磁盘日志文件中,而是大约每秒一次由主线程刷新到磁盘文件的操作,并调用操作系统的fsync刷新IO缓存。最不安全,但性能最好
 #1:在事务提交时,innodb立即触发将缓存中的redo日志写回到磁盘日志文件中,并调用操作系统的fsync刷新IO缓存,最安全,但性能最差
 #2:在事务提交时,innodb立即将缓存中的redo日志写回到磁盘文件中,但是并不马上调用fsync刷新IO缓存,而是每秒大约1次磁盘IO缓存刷新操作或者交由操作系统来决定何时磁盘IO缓存,安全性
 innodb_flush_log_at_trx_commit=1
 #在错误日志中,打印所有的死锁信息
 innodb_print_all_deadlocks=/
 #设置写了多少个binlogevents之后把binlog日志刷新到磁盘
 #0:默认值,表示二进制日志的落盘操作由操作系统刷新,性能最好,但是也是最不安全,发生意外时,没有落盘的binlog日志将丢失
 #为了确保binlog日志的安全,建议设置为1,这样每次事务提交时就会调用fdatasync()实时把binlog日志刷新到磁盘
 sync_binlog=1
 #指定共享表空间文件的路径和名称,初始值大小,是否自动扩展
 innodb_data_file_path=ibdata:2G:autoextend
 #设置表为独立表空间
 innodb_file_per_table=1
 #内存临时表超过这个大小后,就会把内存临时表转换为磁盘临时表,线程级别的参数
 tmp_table_size=16M
 #redolog单个文件的大小
 innodb_log_file_size=2048M
 #undo表空间的数量
 innodb_undo_tablespaces=3
 #启用undolog自动收缩
 innodb_undo_log_truncate=1
 #指定innodb表onlineDDL操作期间用于保存DML操作数据的临时日志文件大小的上限
 innodb_online_alter_log_max_size=1G
 #控制innodb自增长锁模式参数0,1,2三个值分别代表traditional-传统,consecutive-连续,interleaved-交叉,默认值为1,表示自增ID是连续的
 innodb_autoinc_lock_mode=2
 #auto_increment_increment
 auto_increment_increment=1
 #设置自增的偏移量(起始值)
 auto_increment_offset=1
 #设置服务器中prepare语句的总数
 max_prepared_stmt_count=65530
 #是否开启慢sql记录,1表示开启
 slow_query_log=1
 #记录sql语句到慢日志的执行时间阈值(s)
 long_query_time=10
 #是否记录未使用索引sql
 log_queries_not_using_indexes=off
 #控制错误日志信息的时间戳与时区,以及查询日志和慢日志写入文件时的时间戳与时区为本地system为本地时区
 log_timestamps=SYSTEM
 #错误日志的路径及名称
 log-error=/data/mysqllog/client-error.log
 #慢日志的路径及名称
 slow_query_log_file=/data/mysqllog/slow3306.log
 #设置当前server的sqlmode
 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
 #开启PS对内存的监控
 performance-schema-instrument=memory/%=COUNTED
 #控制events_statments_summary_by_digest表中的最大行数
 performance_schema_digests_size=40000
 #控制能够被instrument监控的最大打开表handles数量,该参数同时控制表tables_handles中的记录数
 performance_schema_max_table_handles=40000
 #PS监控的table对象数量
 performance_shcema_max_table_instances=40000
 #SQL_TEXT列的最大SQL长度字节数
 performance_schema_max_sql_text_length=4096
 #控制标准化形式的SQL语句文本在存入PS时的限制长度
 performance_shcema_max_digest_length=4096
 #“安全路径,默认为NULL安全路径只能为/tmp,’'表示安全路径可任意目录,也可指定具体安全路径”
 secure_file_priv=’’

三、[mysql]组下参数

[mysql]
 #客户端字符集
 default-character-set=utf8mb4 
 #套接字文件,本地连接使用
 socket=/data/mysqldata/mysql.sock

四、[mysqld_safe]组下参数

[mysqld_safe]
 #错误日志的路径及名称
 log-error=/data/mysqllog/mysqld-error.log 
 #进程号文件
 pid-file=/data/mysqldata/mysqld.pid 
 #套接字文件,本地连接使用
 socket=/data/mysqldata/mysql.sock