Quantcast
Channel: polygun2000的博客
Viewing all articles
Browse latest Browse all 55

安装mysql后的基本设置

$
0
0
读percona文档的笔记,网上有其他人完整翻译的,需要的可以自己搜索。

对于生产系统,安装完mysql以后,有以下参数需要关注调整一下:

一 、最基本的设置
innodb_buffer_pool_size: 
对于使用InnoDB引擎的MySQL来说,这是最最重要的一个设置,“buffer pool”是用来缓存“数据”和“索引”的。
对于大多数“读操作”,这个pool应该尽可能大,从而确保尽量使用内存而不是磁盘。
典型设置范例:5-6GB (8GB RAM), 20-25GB (32GB RAM), 100-120GB (128GB RAM).

innodb_log_file_size: 
这个设置的是“redo log”的大小。“redo log”用于确保写入操作快速和稳定,以及用于故障恢复。
在5.1版本以前设置这个参数要考虑写性能与故障恢复速度间的平衡,在5.5版本之前,总的“redo log”(默认是有2个log文件)大小被设置为最多4GB,但在5.6版本以后,这个数值已经被提高了。
请以innodb_log_file_size = 512M 为初始设置(总共会有1GB的redo log),这个数值应该满足大部分写入需求。
如果你明确知道你的应用对写入操作敏感,并且你使用的是5.6版本,那么可以设置innodb_log_file_size = 4G为初始值。

max_connections: 
如果经常发现‘Too many connections’错误,那么说明”max_connections“设置太低了。
因为应用经常不能正确关闭数据库连接,而默认这个数值只有151,所以就会报错了。
但是这个值设置太大(1000以上),可能出现的问题是,如果真有1000个活跃的transation,那么服务器会变得停止响应。解决的方法是在应用层面使用“connection pool”或者在MySQL层面使用“thread pool”。

二、InnoDB设置

innodb_file_per_table: 
此设置告诉InnoDB应该将“数据”和“索引”存储在“共享表空间”还是存储在“独立表空间”,即每张表一个.ibd文件。
使用“独立表空间”的优势是可以回收空间,并且一些高级功能例如“压缩”也需要它。
但是使用“独立表空间”不会提升性能!!
另外,当你的表非常多,比如多于1万张的时候,就不要使用"独立表空间"。
MySQL 5.6以后,默认值就是“ON”,即使用“独立表空间”,所以不要再进行配置。 

innodb_flush_log_at_trx_commit: 
默认设置是“1”,意味着InnoDB完全符合ACID,是为了保障数据安全的最佳设置,通常用于MySQL master。
而对于MySQL slave最好设置为“2”或者“0”,以取得最佳性能。

innodb_flush_method: 
此设置控制如何将log和数据flush到磁盘。如果你的服务器配置有带电池的RAID卡,且配置为write-back模式,那么设置为“O_DIRECT”可以提高性能。
默认数值是“fdatasync“。可以使用sysbench来帮助我们决定使用那种方式。

innodb_log_buffer_size: 
此设置控制”未提交的transaction“缓冲区大小。默认大小是1MB,通常不用调整。但如果你的transaction包含有大的blob/text字段,那么这个buffer会被很快填满,导致额外的I/O。请查看Innodb_log_waits变量,如果这个值不为0, 那么就需要增加这个buffer的值。

三、其他设置

query_cache_size: 禁用查询缓存,5.6版本中默认是禁止的,即query_cache_size = 0。
查询缓存是已知的性能瓶颈,所以尽量用其他方法加速读查询。例如:良好的索引,增加专用于读的slave,使用redis外部缓存查询等。

log_bin: 如果做主从复制,master必须开启binlog,同时要设置不重复的server_id。
binlog一旦创建就会一直保留,可能会耗尽磁盘空间,所以需要设置expire_logs_days,定期清除binlog。
如果不是做主从复制,那么最好不要打开binlog。

skip_name_resolve: 禁止server解析client的域名。唯一的缺点是GRANT的时候只能使用IP地址。 

四、5.7版本的设置
上边是对5.6版本的,在5.7版本中,上述的很多设置已经是默认值了,例如:

innodb_file_per_table=ON
innodb_stats_on_metadata = OFF
innodb_buffer_pool_instances = 8 (or 1 if innodb_buffer_pool_size < 1GB)
query_cache_type = 0; query_cache_size = 0; (disabling mutex)

只有4个设置才需要关注,即:
innodb_buffer_pool_size = 1G       # (总内存的50%-70%,但不应超过database的大小)
innodb_log_file_size = 256M        # (128M-2G,不应超过buffer pool的大小)
innodb_flush_log_at_trx_commit = 1 # 对于slave改成2或0
innodb_flush_method = O_DIRECT     #(避免双重buffering)

参考文档:
https://www.percona.com/blog/2014/01/28/10-mysql-performance-tuning-settings-after-installation/
https://www.percona.com/blog/2016/10/12/mysql-5-7-performance-tuning-immediately-after-installation/



 

Viewing all articles
Browse latest Browse all 55

Trending Articles