MySQL数据库参数优化
概述
最近在对各个系统的mysql做一些参数上的优化,也开了慢查询,准备后面针对特定sql再进一步优化。下面主要介绍一下一些优化的参数。
1、优化前mysql配置
可以看到基本上是没怎么做优化的。

2、优化后的配置
以下是优化后的一些参数。


3、优化参数说明:
- #基础配置
- datadir=/data/datafile
- socket=/var/lib/mysql/mysql.sock
- log-error=/data/log/mysqld.log
- pid-file=/var/run/mysqld/mysqld.pid
- character_set_server=utf8
- #允许任意IP访问
- bind-address = 0.0.0.0
- #是否支持符号链接,即数据库或表可以存储在my.cnf中指定datadir之外的分区或目录,为0不开启
- #symbolic-links=0
- #支持大小写
- lower_case_table_names=1
- #二进制配置
- server-id = 1
- log-bin = /data/log/mysql-bin.log
- log-bin-index =/data/log/binlog.index
- log_bin_trust_function_creators=1
- expire_logs_days=7
- #sql_mode定义了mysql应该支持的sql语法,数据校验等
- #mysql5.0以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。
- #ANSI模式:宽松模式,对插入数据进行校验,如果不符合定义类型或长度,对数据类型调整或截断保存,报warning警告。
- #TRADITIONAL模式:严格模式,当向mysql数据库插入数据时,进行数据的严格校验,保证错误数据不能插入,报error错误。用于事物时,会进行事物的回滚。
- #STRICT_TRANS_TABLES模式:严格模式,进行数据的严格校验,错误数据不能插入,报error错误。
- sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
- #InnoDB存储数据字典、内部数据结构的缓冲池,16MB已经足够大了。
- innodb_additional_mem_pool_size = 16M
- #InnoDB用于缓存数据、索引、锁、插入缓冲、数据字典等
- #如果是专用的DB服务器,且以InnoDB引擎为主的场景,通常可设置物理内存的60%
- #如果是非专用DB服务器,可以先尝试设置成内存的1/4
- innodb_buffer_pool_size = 4G
- #InnoDB的log buffer,通常设置为 64MB 就足够了
- innodb_log_buffer_size = 64M
- #InnoDB redo log大小,通常设置256MB 就足够了
- innodb_log_file_size = 256M
- #InnoDB redo log文件组,通常设置为 2 就足够了
- innodb_log_files_in_group = 2
- #共享表空间:某一个数据库的所有的表数据,索引文件全部放在一个文件中,默认这个共享表空间的文件路径在data目录下。 默认的文件名为:ibdata1 初始化为10M。
- #独占表空间:每一个表都将会生成以独立的文件方式来进行存储,每一个表都有一个.frm表描述文件,还有一个.ibd文件。 其中这个文件包括了单独一个表的数据内容以及索引内容,默认情况下它的存储位置也是在表的位置之中。
- #设置参数为1启用InnoDB的独立表空间模式,便于管理
- innodb_file_per_table = 1
- #InnoDB共享表空间初始化大小,默认是 10MB,改成 1GB,并且自动扩展
- innodb_data_file_path = ibdata1:1G:autoextend
- #设置临时表空间最大4G
- innodb_temp_data_file_path=ibtmp1:500M:autoextend:max:4096M
- #启用InnoDB的status file,便于管理员查看以及监控
- innodb_status_file = 1
- #当设置为0,该模式速度最快,但不太安全,mysqld进程的崩溃会导致上一秒钟所有事务数据的丢失。
- #当设置为1,该模式是最安全的,但也是最慢的一种方式。在mysqld 服务崩溃或者服务器主机crash的情况下,binary log 只有可能丢失最多一个语句或者一个事务。
- #当设置为2,该模式速度较快,也比0安全,只有在操作系统崩溃或者系统断电的情况下,上一秒钟所有事务数据才可能丢失。
- innodb_flush_log_at_trx_commit = 1
- #设置事务隔离级别为 READ-COMMITED,提高事务效率,通常都满足事务一致性要求
- #transaction_isolation = READ-COMMITTED
- #max_connections:针对所有的账号所有的客户端并行连接到MYSQL服务的最大并行连接数。简单说是指MYSQL服务能够同时接受的最大并行连接数。
- #max_user_connections : 针对某一个账号的所有客户端并行连接到MYSQL服务的最大并行连接数。简单说是指同一个账号能够同时连接到mysql服务的最大连接数。设置为0表示不限制。
- #max_connect_errors:针对某一个IP主机连接中断与mysql服务连接的次数,如果超过这个值,这个IP主机将会阻止从这个IP主机发送出去的连接请求。遇到这种情况,需执行flush hosts。
- #执行flush host或者 mysqladmin flush-hosts,其目的是为了清空host cache里的信息。可适当加大,防止频繁连接错误后,前端host被mysql拒绝掉
- #在 show global 里有个系统状态Max_used_connections,它是指从这次mysql服务启动到现在,同一时刻并行连接数的最大值。它不是指当前的连接情况,而是一个比较值。如果在过去某一个时刻,MYSQL服务同时有10
- 00个请求连接过来,而之后再也没有出现这么大的并发请求时,则Max_used_connections=1000.请注意与show variables 里的max_user_connections的区别。#Max_used_connections / max_connections * 100% ≈ 85%
- max_connections=600
- max_connect_errors=1000
- max_user_connections=400
- #设置临时表最大值,这是每次连接都会分配,不宜设置过大 max_heap_table_size 和 tmp_table_size 要设置一样大
- max_heap_table_size = 100M
- tmp_table_size = 100M
- #每个连接都会分配的一些排序、连接等缓冲,一般设置为 2MB 就足够了
- sort_buffer_size = 2M
- join_buffer_size = 2M
- read_buffer_size = 2M
- read_rnd_buffer_size = 2M
- #建议关闭query cache,有些时候对性能反而是一种损害
- query_cache_size = 0
- #如果是以InnoDB引擎为主的DB,专用于MyISAM引擎的 key_buffer_size 可以设置较小,8MB 已足够
- #如果是以MyISAM引擎为主,可设置较大,但不能超过4G
- key_buffer_size = 8M
- #设置连接超时阀值,如果前端程序采用短连接,建议缩短这2个值,如果前端程序采用长连接,可直接注释掉这两个选项,是用默认配置(8小时)
- #interactive_timeout = 120
- #wait_timeout = 120
- #InnoDB使用后台线程处理数据页上读写I/0请求的数量,允许值的范围是1-64
- #假设CPU是2颗4核的,且数据库读操作比写操作多,可设置
- #innodb_read_io_threads=5
- #innodb_write_io_threads=3
- #通过show engine innodb status的FILE I/O选项可查看到线程分配
- #设置慢查询阀值,单位为秒
- long_query_time = 120
- slow_query_log=1 #开启mysql慢sql的日志
- log_output=table,File #日志输出会写表,也会写日志文件,为了便于程序去统计,所以最好写表
- slow_query_log_file=/data/log/slow.log
- ##针对log_queries_not_using_indexes开启后,记录慢sql的频次、每分钟记录的条数
- #log_throttle_queries_not_using_indexes = 5
- ##作为从库时生效,从库复制中如何有慢sql也将被记录
- #log_slow_slave_statements = 1
- ##检查未使用到索引的sql
- #log_queries_not_using_indexes = 1
- #快速预热缓冲池
- innodb_buffer_pool_dump_at_shutdown=1
- innodb_buffer_pool_load_at_startup=1
- #打印deadlock日志
- innodb_print_all_deadlocks=1
MySQL数据库参数优化的更多相关文章
- MySQL 数据库性能优化之缓存参数优化
在平时被问及最多的问题就是关于 MySQL 数据库性能优化方面的问题,所以最近打算写一个MySQL数据库性能优化方面的系列文章,希望对初中级 MySQL DBA 以及其他对 MySQL 性能优化感兴趣 ...
- MYSQL数据库的优化
我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...
- MySQL数据库的优化(上)单机MySQL数据库的优化
MySQL数据库的优化(上)单机MySQL数据库的优化 2011-03-08 08:49 抚琴煮酒 51CTO 字号:T | T 公司网站访问量越来越大,导致MySQL的压力越来越大,让我们自然想到的 ...
- [转]MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验
本文转自:http://liangweilinux.blog.51cto.com/8340258/1728131 年,嘿,废话不多说,下面开启MySQL优化之旅! 我们究竟应该如何对MySQL数据库进 ...
- mysql数据库性能优化(包括SQL,表结构,索引,缓存)
优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...
- MySQL数据库的优化-运维架构师必会高薪技能,笔者近六年来一线城市工作实战经验
原文地址:http://liangweilinux.blog.51cto.com/8340258/1728131 首先在此感谢下我的老师年一线实战经验,我当然不能和我的老师平起平坐,得到老师三分之一的 ...
- 浅谈MySQL 数据库性能优化
MySQL数据库是 IO 密集型的程序,和其他数据库一样,主要功能就是数据的持久化以及数据的管理工作.本文侧重通过优化MySQL 数据库缓存参数如查询缓存,表缓存,日志缓存,索引缓存,innodb缓存 ...
- 知识点:Mysql 数据库索引优化实战(4)
知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...
- Mysql数据库性能优化(一)
参考 http://www.jb51.net/article/82254.htm 今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显.关于数据库的性能,这并不只是DBA才需要 ...
随机推荐
- Arrays工具类使用与源码分析(1)
Arrays工具类主要是方便数组操作的,学习好该类可以让我们在编程过程中轻松解决数组相关的问题,简化代码的开发. Arrays类有一个私有的构造函数,没有对外提供实例化的方法,因此无法实例化对象.因为 ...
- oracle存储过程调试-plsql
1.搜索找到存储过程的包,并打开 选中右击--view spec&body 2.找到要测试的存储过程,设置断点,进行测试
- linux配置mysql数据库远程连接失败
今天配置linux下mysql数据库可以远程访问的问题,百度这方面的资料有很多,但是方法都一样,都试过了却未能解决,记录一下 第一步:在/etc/mysql/my.cnf下找到bind-address ...
- 4、numpy——创建数组
1.普通创建——np.array() 创建数组最简单的方法就是使用array函数.它接收一切序列型的对象(包括其他数组),然后产生一个新的含有传入数据的Numpy数组. import numpy as ...
- Codeforces - 1195E - OpenStreetMap - 单调队列
https://codeforc.es/contest/1195/problem/E 一个能运行但是会T的版本,因为本质上还是\(O(nmab)\)的算法.每次\(O(ab)\)初始化矩阵中的可能有用 ...
- JVM(5)之 GC之标记
开发十年,就只剩下这套架构体系了! >>> 堆分为年轻代和年老代.永久代是非堆内存,它又叫做方法区(一般的说法),主要存储已被加载的类信息.常量.静态变量.而该区域在java ...
- javascript跨浏览器操作xml
//跨浏览器获取xmlDom function getXMLDOM(xmlStr) { var xmlDom = null; if (typeof window.DOMParser != 'undef ...
- lambda 分组后的count
var list = stuList.GroupBy(b => b.PersonalId).Select(g => (new { personalId = g.Key, count = g ...
- 基于英伟达Jetson TX1的GPU处理平台
基于英伟达Jetson TX1 GPU的HDMI图像输入的深度学习套件 [309] 本平台基于英伟达的Jetson TX1视觉计算的全功能开发板,配合本公司研发的HDMI输入图像采集板:Jetson ...
- gelera集群详解
[MySQL]galera集群原理简介 特性 基于行复制的完全并行同步复制实时多主架构,任意节点可读写无延迟复制,事务零丢失,可靠健壮的读写体验.自动化节点关系控制:节点故障自动摘除,节点加入自动 ...