mysql5.7性能提升一百倍调优宝典


mysql5.7性能提升一百倍调优宝典

文章插图
 
前言:全文中一共有常用的(事实上你如果花1-2周阅读、理解、自己动手设一下后是需要这么多参数的)76个参数,笔者把近10年里3个亿万级项目的数据库调优用此篇浓缩到了可能读者只需要2周时间就可以掌握,同时我是按照:
  1. 每一个参数干吗?
  2. 在某些典型硬件配置下的db上参数该设多少?
  3. 设会怎么样?
  4. 不设会怎么样?
  5. 有什么坑如何填坑?
  6. 有些参数怎么算、算法又如何
这种style来写的,相信此篇会对一些使用MySQL的尤其是正在或者将要面临万级并发的项目、网站有所帮助 。具体请看文档!
一千个DBA就有一千种配置方式!
大家一定记得不要轻易去看网上,要看只看官网!网上很多博客都是错的,连参数都列错了,5.7很多参数和5.6是完全不一样的 。
可能你从未看到过这样的一篇集中火力式的把mysql参数列了这么全的文章,很有兴曾参与过超3万并发的18~19年的数轮520、618、双11、双12保卫战 。因此这一篇是汇集了最精华和实战的内容把mysql所有的参数列在这边供大家参考 。并且以(64c cpu,128gb内存)的mysql cpu和内存来进行了一轮配置 。而此文的内存相关参数部分可以延展至256gb~512gb 。
另外有一点,建议在mysql的服务器上使用ssd 。除非并发数永远控制在500-1000内那就没必要使用ssd,普通高速磁盘就可以了 。
你会发觉这篇文章是一篇宝藏,这些参数都能够自己动手试验一篇基本在外面是可以吊打mysql面试官了 。
client域:1.character_set_client
推荐设置:
utf8mb4
作用:
字符集设定,如果前台有连social mobile Application一类包括wechat,并且允许有使用emoji表情的,请开启成utf8mb4
如果不配的后果:
mysql不支持前端app存表情等字符
配置实例:
character_set_client=utf8mb4
mysqld域:
1)server-id
推荐设置:
如果没有做任何主从复制,此值可以不设 。
作用:
遇有主从复制,必设该值,每个参与主从复制的mysql实例的server-id不能重复,必须为阿拉伯数字 。
如果不配的后果:
如果你用的是主从复制,这个id不设那么整个mysql的主从复制会失几 。
配置实例:
server-id=1
2)port
推荐设置:
3306
作用:
mysql实例端口
如果不配的后果:
默认为3306
配置实例:
port=3306
3)bind_address
推荐设置:
0.0.0.0
作用:
除非有特殊需要,我们会限制只允许mysql实例被某一个ip方问,不支持多个,生产上都为:0.0.0.0然后使用防火墙策略来控制 。
如果不配的后果:
默认不允许远程登录
配置实例:
bind_address=0.0.0.0
4)autocommit
推荐设置:
1
作用:
生产上开启成1,如果你开启的是0会有一个这样的情况:
a运行一条insert语句,并未作commit;b去做查询此时b是查询不到的 。这种操作一般用于在写store procedure时用到 。
如果不配的后果:
如果在系统的my.cnf层面把它设成了0,如果在使用时(99%情况是用的1)时,你想要用root在生产运行时把它设成set autocommit = 1都开启不了 。而如果你在一开始就没它设置成1,那么当碰到某些特殊场景特别是写store procedure时需要把它设成0时,你是可以手动临时把某一个session给开在0的 。
配置实例:
autocommit = 1
5)character_set_server
推荐设置:
utf8mb4
作用:
字符集设定,如果前台有连social mobile application一类包括wechat,并且允许有使用emoji表情的,请开启成utf8mb4
如果不配的后果:
mysql不支持前端app存表情等字符
配置实例:
character_set_server=utf8mb4
6)skip_name_resolve
推荐设置:
1
作用:
生产上建议开启成1,这样mysql server不会对客户端连接使用反向DNS解析,否则客户端连上后有时在遇有生产高速运行时直接timeout,如果设成了1带来的问题就是你不能在mysql中使用主机名来对客户端权限进行划分,而是需要使用ip 。


推荐阅读