简介:

Mysql 参数优化

一、Mysql 源码编译参数

shell > yum -y install gcc gcc-c++ make cmake ncurses-devel zlib-devel bison

shell > cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DTMPDIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/data/mysql.sock \
-DSYSCONFDIR=/etc/my.cnf \
-DWITH_MYISAM_STORAGE_ENGINE= \
-DWITH_INNOBASE_STORAGE_ENGINE= \
-DWITH_FEDERATED_STORAGE_ENGINE= \
-DDEFAULT_CHARSET=utf8 \
-DEXTRA_CHARSETS=all \
-DDEFAULT_COLLATION=utf8_general_ci

##  -DCMAKE_INSTALL_PREFIX=/usr/local/mysql      指定 Mysql 安装路径
##  -DMYSQL_DATADIR=/usr/local/mysql/data          指定 Mysql 数据目录
##  -DTMPDIR=/usr/local/mysql/data                        指定 Mysql 临时目录
##  -DMYSQL_UNIX_ADDR                                      指定 Mysql socket
##  -DSYSCONFDIR=/etc/my.cnf                              指定 Mysql 配置文件
##  -DWITH_MYISAM_STORAGE_ENGINE=1             安装 MyISAM 存储引擎
##  -DWITH_INNOBASE_STORAGE_ENGINE=1          安装 Innodb 存储引擎
##  -DWITH_FEDERATED_STORAGE_ENGINE=1        安装 Federated 存储引擎
##  -DDEFAULT_CHARSET=utf8                               指定默认字符集为 utf8
##  -DEXTRA_CHARSETS=all                                   安装扩展字符集
##  -DDEFAULT_COLLATION=utf8_general_ci            默认排序规则 utf8_general_ci

Cmake 参数:http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html

---------------------------------------------------------------------------------------------

二、my.cnf 配置文件

## global_buffers 在内存中缓存从数据文件中检索出来的数据块,可以大大提高查询和更新数据的性能

## 计算公式:Innodb_buffer_pool_size + Innodb_additional_mem_pool_size + Innodb_log_buffer_size + key_buffer_size + query_cache_size

## per_thread_buffers 线程独享内存大小

## 计算公式( read_buffer_size + read_rnd_buffer_size + sort_buffer_size + thread_stack + join_buffer_size + binlog_cache_size )* max_connections

## 注意:global_buffers + per_thread_buffers 不能大于实际物理内存,否者并发量大时会造成内存溢出、系统死机 !

[client]
port =
socket = /usr/local/mysql/data/mysql.sock ## 定义客户端连接信息,端口号、socket 存放位置 [mysqld]
port =
socket = /usr/local/mysql/data/mysql.sock
basedir = /usr/local/mysql
datadir = /usr/local/mysql/data
temdir = /usr/local/mysql/data ## Mysql 基本信息,端口号、socket、安装目录、数据存放目录、临时目录 # skip-name-resolve ## 禁止 Mysql 对外部连接进行 DNS 解析,加快连接速度。开启后所有远程连接主机只能使用 IP 的方式 skip_external_locking ## 避免 Mysql 外部锁定,减少出错几率、增强稳定性 local-infile = ## 禁止 SQL 读取本地文件 character-set-server = utf8 ## 默认字符集 utf8 default-storage-engine = innodb ## 默认存储引擎 # general_log = on ## 开启查询日志,一般选择不开启,因为查询日志记录很详细,会增大磁盘 IO 开销,影响性能 # general_log_file = /usr/local/mysql/data/mysql.log ## 查询日志存放位置及文件名 log-error = /usr/local/mysql/data/error.log ## 错误日志位置跟文件名 # slow_query_log = on ## 开启慢查询日志,开启后将会记录执行时间超过 long_query_time 参数值的 SQL 语句( 一般临时开启即可 ) # long_query_time = ## 定义执行时间超过多少秒为慢查询,默认 10s # slow_query_log_file = /usr/local/mysql/data/slow.log ## 定义慢查询日志存放位置 # server-id = ## Mysql Server 唯一标识,用来做主同同步( 主从时开启 ) log-bin = mysql-bin ## 开启 binlog ( 二进制 ) 日志,主要用来做增量备份跟主从同步 binlog_format = mixed ## Mysql binlog 的日志格式,Statement、ROW 跟 Mixed( 混合模式 ) binlog_cache_size = 2M ## 二进制日志缓冲大小,此参数是为每 Session 单独分配的,当一个线程开始一个事务时,Mysql 就会为此 Session 分配一个 binlog cache,当这个事务提交时,binlog cache 中的数据被写入 binlog 文件
## 通过 show status like 'binlog_cache%'; 来查看使用 binlog cache 的次数及使用磁盘的次数 sync_binlog = ## 这个参数对 Mysql 系统来说很重要,不仅影响到 binlog 对 Mysql 所带来的性能损耗,还影响到 Mysql 中数据的完整性。
## 值为 时代表事务提交后,Mysql 不做 fsync 之类的磁盘同步指令刷新 binlog_cache 中的信息到磁盘,而让 Filesystem 自行决定什么时候同步,或者 cache 满了之后才同步磁盘。
## 值为 n 时代表进行 n 次事务提交后,Mysql 将进行一次 fsync 之类的磁盘同步指令来将 binlog_cache 中的数据强制写入磁盘。
## 系统默认将此参数设置为 ,即不做任何强制性的磁盘刷新指令,性能最好,但是风险也最大。当系统崩溃时 binlog_cache 中的所有 binlog 信息都会丢失。
## 而设置为 时,是最安全但是性能损耗最大。当系统崩溃时,最多丢失 binlog_cache 中未完成的一个事务,对实际数据没有实质性的影响。 expire_logs_days = ## 保留 天的 binlog 日志,系统重启、执行 flush logs 或 binlog 日志文件大小达到上限时删除 binlog 日志 back_log = ## Mysql 连接请求队列存放数,当某一时刻客户端连接请求过多,造成 Mysql Server 无法为其建立连接时存放的数量,最大 ( 增大时需同时调整 OS 级别的网络监听队列限制 ) max_connections = ## Mysql 最大连接数,直接影响 Mysql 应用的并发处理能力( ~ 是个比较合适的值,注意每建立的连接都会占用一定的内存空间,直到连接被关闭才释放内存 ) wait_timeout =
interactive_timeout = ## 服务器关闭非交换连接之前等待活动的秒数,默认 秒( 注意:在 my.cnf 中修改这个参数需要配合 interactive_timeout (超时间隔)参数一起修改,否则不生效)
##( Mysql 处理完一条连接后所等待释放的时间,如果并发很高,默认设置会导致最大连接被占满,出现 "too many connections" 错误 )
##( 如果这个值很低,比如 ,可能会导致出现 "ERROR 2006 (HY000) MySQL server has gone away" 的错误,出现这个错误还有可能是 max_allowed_packet 设置过小 )
## 真实案例 max_connect_errors = ## 最大连接失败次数,跟性能没有太大关系,主要跟安全方面有关( 达到此上限后会无条件阻止其连接数据库 ,默认 ) connect_timeout = ## 连接超时时间为 秒 max_allowed_packet = 16M ## 网络传输中一次消息量的最大值,默认 4M ,必须设为 的整倍数 table_open_cache = ## 打开文件描述符的缓存个数,防止系统频繁打开、关闭描述符而浪费资源( 对性能有影响,默认 ) read_buffer_size = 512K ## Mysql 读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,Mysql 会为其分配一段内存缓冲区( 默认 128K ,此参数为每线程分配 ) read_rnd_buffer_size = 512K ## Mysql 随机 Query 缓冲区大小,当按任意顺序读取行时,将分配一个随机读取缓冲区。如进行排序查询时,Mysql 会首先扫描该缓冲,避免磁盘搜索,提高查询速度( 默认 256K ,该缓冲也是为每线程分配 ) sort_buffer_size = 512K ## 系统中对数据进行排序时使用的 buffer ,如果系统中排序比较大,且内存充足、并发不大时,可以适当增大此值( 默认 256K ,此参数为每线程分配独立的 buffer ) join_buffer_size = 512K ## join 为 ALL、index、rang 或 index_merge 时使用的 buffer( 默认 256K ,每 Thread 都会建立自己独立的 buffer ) thread_stack = 256K ## 参数表示每线程的堆栈大小 thread_cache_size = ## Thread Cache 池中存放的连接线程数( 此池中的线程不是启动服务时就创建的,而是随着连接线程的创建和使用,逐渐将用完的线程存入其中,达到此值后将不再缓存连接线程 )
## 缓存命中率计算公式:Thread_Cache_Hit = ( Connections - Thread_created ) / Connections * %
## 系统运行一段时间后,Thread Cache 命中率应该保持在 % 以上 explicit_defaults_for_timestamp = ## 如果此参数不开启,error_log 中会有警告信息 query_cache_type = ## 是否启用 query_cache , 为不使用( 若要关闭 query_cache 时,需同时将 query_cache_size 、query_cache_limit 设为 ) query_cache_size = 32M ## 查询缓冲大小,当重复查询时会直接从该缓冲中获取,但是当所查询表有改变时,缓冲的查询将失效( 频繁写入、更新、高并发的环境下建议关闭此缓冲 ) query_cache_limit = 1M ## 单个查询所能够使用的缓冲区大小 ft_min_word_len = ## 使用全文索引最小长度 transaction_isolation = REPEATABLE-READ ## 事务隔离级别,为了有效保证并发读取数据的正确性( 默认 Repeatables Read 即:可重复读 )
## Innodb 有四种隔离级别:Read Uncommitted( 未提交读 )、Read Committed( 已提交读 )、Repeatable Read( 可重复读 )、Serializable( 可序列化 ) tmp_table_size = 32M ## 临时表大小 key_buffer_size = 32M ## 用来缓存 MyISAM 存储引擎的索引( 默认 8M ,如果使用 Innodb 存储引擎,此值设为 64M 或更小 )
## 计算公式:key_reads / key_read_requests * % 的值小于 0.1% ## Innodb 存储引擎相关参数 innodb_file_per_table = ## 关闭独享表空间,使用共享表空间 innodb_buffer_pool_size = 256M ## Innodb 存储引擎核心参数,用于缓存 Innodb 表的索引、数据( 默认 128M ,单独使用 Innodb 存储引擎且单一 Mysql 服务时建议设为物理内存的 % - % )
## 可以通过 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 * %
## Innodb_buffer_pool_read 命中率 = ( innodb_buffer_pool_read_requests - innodb_buffer_pool_reads )/ innodb_buffer_pool_read_requests * % innodb_use_sys_malloc = ## 使用系统自带的内存分配器,替代 innodb_additional_mem_pool_size 参数 innodb_data_file_path = ibdata1:512M:autoextend ## 指定一个大小为 512M 的、可扩展的 ibdata1 数据文件 innodb_read_io_threads =
innodb_write_io_threads = ## Innodb 使用后台线程处理数据页上的 IO 请求,根据 CPU 核数修改,默认 innodb_thread_concurrency = ## Innodb 线程并发数, 为不限制,默认 innodb_flush_log_at_trx_commit = ## Innodb 事务日志刷新方式, 为每隔一秒 log thread 会将 log buffer 中的数据写入到文件,并通知文件系统进行文件同步 flush 操作,极端情况下会丢失一秒的数据
## 为每次事务结束都会触发 log thread 将 log buffer 中的数据写入文件并通知文件系统同步文件,数据最安全、不会丢失任何已经提交的数据
## 为每次事务结束后 log thread 会将数据写入事务日志,但只是调用了文件系统的文件写入操作,并没有同步到物理磁盘,因为文件系统都是有缓存机制的,各文件系统的缓存刷新机制不同
## 当设为 时是最为安全的,但性能也是最差的。 为每秒同步一次,性能相对高一些。设为 性能是最好的,但故障后丢失数据也最多( OS 跟主机硬件、供电足够安全可以选择,或对数据少量丢失可以接受 )。 innodb_log_buffer_size = 8M ## 事务日志所使用的缓冲区。Innodb 在写事务日志时,为了提高写 Log 的 IO 性能,先将信息写入 Innodb Log Buffer 中,当满足 Innodb_flush_log_trx_commit 参数或日志缓冲区写满时,再将日志同步到磁盘中。
## 默认 8M ,一般设为 ~64M 即可,可以通过 show status like 'innodb_log%'; 查看状态 innodb_buffer_pool_dump_at_shutdown = ## 关闭数据库时把热数据 dump 到本地磁盘。 innodb_buffer_pool_dump_now = ## 采用手工方式把热数据 dump 到本地磁盘。 innodb_buffer_pool_load_at_startup = ## 启动时把热数据加载到内存。 innodb_buffer_pool_load_now = ## 采用手工方式把热数据加载到内存。 ## 以上四条参数会快速预热 Buffer_pool 缓冲池,当机器正常重启后,热数据还保留在内存中,避免瞬间连接数爆满导致机器死机。 [mysqldump]
quick
max_allowed_packet = 4M ## 使用 mysqldump 工具备份数据库时,当某张表过大时备份会报错,需要增大该值( 增大到大于表大小的值 )

Mysql 性能优化 ( my.cnf )的更多相关文章

  1. MySQL性能优化之max_connections配置参数浅析

    这篇文章主要介绍了MySQL性能优化之max_connections配置参数浅析,本文着重讲解了3种配置max_connections参数的方法,需要的朋友可以参考下 MySQL的max_connec ...

  2. MYSQL之性能优化 ----MySQL性能优化必备25条

    今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情.当我们去设计数据库表结构,对操作数 ...

  3. mysql性能优化-慢查询分析、优化索引和配置 (慢查询日志,explain,profile)

    mysql性能优化-慢查询分析.优化索引和配置 (慢查询日志,explain,profile) 一.优化概述 二.查询与索引优化分析 1性能瓶颈定位 Show命令 慢查询日志 explain分析查询 ...

  4. MySQL 性能优化技巧

    原文地址:MySQL 性能优化技巧 博客地址:http://www.extlight.com 一.背景 最近公司项目添加新功能,上线后发现有些功能的列表查询时间很久.原因是新功能用到旧功能的接口,而这 ...

  5. MySQL性能优化必备25条

    1. 为查询缓存优化你的查询 大多数的MySQL服务器都开启了查询缓存.这是提高性最有效的方法之一,而且这是被MySQL的数据库引擎处理的.当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一 ...

  6. MySQL性能优化(七):其它优化

    原文:MySQL性能优化(七):其它优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/v ...

  7. MySQL性能优化(四):SQL优化

    原文:MySQL性能优化(四):SQL优化 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/ ...

  8. 一份平民化的MySQL性能优化指南

    前言 近期在重新学习总结MySQL数据库性能优化的相关知识,本文是根据自己学习以及日常性能测试调优过程中总结的经验整理了一份平民化的优化指南,希望对大家在进行MySQL调优分析时有帮助!   MySQ ...

  9. MySQL性能优化的5个维度

    面试官如果问你:你会从哪些维度进行MySQL性能优化?你会怎么回答? 所谓的性能优化,一般针对的是MySQL查询的优化.既然是优化查询,我们自然要先知道查询操作要经过哪些环节,然后思考可以在哪些环节进 ...

随机推荐

  1. C#/.NET 中推荐的 Dispose 模式的实现

    如果你觉得你的类需要实现 IDisposable 接口,还是需要注意一些坑的.不过前人准备了 Dispose 模式 供我们参考,最大程度避免这样的坑. C#程序中的 Dispose 方法,一旦被调用了 ...

  2. 关于上架AppStore最后一步的“出口合规信息”、“内容版权”、“广告标识符”的选择(转)

    这里只当作记录:http://blog.csdn.net/ashimar_a/article/details/51745675

  3. css 样式常用属性

    一般的一个DIV的CSS设置属性有:margin,padding,width,height,font-size,text-align,background,float,border 附:< cs ...

  4. drone 学习六 发布部署&&集成私有容器仓库&&构建代码s3 保存

    备注:      需要进行drone 以及gitlab 环境的配置,可以参考相关资料   1. 参考项目 https://github.com/rongfengliang/drone-appdemo ...

  5. Promise的一些相关讲解

    在javascrpit的语言特性上 有明确的一个特性指出,该语言的是单线程进程.这就意味着JavaScript的所有网络操作,浏览器事件,都必须是异步执行. 如下面的例子,可以感受到单线程与异步回调: ...

  6. Eclipse的maven工具

    左侧是组件以及组件依赖树(层级结构):右侧是识别出来的所有的组件:  

  7. 3、MR开发入门

    1.预先准备2个文件file1.txt和file2.txt.文件内容为网页上摘下,不具有代表性,只为举例. file1.txt内容为: With this setup, whenever you ch ...

  8. 在Google的GKE上创建支持Internal Load Balancer的Service

    在Google的Kubernetes Engine上发布service,可以采用除On-Promise相同的Cluster IP和NodePort两种方式外,还可以创建LoadBalaner的Serv ...

  9. C程序花括号嵌套层次统计(新)

    [问题描述] 编写程序,统计给定的C源程序中花括号的最大嵌套层次,并输出花括号嵌套序列,该程序没有语法错误. 注意:1)源程序注释(/* … */)中的花括号应被忽略,不参与统计.2)源程序中的字符串 ...

  10. GOF23设计模式之状态模式(state)

    一.状态模式概述 用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题. 结构: (1)Context 环境类   环境类中维护一个 State 对象,它定义了当前的状态. (2)State ...