Centos7 安装配置优化mysql(mariadb分支)

1.说明

由于在centos7的yum仓库中没有mysql,centos7用mariadb替代了mysql. mariadb是mysql源代码的一个分支,
mysql被ORACLE闭源,而mariadb则开源,两者的功能是相同.

2.step1:安装,启动

$ yum -y install mariadb mysql-devel mariadb-server
$ systemctl start mariadb   //systemctl stop mariadb 停止mariadb
$ systemctl enable mariadb 
$ systemctl status  mariadb 

3.step2:配置优化(mysql读取配置文件的顺序为/etc/mysql/my.cnf,/etc/my.cnf ,~/.my.cnf)

1.修改root密码:

$ mysql_secure_installation

2.优化配置文件选项(这里修改/etc/my.cnf)

mariadb的配置文件模板位于/usr/share/mysql 目录下,不同规模的应用都有各自的配置文件模板.
优化选项:

1. max_connections

MySQL最大连接数量,增加该值可以增加mysqld要求的文件描述符的数量,当server并发连接很大,可以增大此值,因为mysql会为每个里阿姐提供连接缓存区,连接数越多内存开销远大.当数值太小时,为出现ERROR 1040:To many connections .通过show variables like 'max_connections' 查看该值show status like 'max_used_connections' 响应的连接数,连接高峰时max_used_connections/max_connections=0.85较为理想.

2. back_log

mysql连接堆栈数,当mysql在短时间收到非常多的连接,数量超过了max_connections,这时mysql就将未响应的连接放到堆栈中,back_log就是指定这个堆栈的大小的,show full processlist 发现有大量的unauthenticated user的待连接进程的时候,就可以增大back_log的值,默认值是50,可调优为128(Linux设置范围为0~512)

3.interactive_timeout/wait_timeout

wait_timeout 是mysql关闭一个非交互连接前等待的秒速,interactive_timeout是mysql关闭一个交互连接(mysql shell)前等待的秒数.所谓交互连接是mysql_real_connection()使用CLIENT_INTERACTIVE的连接.对于wait_timeout在不影响的你的sql处理的情况下,越低越好,减小wait_timeout 直到你的应用不会产生sleep process最好.对于interactive_timeout,默认值是28800(8个小时),可以调优为7200,但这个不会对你的应用有太大的影响(当你他通过 mysqldump or mysql command line tools 连接mysql 时有影响). show variables like '%timeout%',查看 wait_timeout 和interactive_timeout.除此之外还有connect_timeout,net_read_timeout,net_write_timeout,这几个选项设置大会避免产生timeout error,当你执行比较长的query时.

4.key_buffer_size

key_buffer_size指定索引缓冲区的大小,它会影响索引处理的速度尤其是索引读取的速度,通过状态值key_cache_miss_rate=key_reads/key_read_requests*100% 大小可以直到key_buffer_size设置时候合理,key_reads/key_read_requests 越低越好,至少是1:100,1:10000,通过 show status like '%key_reads%' 查看这两个状态值.key_buffer_size只对myisam表起作用,即使你不使用Myisam表,但是内部的临时磁盘表是MYISAM表,也要使用该值,可以检查状态值 created_tmp_disk_tables 得知详情.默认key_buffer_size 为128M,可以调优为256M

5.read_buffer_size

顺序扫描的线程围棋扫描的每张表分配的缓冲区大小,默认是128K.如果想要对一张大表进行全表扫描,可以增大此值.一般可设置为16M

6.read_rnd_buffer_size

随机读缓冲区大小,当按任意顺序读取时,mysql将会分配一个随机读取缓冲区,在进行排序查询时,mysql首先会先扫描一遍该缓冲区,以避免对磁盘就行读取,当要排序大量数据,可以适当增大此值.一般可设置为16M.

7.query_cache_size

查询结果缓存区的大小,对于同样的查询语句,mysq直接从缓冲区读取,通过show status like 'Qcache_%',可以直到query_cache_size是否合理.如果 Qcache_lowmem_prunes的值非常大,表明会经常出现缓冲不够.如果Qcache_hits非常大,说明查询缓冲使用非常的频繁,需要适当增大query_cache_size.如果Qcache_hits不是很大,说明查询的重复率很低,这时使用查询缓冲反而会影响效率.与查询缓冲有关的还有query_cache_type,query_cache_limit,query_cache_min_res_unit.query_cache_type 指定是否使用查询缓冲.query_cache_min_res_unit 指定查询缓冲区空间的最小单位,默认是4k,当Qcache_free_blocks很大,说明缓冲区碎片很多,这是可以减小query_cache_min_res_unit.查询缓存碎片率=Qcache_free_blocks/Qcache_total_blocks,查询缓存碎片率大于20%,可以用flush query cache 整理碎片,尝试减小query_cache_min_res_unit.查询缓存利用率=(query_cache_size-Qcache_free_memory)/query_cache_size100%.查询缓存利用在80%以上,并且Qcache_lowmem_prunes>50,这时要么是query_cache_size太小,要么碎片太多.查询缓冲命中率=(Qcache_hits-Qcache_inserts)/Qcache_hits100%.

8.sort_buffer_size

每个排序的线程的缓冲区的大小,增大该值可以加速order by和group by等操作,此参数最好保持默认,分配大小不当可能导致性能下降. 默认值是2M,可设置为16M. show variables like 'sort_buffer_size'

9.join_buffer_size

联合查询分配的缓冲区大小,它和read_buffer_size,read_rnd_buffer_size,sort_buffer_size都是每个线程单独分配的.

10.table_open_cache

数据表缓冲区大小,每当mysql访问一个表的时候,如果在表的缓冲去还有空间,就将该表放入缓冲区中,下次访问的时候可以更快速的访问.通过在查询高峰起查看状态值open_tables和opened_tables,判断时候可以增加table_open_cache的值,如果open_tables和table_open_cache 相同,而opened_tables在不断增加,可以适当增加此值.

11.max_heap_table_size

内存表大小的最大值,max_heap_table_size和tmp_table_size一起限制了内存表的大小,如果某个内存表的大小超过了tmp_table_size,mysql自动将heap表改为磁盘上myisam表.

12.tmp_table_size

临时表的大小,在做group by查询时会生成一张临时表,如果调高该值,mysql将增加heap表的大小,可以达到提高联合查询的效果.尽量优化查询,保证查询过程中生成的表在内存中,避免临时表过大,导致生成磁盘上的myisam表.与之相关的几个状态值created_tmp_tables ,created_tmp_disk_tables,create_tmp_files 每次创建临时表的时候,created_tmp_files 增大,当临时表大于tmp_table_size时,created_tmp_disk_tables 将增加,created_tmp_files标示mysql创建的临时文件数.表理想的值是created_tmp_disk_tables/created_tmp_tables*100%<=25%.
tmp_table_size默认是16M,可以调到64-256M,也是每个线程分配,太大会导致io堵塞

13.thread_cache_size

缓存的线程数的大小,由于mysql每个连接对应一个独立的线程,如果在短时间内打开很多连接,意味process在短时间创建多个线程,这样会很消耗cpu,为了解决此问题,变产生thread_cache,mysql将已关闭的连接对应的thread缓存起来,等下次新连接到来时直接reuse thread in threads pool,而不需要临时创建thread,而thread_cache_size就是决定threads pool的大小的.thread_cache_size是通过在连接高峰期查看状态值threads_created,max_used_connections,connections,show status like 'threads_created' ,show status like 'max_used_connections',show status like 'connections'.然后计算hit rate=threads_created/connections,如果hit rate要小于50%.或者thread_cache_size>max_used_connections.
也可通过命令查看threads_created的值.

$ mysqladmin -u root -p -r -i 1 ext | grep Threads_created
14.thread_concurrency

通常设置为设置为主机cpu的两倍.

15.innodb_buffer_pool_size(只针对InnoDB)

innodb_buffer_pool_size作用和key_buffer_size一样.通常对于单独运行的mysql服务器,innodb_buffer_pool_size 设置为机器内存的70%-80%.

16.innodb_log_file_size

一般设置为256M即可.

17.innodb_log_buffer_size

通常情况下4M,已经足够,对于较大的事物,可以适当增大此值

18.innodb_flush_log_at_trx_commit

主要决定innodb将log buffer中的数据写入磁盘文件(事务提交的时候)并且flush磁盘的时间点.取值可取0,1,2. 0 表示在事务提交时,不写入日志,而是每秒写入磁盘并flush磁盘一次;1 表示在没秒钟或者在事务提交前都将log buffer写入磁盘,flush磁盘;2 表示每次事务提交前都写入磁盘,然后每一秒进行flush 磁盘操作.innodb_flush_log_at_trx_commit对数据的插入有很大影响,通常建议设置为2.

19.innodb_thread_concurrency

对于cpu为1-2的机器,可以将这个选项设置为0,对于cpuNum>4的机器建议设置为(cpu_num +disk_num),8左右,详细见这篇文章.

20.innodb_additional_mem_pool_size

指定innodb用来储存数据字典和其他内部数据的结构的内存池大小.默认值是1M.通常不用设置太大,如果不够mysql会在日志中写入警告信息.对于2G内存的机器,建议设置为20M.

21.innodb_flush_method

在大多数情况下设置为O_DIRECT,详见这里.

原文地址:https://www.cnblogs.com/whereareyoufrom/p/5053918.html