操作系统配置优化
网络方面的配置,要修改/etc/sysctl.conf
文件
#增加tcp支持的队列数
net.ipv4.tcp_max_syn_backlog = 65535
#减少断开连接时,资源回收
net.ipv4.tcp_max_tw_buckets = 8000
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_fin_timeout = 10
打开文件数的限制,可以使用ulimit -a
查看目录的各个限制,可以修改/etc/security/limits.conf
文件,增加以下内容以修改打开文件数量的限制
*soft nofile 65535
*hard nofile 65535
除此以外最好在MySQL服务器上关闭iptables,selinux等防火墙软件(可以用硬件防火墙)
MySQL配置文件
MySQL查找配置文件的顺序可以通过以下方法获得/usr/sbin/mysqld --verbose --help | grep -A 1 'Default options'
注意:如果多个位置存在配置文件,则后面的会覆盖前面的
常用参数说明:
innodb_buffer_pool_size:非常重要的一个参数,用于配置innodb的缓冲池,如果数据库中只有innodb表,则推荐配置量为总内存的75%
innodb_buffer_pool_instances:可以控制缓冲池的个数,默认情况下只有一个缓冲池
innodb_log_buffer_size:innoddb log缓冲的大小,由于日志最长每秒钟就会刷新所以一般不用太大
innodb_flush_log_at_trx_commit:关键参数(决定了数据多久将变更刷新到磁盘,1:每次提交都刷新 0:每一秒将日志刷新到磁盘 2:每次提交刷新到缓冲区,每一秒将缓冲区刷新到磁盘),对innodb的IO效率影响最大,默认值为1,可以取0,1,2三个值,一般建议设为2,但如果数据安全性要求比较高则使用默认值1
innodb_read_io_threads、innodb_write_io_threads:决定了innodb读写的IO进程数,默认为4
innodb_file_per_table:关键参数,控制innodb每一个表使用独立的表空间,默认为off,也就是所有的表都会建立在共享表空间中。导致并发写入的时候效率很低,共享空间里面是无法单独收缩的,如果删除一个很大的表,这时候是无法实现单独收缩的,只能讲所有表导出来后再导入进去,才能实现对共享空间进行收缩。
innodb_stats_on_metadata:决定了MySQL在什么情况下会刷新innodb表的统计信息(优化器如何使用表的索引是需要借助一些统计信息的)
第三方配置工具
percona configuration wizard: https://tools.percona.com/wizard
参考网站: