mysql 优化

[client]                                             #客户端
port    = 3306                                       #数据库端口3306
socket  = /my/log/mysql.sock                         #MySQL套接字,多实例下用socket连接             

[mysql]
default-character-set = utf8                         #字符集

[mysqld]
datadir = /data/                                      #数据文件路径
pid-file = /data/log/mysql.pid                        #MySQL进程
log_error = /data/log/mysql.err                       #MySQL错误日志路径
port = 3306                                          #数据库端口3306
socket = /tmp/mysql.sock                             #MySQL套接字,多实例下用socket连接
character_set_server = utf8                          #字符集
slow_query_log = 1                                   #开启慢查询日志
slow_query_log_file = /my/log/slowq.log              #慢查询日志路径
long_query_time = 1                                  #慢查询时间1秒
                                                     
max_tmp_tables = 64                                  #打开临时表的最大数量
max_heap_table_size = 64M                             #创建内存表的的大小
tmp_table_size = 512M                                #内存临时表的最大值
slave_load_tmpdir = /data/log                          #Slave临时目录路径
tmpdir = /data/log                                     #临时目录路径
                                                     
back_log = 500                                      #MySQL停止新请求前表示有多少请求可以暂时堆栈
skip-name-resolve                                    #跳过反向解析过程
max_allowed_packet = 32M                             #客户端接收最大字节会话值
max_connections = 4000                             #最大连接数
max_connect_errors = 2000                           #最大错误连接数,满了需要通过flush hosts来清楚
wait_timeout = 300                                 #等待超时时间
binlog_cache_size = 1M                               #binlog缓存大小
                                                     
table_open_cache = 1024                              #表缓冲区大小
thread_concurrency = 4                               #线程并发数
thread_cache_size = 64                             #线程缓冲区大小
thread_handling = pool-of-threads                    #开启线程池
thread_pool_high_prio_mode = none                    #新的连接根据thread_pool_high_prio_mode分出优先级
thread_pool_idle_timeout = 28800                     #线程闲置超时时间
thread_pool_oversubscribe = 20                       #支持运行的最大任务数
#max_statement_time = 5000                           #控制查询在MySQL的最长执行时间,单位毫秒


query_cache_type = 1                                 #查询缓冲区是否开启 0:关闭  1:开启 2:demand
query_cache_size = 128M                                 #查询缓冲区大小
key_buffer_size = 256M                               #索引缓冲区大小
myisam_sort_buffer_size = 32M                        #MyISAM排序缓冲大小
read_buffer_size = 8M                                #顺序读缓区冲大小
read_rnd_buffer_size = 4M                            #随机读缓冲区大小
sort_buffer_size = 16M                               #排序缓冲区大小
join_buffer_size = 16M                               #join缓冲区大小


default_storage_engine = InnoDB                      #默认存储引擎
innodb_data_home_dir = /data/log                       #innodb存储引擎共享表空间路径,即:ibdata
innodb_data_file_path = ibdata1:256M:autoextend      #innodb存储引擎大小,自增
innodb_log_group_home_dir = /data/log                  #ib_logfile日志路径
innodb_log_files_in_group = 2                        #ib_logfile两组,每组两个
innodb_log_file_size = 512M                          #ib_logfile大小
innodb_log_buffer_size = 8M                          #日志缓冲区大小
innodb_flush_log_at_trx_commit = 2                   #等于2时,不写硬盘而是写入系统缓存,日志仍会每秒写到硬盘
innodb_flush_method = O_DIRECT                       #向文件写入数据,只有数据写到了磁盘,写入操作完成(write返回成功)
innodb_lock_wait_timeout = 50                        #innodb引擎锁等待超时时间
innodb_thread_concurrency = 16                      #innodb线程并发数
innodb_buffer_pool_size = 44G                        #innodb存储引擎缓冲区大小i(实际内存的70%-80%)
innodb_additional_mem_pool_size = 20M                #用来设置 InnoDB 存储的数据目录信息和其它内部数据结构的内存池大小
innodb_io_capacity = 1500                            #控制Innodb checkpoint时的IO能力
innodb_use_native_aio = 1                            #控制是否启用Native AIO,默认开启。官方的测试显示,启用Native AIO,恢复速度可以提高75%
innodb_file_per_table = 1                            #innodb引擎使用独立的表空间
innodb_open_files = 3000                             #innodb打开文件数
innodb_print_all_deadlocks = 1                       #在error中打印锁信息

memlock = 1                                          #MySQL是否使用交换分区

server-id = 1137                                     #server-id 搭建主从时必须配置且唯一
log-bin = /data/log/mysql-bin                          #二进制日志文件路径
binlog_format = mixed                                #二进制日志模式    分三种,分别为:row,statement,mixed
expire_logs_days = 7                                 #删除过期日志时间
relay_log = /data/log/relay-bin                        #relay-log文件路径
skip-slave-start                                     #Slave不会随MySQL的启动而启动
sync_binlog = 1                                      #将binlog_cache中的数据强制写入磁盘


[mysqldump]
default-character-set = utf8                         #数据库字符集
[client]                                             
port    = 3306                                       
socket  = /my/log/mysql.sock                         
[mysql]
default-character-set = utf8                         
[mysqld]
datadir = /data/                                      
pid-file = /data/log/mysql.pid                        
log_error = /data/log/mysql.err                       
port = 3306                                          
socket = /tmp/mysql.sock                             
character_set_server = utf8                          
slow_query_log = 1                                   
slow_query_log_file = /my/log/slowq.log              
long_query_time = 1                                  
                                                     
max_tmp_tables = 64                                  
max_heap_table_size = 64M                             
tmp_table_size = 512M                                
slave_load_tmpdir = /data/log                          
tmpdir = /data/log                                     
                                                     
back_log = 500                                      
skip-name-resolve                                    
max_allowed_packet = 32M                             
max_connections = 4000                             
max_connect_errors = 2000                           
wait_timeout = 300                                 
binlog_cache_size = 1M                               
                                                     
table_open_cache = 1024                              
thread_concurrency = 4                               
thread_cache_size = 64                             
thread_handling = pool-of-threads                    
thread_pool_high_prio_mode = none                    
thread_pool_idle_timeout = 28800                     
thread_pool_oversubscribe = 20                       
query_cache_type = 1                                 
query_cache_size = 128M                                 
key_buffer_size = 256M                               
myisam_sort_buffer_size = 32M                        
read_buffer_size = 8M                                
read_rnd_buffer_size = 4M                            
sort_buffer_size = 16M                               
join_buffer_size = 16M                               
default_storage_engine = InnoDB                      
innodb_data_home_dir = /data/log                       
innodb_data_file_path = ibdata1:256M:autoextend      
innodb_log_group_home_dir = /data/log                  
innodb_log_files_in_group = 2                        
innodb_log_file_size = 512M                          
innodb_log_buffer_size = 8M                          
innodb_flush_log_at_trx_commit = 2                   
innodb_flush_method = O_DIRECT                       
innodb_lock_wait_timeout = 50                        
innodb_thread_concurrency = 16                      
innodb_buffer_pool_size = 44G                        
innodb_additional_mem_pool_size = 20M                
innodb_io_capacity = 1500                            
innodb_use_native_aio = 1                            
innodb_file_per_table = 1                            
innodb_open_files = 3000                             
innodb_print_all_deadlocks = 1                       
memlock = 1                                          
server-id = 1137                                     
log-bin = /data/log/mysql-bin                          
binlog_format = mixed                                
expire_logs_days = 7                                 
relay_log = /data/log/relay-bin                        
skip-slave-start                                     
sync_binlog = 1                                      
[mysqldump]
default-character-set = utf8  

  

back_log = 500  ##back_log值不能超过TCP/IP连接的侦听队列的大小。若超过则无效,查看当前系统的TCP/IP连接的侦听队列的大小命令:cat /proc/sys/net/ipv4/tcp_max_syn_backlog目前系统为1024。对于Linux系统推荐设置为小于512的整数。

binlog_format=MIXED ##Mysql主从的复制可以有三种复制类型,分别是:语句的复制STATEMEN,行的复制ROW和混合类型的复制MIXED。

character-set-server=utf8 ##字符集设置成utf8

long_query_time = 2##设置慢查询响应的时间,记录超过2秒的SQL执行语句。

log-bin = /data/bin_log/mysql_binlog   ##binlog日志存储位置。

innodb_log_file_size=256M ##在高写入负载尤其是大数据集的情况下很重要。这个值越大则性能相对越高,跟据服务器大小而异。这是redo日志的大小。redo日志被用于确保写操作快速而可靠并且在崩溃时恢复。在MySQL 5.5,redo日志的总尺寸被限定在4GB(默认可以有2个log文件)。而MySQL 5.6里可以设置允许大于4G。你可以一开始就把它设置成4G。这个值的设置其实是可以计算的 你可以通过命令SHOW GLOBAL STATUS的输出看Innodb_os_log_written的值,把该值除以1024*1024 得到的结果是每分钟处理的redo日志大小,然后再乘以60得到每小时处理的日志大小,因为在5.5以上版本都是默认有两个日志重做日志文件ib_logfile0和ib_logfile1,所得到结果再除以2,再取整就是你的redo该设置大小了。

innodb_log_buffer_size=8M ##这个参数就是用来设置Innodb 的Log Buffer 大小的,系统默认值为1MB。Log Buffer的主要作用就是缓冲Log 数据,提高写Log 的IO 性能。一般来说,如果你的系统不是“写负载非常高且以大事务居多”的话,8MB 以内的大小就完全足够了。

innodb_buffer_pool_size=4G #这配置对Innodb表来说非常重要。该参数主要作用是缓存innodb表的索引,数据,插入数据时的缓冲由于Innodb把数据和索引都缓存起来,因此在配置该参数时,可以设置它高达60-80% 的可用内存(官网是建议的也是系统内存的80%左右)。缓冲池是数据和索引缓存的地方这能保证你在大多数的读取操作时使用的是内存而不是硬盘。一般配置的值是5-6GB(8GB内存),19-25GB(32GB内存),38-50GB(64GB内存)仅供参考。

innodb_thread_concurrency=8 ##指服务器逻辑线程数可以设置成与系统一样数量,参数可配置成逻辑CPU数量的两倍。

innodb_flush_logs_at_trx_commit=2 #系统默认值是 1,但是这样设置会使得提交更新事务都会刷新到磁盘中,会造成资源耗费。所以需要值设置为 2,这样就不用不把日志刷新到磁盘上,而只刷新到操作系统的缓存上。但然啦也可以设置为0, 这样设置是很快,但也造成了相对的不安全,会导致MySQL服务器崩溃时就会丢失一些事务。而设置为 2 刚好尼补了。

innodb_additional_mem_pool_size=4M ##该参数默认为1M适当调整该参数的大小以确保所有数据都能存放在内存中提高访问效率的,主要用来存放Innodb的内部目录,这个值不用分配太大,系统可以自动调。

join_buffer_size = 8M ##表示联合查询操作所能使用的缓冲区大小。

key_buffer_size=256M ##指定索引缓冲区的大小,它决定索引处理的速度,你可以设置成系统的物理内存的1/4,它主要针对的是MyISAM引擎,但是设置大少不要超过4G

max_connections = 3000 ##设置置MySQL的最大连接,按你实际情况适当设置就好。如果你经常看到‘Too many connections'错误,是因为max_connections的值太低了,所以需要设置更高的链接数,如果max_connection值被设高之后的缺陷是当服务器运行超过设置阈值或更高的活动事务时会变的没有响应。

max_allowed_packet = 4M ##这个参数mysql消息缓冲区的大小,如果这个过小可能会影响到部分操作,默认是1M,一般设置成4-16M就可以了.

max_connect_errors = 10000 ##表示如果有同一个主机访问的参数值超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。

myisam_sort_buffer_size = 64M ##这个参数默认是8M,表示MyISAM表发生变化时重新排序所需的缓冲,一般64M就已经足够了。

port = 3306 ##表示使用3306来做mysql启动端口

query_cache_type=1 ##表示控制缓存的类型,有三个参数可选(0、1、2)设置为0,表示缓存没有应用,也就相当于禁用了,设置为1,表示缓存所有的结果,设置为2表示只缓存在select语句中通过SQL_CACHE指定需要缓存的查询。

query_cache_size=32M ##参数表示mysql查询结果的缓冲区大小,一般不建议设置太大,因为设置太大会增加开销,一般设置成32M-256M左右即可,设置参数一般为2的倍数。

read_buffer_size=4M ##表示按顺序查询操作包括读、查询等操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享,一般不建议太大,对于4G到16G内存的服务器2M-8M就可以了。

read_rnd_buffer_size=4M ##表示是MySQL的随机读缓冲区大小。当任意顺序读取行时将分配一个随机读取缓冲区,进行排序查询时,便分配随机缓冲作为该操作的缓冲区大小,同样的对于4G到16G内存的服务器2M-8M就可以了.

server-id = 1 ##表示做主从同步所定义的serverid,作为master的server_id必须必slave端的要小,越小表示优先级越高,但是在同个网段内的mysql服务,不允许设置同样的sever_id。参数可设参考范围(1-200).

skip-external-locking ##开启该选项表示避免MySQL的外部锁定,减少出错几率增强稳定性,适用于单服务器环境。

slow_query_log = 1 ##开启慢查询日志,作用于慢查询日志,顾名思义,就是查询慢的日志。

skip-name-resolve ##禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求。

##skip-networking ##开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项,否则将无法正常连接。

skip-networking ##开启该选项可以彻底关闭MySQL的TCP/IP连接方式,如果WEB服务器是以远程连接的方式访问MySQL数据库服务器则不要开启该选项,否则将无法正常连接。

sort_buffer_size = 8M ##表示查询排序时所能使用的缓冲区大小。它直接与实时连接的个数 有关,实时连接的个数乘以sort_buffer_size的大小就是实际分配的总共排序缓冲区大小。所以,对于内存在4GB-8G左右的服务器可以设置为6-16M。

socket = /tmp/mysql.sock ##mysql.sock 文件作用主要是server和client在同一台服务器,当使用本地连接时,就会使用socket进行连接,该文件一般是放在/var/lib/mysql/mysql.sock下,也常常使用ln –s 在/tmp目录下做软连接。

table_open_cache=1024 ##table_cache主要用于设置table高速缓存的数量。由于每个客户端连接都会至少访问一个表,因此此参数的值与max_connections有关。你可以通过命令show variables like '%open%'; 查看open_files_limit参数,大量使用MyISAM的环境里,应该保证open_files_limit表类型至少是table_cache的二到三倍,调到512-1024最佳。

thread_cache_size = 64  ##这个变量值表示的是可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.通过比较 Connections 和 Threads_created 状态的变量,可以看到这个变量的作用 根据物理内存设置规则可以做以下配置2G-4G可以设置为16-64左右,当然大于4G的服务器,设置64也已经足够了。

thread_stack = 256K ##表示每个连接线程被创建时,MySQL给它分配的内存大小,对于8-16G的服务器设置成256K就可以了,再大一点的,可以适当增加呢。

tmp_table_size=64M ##表示定义一个临时表的大小,该值默认为16M,可调到64-256最佳,线程独占,太大可能内存不够造成I/O堵塞,如果动态页面可以适当调大点。

wait_timeout = 200 ##表示指定一个请求的最大连接时间,该值过大会导致,MySQL里大量的SLEEP进程无法及时释放,拖累系统性能,不过也不能把这个指设置的过小,否则你可能会遭遇到“MySQL has gone away”之类的问题。  系统默认是8个小时,感觉太大,可以设置小点。

原文地址:https://www.cnblogs.com/zhangb8042/p/9046086.html