Mysql 数据库的优化

最近一直在搞Mysql数据库的配置和优化,下面记录一下这些天研究的结果,以方便以后查看。
一、服务器的硬件的优化
对mysql服务器来说主要从以下几个方面来考虑:
1、磁盘寻道能力(磁盘I/O)
因为Mysql每一秒都在进行着大量的、复杂的查询操作,对磁盘的读写可想而知,所以通常认为磁盘的I/O是制约Mysql性能的最大因素之一。如果磁盘的I/O性能不好,造成的直接后果就是MySqL的性能非常低下,对于这种情况可以考虑使用RAID1+0。对于硬盘来说最好选那种转速比较快的,这样数据的操作的效率也会有大的提高。
2、cpu对于Mysqlr 影响也是不容忽视的,要选择运算能力强悍的cpu.
3、内存不要小于2GB,最好使用4GB以上的物理内存。
4、服务器选择上可以dell的R710 2颗cpu(双四核) 16G内存(这个可以扩展的)硬盘有两种选择:一个是300G、15000r的,一种是500G的7200r的 可以根据自己的需要来选择。也可选HP的DL580G5。我在工作中使用的dell的R710。
二、MySqL配置文件的优化
MySqL在服务器上安装最好是选择源码编译安装。对于MySqL的优化主要是在/etc/my.cnf这个文件中来修改一些参数。
在这个文件中主要的参数是在[mysqld]这部分中,这部分中主要包括了mysqld服务启动参数,它涉及的方面很多,其中有MysqL的目录文件和文件、通信、网络、信息安全、内存管理、优化、查询缓存区,还有MySql的日志设置等。下面就来看一下这个有文件中的参数:
port = 3306   
// mysql服务的运行时的端口
socket = /tmp/mysql.sock  
//socket文件是在Linux/Unix环境下特有的,用户在Linux/Unix环境下客户端连接可以不通过TCP/IP网络而直接使用unix socket连接MySqL。
skip-locking  
//避免MySqL的外部锁定,减少出错率,增强稳定性。
skip-name-resolve  
//禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意的是,如果开启该选项,财所有远程主机连接授权都要使用IP地址的方式了,否则MySQL将无法正常处理连接请求!
back_log = 256 
//back_log参数的值指出在MySqL暂时停止响应新请求之前,短时间内多少个请求可以被存在堆栈中。如果系统在短时间内有很多连接,则需要增大该参数的值,该参数值指定到来的TCP/IP连接的监听队列的大小。不同操作系统在这个队列的大小上有自己的限制。如果试图将back_log设定得高于操作系统的限制将是无效的。其默认值为50。对于Linux系统而言,推荐设置为小于512的整数。
key_buffer_size = 256 
//指定用于索引的缓冲区大小,增加它可得到更好的索引处理性能。对于内存4GB左右的服务器来说,该参数可设置为256MB或者384MB。
max_allowed_packet = 1M
//设定在网络传输中一次消息量的最大值。系统默认为1MB,最大值1GB,必须设定为1024的倍数,单位为字节。
thread_stack = 192K 
//设置MySQL每个线程的堆栈大小,默认值足够大,可满足普通操作。可设置范围为128KB至4GB。默认为192KB。
table_cache = 614K  (mysql 5.1.3之后这个设置就变为了table_open_cache)
//指示表高速缓冲区的大小。当MySqL访问一个表时,如果在MySQL表缓冲区中还有空间,那么这个表就被打开并放入表缓冲区,这样做的好处是可以更快速地访问表中的内容。一般来说,可以查看数据库运行峰值时间的状态值Open_tables和Opened_tables,用以判断是否需要增加table_cache的值,即如果Open_cache的接近table_cache的时候,并且Opened_tables这个值在逐渐增加,那就要考虑增加这个值的大小了。
sort_buffer_size = 6M  
//设定查询排序时使用的缓冲区大小,系统默认大小为2MB。注意::这个参数对应的分配内存是每个连接独占的,如果有100个连接,那么实际分配的总排序缓冲区大小为100x6=600MB。所以,对于内存在4GB左右的服务器来说,推荐将其设置为6MB到8MB
read_buffer_size = 2M
//读查询操作所能使用的缓冲区大小。和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
join_buffer_size = 4M  
//联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每个连接独享。
myisam_sort_buffer_size = 8M  
//设置在REPAIR TABLE或用CAREATE INDEX创建索引或ALTER TABLE 的过程中排序索引所分配的缓冲区大小,可设置范围4Bytes到4GB,默认为8MB。
thread_cache_size = 64  
//设置Thread Cache池中可以缓存的连接线程的最大数量,可以设置为0~16384,默认为0。这个值表示可以重新利用保存在缓存中线程的数量。当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中;如果线程重新被请求,那么请求将从缓存中读取;如果缓存中是空的或者是新的请求,那么这个线程将被重新创建;如果有很多新的线程,增加这个值可以改善系统性能。通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。我们可以根据物理内存设置规则如下:1GB内存我们配置为8,2GB内存我们配置为16,3GB我们配置为32,4GB或更大的我们给此值为64或更大的数值。
query_cache_size=256M
//指定MySQL查询缓冲的大小。可以通过在MySQL控制台观察,如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况;如果Qcache_hits的值非常大,则表明查询缓冲使用得非常频繁。另外,如果该值较小反而会影响效率,那么可以考虑不用查询缓冲。对于Qcache_free_block,如果该值非常大,则表明缓冲区中碎片很多。
tmp_table_size = 256M
//设置内存临时表最大值。如果超过该值,则将会把临时表写入磁盘,其范围为1KB到4GB。
max_connections = 5000  
//指定MySQL允许的最大连接进程数。如果在访问论坛时经常出现Too Many Connections的错误提示,则需要增大该参数值。
max_connect_errors = 6000
//设置每个主机的连接请求异常中断的最大次数,当超过该次数,MySQL服务器将禁止host的连接请求,直到MySQL服务器重新启动或通过flush hosts 命令清空此host的相关信息。
wait_timeout = 120
//指定一个请求的最大连接时间,对于4GB左右内存的服务器来说,可以将其设置为5~10.
thread_concurrency = 8  
//该参数取值为服务器逻辑CPU数量X2,在本例中,服务器有两个物理CPU,而每个物理CPU又支持H.T超线程,所以实际取值为4X2=8。这也是目前双四核主流服务器的配置。
skip-networking  
//开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果Web服务器是以远程连接的方式访问MySQL数据库服务器的,则不要开启该选项,否则将无法正常连接!
table_cache = 614 (这个在5.1.3后就变成了table_open_cache)
//给经常访问的表分配的内存,物理内存越大,设置就越大。调大这个值,一般情况下可以降低磁盘IO,但是相应的会占用更多的物理内存,这这里设置为614
innodb_addition_mem_pool_size = 1M  
//默认为1MB
innodb_flush_log_at_trx_commit = 1  
//设置为0就是等到innodb_log_buffer_size列队满后再统一储存,默认为1,也是最安全的设置。
innodb_log_buffer_size = 2M  
//默认为1MB,通常设置为8~16MB就足够了。
innodb_thread_concurrency = 8  
//你的服务器有几个CPU就设置为几,建议用默认设置,一般为8.
read_rnd_buffer_size = 16M  
//设置进行随机读的时候所使用的缓冲区。此参数和read_buffer_size所设置的Buffer相反,一个是顺序读的时候使用,一个是随机读的时候使用。但是两者都是针对线程的设置,每个线程都可以产生两种Buffer中的任何一个。read_rnd_buffer_size的默认值256KB,最大值4GB。
以上只一些理论参考值,很多时候需要具体情况具体分析,其他参数的变更我们可以等MySQL上线稳定一段时间后再根据status值进行调整。
本文转自 ZhouLS 51CTO博客,原文链接:http://blog.51cto.com/zhou123/1152994

针对Mysql数据库服务器的优化相关推荐

  1. MySQL数据库服务器优化详细

    查看MySql状态及变量的方法: Mysql> show status --显示状态信息(扩展show status like 'XXX') Mysql> show variables - ...

  2. MySQL数据库与SQL优化

    一.MySQL 数据库与 SQL 优化 1.结构图 二.MySQL 数据库引擎简介 1.ISAM(IndexedSequentialAccessMethod)     ISAM 是一个定义明确且历经时 ...

  3. 高并发大流量专题---10、MySQL数据库层的优化

    高并发大流量专题---10.MySQL数据库层的优化 一.总结 一句话总结: mysql先考虑做分布式缓存,过了缓存后就做mysql数据库层面的优化 1.mysql数据库层的优化的前面一层是什么? 数 ...

  4. 系统mysql数据库服务器,系统mysql数据库服务器

    系统mysql数据库服务器 内容精选 换一换 "数据导入"章节适用于MRS 3.x及后续版本.Loader是实现MRS与外部数据源如关系型数据库.SFTP服务器.FTP服务器之间交 ...

  5. MySQL数据库SQL层级优化

    MySQL数据库SQL层级优化 本篇主涉及MySQL SQL Statements层面的优化. 首先,推荐一个链接为万物之始:http://dev.mysql.com/doc/refman/5.0/e ...

  6. linux mysql设置数据库utf_Linux系统下MySQL数据库服务器字符集设置

    Linux认证考试:Linux系统下的MySQL数据库服务器字符集设置 启动MySQL后,以root登录mysql isher@isher-ubuntu:~$ mysql -u root >sh ...

  7. 解决Docker容器内访问宿主机MySQL数据库服务器的问题

    解决Docker容器内访问宿主机MySQL数据库服务器的问题 参考文章: (1)解决Docker容器内访问宿主机MySQL数据库服务器的问题 (2)https://www.cnblogs.com/ga ...

  8. MySQL数据库服务器的架设

    2019独角兽企业重金招聘Python工程师标准>>> 导读 MySQL数据库是Linux操作系统上用得最多的数据库系统,它可以非常方便的与其它服务器集成在一起,如Apache.Vs ...

  9. 启用CentOS6.5 64位安装时自带的MySQL数据库服务器

    本人在虚拟机上又安装了一台linux机器,作为MySQL数据库服务器用,在安装时选择了系统自带的MySQL服务器端,以下是启用步骤. 首先开启mysqld服务 #service mysqld star ...

最新文章

  1. ajax请求的步骤,ajax请求的五个步骤
  2. 配置Configuration Manager站点和层次架构(2)
  3. PC微信逆向:使用HOOK拦截二维码
  4. 深度学习 常用python操作(1)
  5. Swift傻傻分不清楚系列(十二) 属性
  6. 软件测试——0422作业
  7. css3 animate基本属性
  8. Android的Widget桌面应用学习
  9. ISI CVPR journal ranking
  10. Google chrome浏览器保存离线网页方法
  11. JavaScript网页简单特效
  12. Flex Builder中创建的项目4种
  13. 用c 语言乘法运算结果,c中的基本运算
  14. JDK1.8_API(不能用 你来看砍我)
  15. 土法炼钢:怎么实现一个简单的B+Tree In-Disk
  16. 12、Pytest之@pytest.mark.自定义标签使用
  17. python3 setup.py install_安装Twisted执行python3 setup.py install报错
  18. 漫谈粗放与精益:编程的两种思路与方式
  19. Android File格式上传图片
  20. 锂电池净化厂房低湿车间装修SICOLAB

热门文章

  1. flink 任务执行类的加载
  2. RocketMQ源码解析-Producer启动
  3. input属性disabled和readonly的区别
  4. 你一定要了解的Kubernetes
  5. Laravel源码分析之Session
  6. php7当前目录,PHP获取路径或目录或当前文件名
  7. 使用jps来查看虚拟机状态
  8. 浅析ReentrantReadWriteLock读写锁
  9. 超级详细的手写webpack4配置来启动vue2项目(附配置作用)
  10. centos7 搭建keepalived+Nginx+tomcat