首页 / MYSQL / MySQL相关参数总结
MySQL相关参数总结
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了MySQL相关参数总结,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含17539字,纯文字阅读大概需要26分钟。
内容图文
tmpdir = /usr/local/mysql57/tmp临时文件路径 character-set-server = utf8mb4
默认server字符集 collation-server = utf8mb4_general_ci
字符序,某种字符集下,也即character-set-server已知的情况下,存在多种排序规则,指定其中一种排序规则,其实叫做排序规则更容易理解。
port = 3306
数据库服务端口号 default_storage_engine =InnoDB
默认为InnoDB引擎 socket = /usr/local/mysql57/mysql.Sock
本机连接至MySQL服务可以使用sock方式连接,实际上是MySQL服务的进程Id pid-file = /usr/local/mysql57/data/mysql.pid Mysql的进程文存放位置 log_error = /usr/local/mysql57_data/mysql3306/log/mysql-error.log
启动&错误日志信息 slow_query_log = on
慢查询日志开关 long_query_time = n
界定慢查询阈值,单位秒 log_output = file|table
慢查询输出位置,文件或者表,如果是文件的话,目标为slow_query_log_file ,如果是表的话,存储在mysql.slowlog slow_query_log_file = /usr/local/mysql57_data/mysql3306/log/slow_query_log .log
慢查询日志文件 log_queries_not_using_indexes
捕获没有用到索引的查询,同样会记录到慢查询的目标中 log_bin_trust_function_creators = ON
存储过程或者函数需要标记是否修改数据,参考https://www.cnblogs.com/kerrycode/p/7641835.html ###################################################################################### binlog相关参数 binlog_format = row|statment|mixed Row level 日志中会记录每一行数据被修改的情况,然后在slave端对相同的数据进行修改。 优点:能清楚的记录每一行数据修改的细节 缺点:数据量太大 Statement level(默认) 每一条被修改数据的sql都会记录到master的bin-log中,slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql再次执行 优点:解决了 Row level下的缺点,不需要记录每一行的数据变化,减少bin-log日志量,节约磁盘IO,提高新能 缺点:容易出现主从复制不一致 Mixed(混合模式) 结合了Row level和Statement level的优点,不建议使用
bin_log_cache_size
对于事务性的操作,是要事物完成的时候写入二进制日志,事物提交之前,执行的写入性操作会被缓存起来,直到整个事物完成,mysqld进程会将整个事物写入二进制日志。
当事物开始的时候,会按照binlog_cache_size系统变量指定的值分配内容空间,如果指定的binlog_cache_size缓存空间不够,执行的事务性操作回滚并提示失败
默认是32kb
max_binlog_cache_size默认是是4GB,最大值也是4GB log_bin 路径和binlog的前缀名称 expire_logs_days binlog 过期清理时间阈值,单位为天 sync_binlog = 0|1|n 二进制日志记录可以使同步的,也即事物提交之后就写入二进制日志,也可以是异步的,由操作系统的磁盘缓存觉得什么时候写入磁盘。
由参数sync_binlog= n来控制,设置sync_binlog = 1的话,表示最高安全级别的写入(但也不能保证不丢失任何事物日志),相当于是一种安全写入模式,不过对性能有一定的影响。 GTID相关参数 gtid_mode = on|off gtid模式的开关 enforce_gtid_consistency = 1 保证GTID安全的参数,不能在事物中创建临时表 binlog_gtid_simple_recovery = 1 参考:https://keithlan.github.io/2018/05/03/gtid_binlog_gtid_simple_recovery/ 1. 这个变量用于在MySQL重启或启动的时候寻找GTIDs过程中,控制binlog 如何遍历的算法? 2. 当binlog_gtid_simple_recovery=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的文件,那么就停止遍历 3. 当binlog_gtid_simple_recovery=TRUE 时: 为了初始化 gtid_executed , 算法是: 只需要读取newest_binlog 为了初始化 gtid_purged, 算法是: 只需要读取oldest_binlog 4. 当设置binlog_gtid_simple_recovery=TRUE , 如果MySQL版本低于5.7.7 , 可能会有gitd计算出错的可能,具体参考官方文档详细描述
- 在线GTID升级的时候,binlog_gtid_simple_recovery = TRUE 必须打开,否则在binlog 删除的时候,会发生阻塞状况
- 在线GTID升级的时候,尽量将非GTID的binlog备份好,然后删除掉,以免出现莫名其妙的错误
MySQL最经典的参数之一 如果innodb_flush_log_at_trx_commit设置为0,log buffer将每秒一次地写入log file中,并且log file的flush(刷到磁盘)操作同时进行.该模式下,在事务提交的时候,不会主动触发写入磁盘的操作。
如果innodb_flush_log_at_trx_commit设置为1,每次事务提交时MySQL都会把log buffer的数据写入log file,并且flush(刷到磁盘)中去.
如果innodb_flush_log_at_trx_commit设置为2,每次事务提交时MySQL都会把log buffer的数据写入log file.但是flush(刷到磁盘)操作并不会同时进行。该模式下,MySQL会每秒执行一次 flush(刷到磁盘)操作。 innodb_doublewrite = 0|1 物理级保护数据安全,在将内存中的脏页写入磁盘之前,先将内存中的脏页复制到内存的doublewrite buffer中(2MB),然后将doublewrite buffer的数据写入共享表空间的页中(128个page,2MB大小),然后再写磁盘。
innodb_flush_method = fdatasync|O_DSYNC|O_DIRECT
控制着innodb数据文件及redo log的打开、刷写模式,参考:https://blog.csdn.net/smooth00/article/details/72725941
innodb_io_capacity
按照该值的百分比来控制刷新到磁盘页的数量
1. 在合并插入缓冲时, 合并插入缓冲的数量是该值的5%
2. 在从缓冲中刷新脏页时, 刷新的脏页数量等于该值.
若用户使用了ssd类的磁盘或做了磁盘阵列, 可将该值适当调大.
Created_tmp_disk_tables
和 Created_tmp_tables
状态来分析是否需要增加tmp_table_size
max_heap_table_size
同tmp_table_size, 它规定了内部内存临时表的最大值,每个线程都要分配。(实际起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
thread_cache_size:
参考:https://www.jianshu.com/p/47adb747652d
线程池缓存大小 ( 当客户端断开连接后 将当前线程缓存起来 当在接到新的连接请求时快速响应 无需创建新的线程 )
connect相关参数
参考:https://www.cnblogs.com/jiunadianshi/articles/2475475.html
max_connections最大连接数
wait_timeout
服务器关闭非交互连接之前等待活动的秒数。
interactive_timeout 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。 max_connect_errors = N 防止暴力破解超过N次后禁止连接 成功连接一次后会清零 table_definition_cache: 参考:https://www.cnblogs.com/zhoujinyi/archive/2012/11/29/2795079.html table_definition_cache,该参数值的代表MySQL可以缓存的表定义的数量。和前面的table cache不同的是,表定义的缓存占用空间很小, 而且不需要使用文件描述符,也就是只要打开.frm文件,缓存表定义,然后就可以关闭.frm文件。 table_open_cache: 参考:https://www.cnblogs.com/bayaim/p/9436842.html, https://www.cnblogs.com/zhoujinyi/archive/2013/01/31/2883433.html table_open_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。 通过检查峰值时间的状态值Open_tables和 Opened_tables,可以决定是否需要增加table_open_cache的值。 如果你发现open_tables等于table_open_cache,并且opened_tables在不断增长,那么你就需要增加table_open_cache的值了(上述状态值可:SHOW STATUS LIKE ‘Open%tables’获得)。 query_cache 查询缓存,不建议使用 query-cache-type: 是否打开查询缓存 query-cache-size: 查询缓存的大小 open_files_limit: 参考:https://www.cnblogs.com/zhoujinyi/archive/2013/01/31/2883433.html open_files_limit = table_open_cache*2 + innodb表 ###################################################################################### Master-Slave主从复制相关参数 半同步Master端参数: 参考:https://www.cnblogs.com/ivictor/p/5735580.html rpl_semi_sync_master_enabled on 开启半同步复制 rpl_semi_sync_master_timeout 参数控制,单位是毫秒,默认为10000,即10s,master等待slave超时时间,超时之后关闭半同步,转为异步复制
rpl_semi_sync_master_wait_no_slave
ON默认值,当状态变量Rpl_semi_sync_master_clients中的值小于rpl_semi_sync_master_wait_for_slave_count时,Rpl_semi_sync_master_status依旧显示为ON。
OFF当状态变量Rpl_semi_sync_master_clients中的值于rpl_semi_sync_master_wait_for_slave_count时,Rpl_semi_sync_master_status立即显示为OFF,即异步复制。
说得直白一点,如果我的架构是1主2从,2个从都采用了半同步复制,且设置的是rpl_semi_sync_master_wait_for_slave_count=2,如果其中一个挂掉了,
对于rpl_semi_sync_master_wait_no_slave设置为ON的情况,此时显示的仍然是半同步复制,如果rpl_semi_sync_master_wait_no_slave设置为OFF,则会立刻变成异步复制。
rpl_semi_sync_master_wait_point=wait_after_commit|wait_after_sync:
参考:https://mp.weixin.qq.com/s/fvvEn6nSYzQs9NCa1eCOIQ
wait_after_commit:半同步;wait_after_sync:增强(无损)半同步
为什么要增强的半同步复制?因为传统的半同步复制有潜在问题
什么潜在的问题?潜在幻读,因为传统半同步wait_after_commit在master提交之后再sync日志到slave,如果Slave端还没有读到该事务的events,
同时主库发生了crash,然后切换到备库。那么之前读到的事务就不见了,出现了幻读
rpl_stop_slave_timeout ???
控制stop slave 命令的执行时间
控制stop slave 的执行时间,在重放一个大的事务的时候,突然执行stop slave,命令 stop slave会执行很久,这个时候可能产生死锁或阻塞,严重影响性能,mysql
5.6可以通过rpl_stop_slave_timeout参数控制stop slave 的执行时间
connect_retry/master_connection_retry master_Retry_Count
这几个参数用一句话来解释: 备库过了slave_net_timeout秒之后,还没有收到主库来的数据,它就会开始第一次重试。 然后每过 connect_retry/master_connection_retry秒后,备库会再次尝试重连主库。直到重试了 master_retry_count 次,它才会放弃重试。 performance and replication carsh safety相关参数: 参考:http://blog.itpub.net/22664653/viewspace-1752588/ master_info_repository = file|table
master_info持久化方式 sync_master_info = N 每N个事件写入一次表/文件 relay_log_info_repository = file|table relay_info持久化方式 sync_relay_log_info = N 每N个事件写入一次表/文件 relay log信息如果配置为非Table模式,写事物和写文件(将已经应用的日志位置写入文件)是无法保持一致的 MySQL 5.6版本通过将复制信息存放到表中来解决此问题.通过配置两个参数 relay_log_info_repository=TABLE,master_info_repository=TABLE, relay log info 会存放到 mysql.slave_relay_log_info表中, master info 会存放mysql.slave_master_info表中。就是把SQL线程执行事务和更新mysql.slave_replay_log_info的语句看成一个事务处理,这样就会一直同步的. 半同步复制Slave端相关参数 rpl-semi-sync-slave-enabled = on Slave开启半同步 rpl_semi_sync_master_trace_level 用于开启半同步复制模式时的调试级别,默认是32 rpl_semi_sync_slave_trace_level 用于开启半同步复制模式时的调试级别,默认是32 parallel replication多线程复制 slave_parallel_workers = N slave上多个线程回放master上的binlog slave_parallel_type = DATABASE | LOGICAL_CLOCK DATABASE:默认值,基于库的并行复制方式 LOGICAL_CLOCK:基于组提交的并行复制方式 slave_preserve_commit_order =0| 1 当slave_preserve_commit_order=0时 没有办法保证顺序,在恢复的过程中会有问题,到时候你怎么start slave 呢? start slave until SQL_AFTER_MTS_GAPS ; reset slave Master执行顺序: last_committed=0,sequence_number=1,2,3,4 slave执行顺序: 有可能就是 last_committed=0,sequence_number=1,4,3,2 当slave_preserve_commit_order=1时 后一个sequence_number提交的时候,会等待前一个sequence_number完成。 Waiting for preceding transaction to commit Slave Relay log
max_relay_log_size
标记relay log 允许的最大值,如果该值为0,则默认值为max_binlog_size(1G);如果不为0,则max_relay_log_size则为最大的relay_log文件大小;
relay_log
定义relay_log的位置和名称,如果值为空,则默认位置在数据文件的目录,文件名为host_name-relay-bin.nnnnnn(By default, relay log file names have the form host_name-relay-bin.nnnnnn in the data directory);
relay_log_index
同relay_log,定义relay_log的位置和名称;
relay_log_info_repository = table|file
relay_log_info_file
设置relay-log.info的位置和名称(relay-log.info记录MASTER的binary_log的恢复位置和relay_log的位置),也可以配置记录到mysql库中的slave_relay_log_info表中;
relay-log-recovery = 1
这个参数的作用是:当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从
master上获取日志,这样就保证了relay-log的完整性。默认情况下该功能是关闭的,将relay_log_recovery的值设置为 1时,可在slave从库上开启该功能,建议开启。
relay-log-purge
是否自动清空不再需要中继日志时。默认值为1(启用)
MySQL相关参数总结
标签:ESS nec info base enable 活动 官方文档 img 开始
本文系统来源:https://www.cnblogs.com/wy123/p/11273023.html
内容总结
以上是互联网集市为您收集整理的MySQL相关参数总结全部内容,希望文章能够帮你解决MySQL相关参数总结所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。