实验环境
OS: debian_version_8.11 64位
CPU: Intel(R) Xeon(R) CPU E5-2630 v4 @ 2.20GHz
Mem: 8GB
Kernel: 3.16.0-10-amd64
Mariadb: mariadb-10.2.30
说明:
1、MariaDB/MySQL的默认设置性能非常差,仅仅起一个功能测试的作用,不能用在生产环境中,因此要对一些参数进行调整优化。
2、但是配置文件各参数的调整需要根据实际环境,不同时期不同数量级的数据进行性能优化。
3、本文MySQL/MariaDB配置文件位于/etc/mysql/my.cnf。 每次更改此文件后你需要重启MySQL服务,以更改生效。
4、经供参考,在生产环境中进行任何变更之前需要慎重考虑。
配置文件参数解读
[client]
port = 3306
#客户端默认连接端口socket
socket = /apps/mysql/lock/mysql.sock
#用于本地连接的socket套接字
[mysqld]
#服务端基本配置
port = 3306
#mysql服务端监听端口
socket = /apps/mysql/lock/mysql.sock
#为mysql客户端程序和服务器之间的本地通讯指定一个套接字文件
basedir = /apps/mysql
#mysql安装目录
datadir = /apps/mysql/data
#mysql数据库数据文件存放目录
pid-file = /apps/mysql/run/mysql.pid
#pid所在的目录
log-error = /apps/mysql/logs/mysql-error.log
#记录mysql错误日志文件
user = mysql
#mysql启动用户
bind-address=192.168.1.146
#表示监听IPV4地址
skip_name_resolve = 1
#表示跳过主机名解析
skip-external-locking
#mysql选项以避免外部锁定。该选项默认开启。不使用系统锁定,要使用myisamchk,必须关闭服务器
key_buffer_size = 384M
#这个参数用来缓存MyISAM存储引擎的索引参数,增加它可得到更好处理的索引(对所有读和多重写)。默认为InnoDB存储引擎,该参数可以设置小点,64M即可。
#系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,
#可以知道key_buffer_size设置是否合理。比例key_reads/key_read_requests应该尽可能的低,
#至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE 'key_read%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低
max_allowed_packet = 16M
#允许最大接收数据包的大小,防止服务器发送过大的数据包。增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如仅当你发出长查询或mysqld必须返回大的结果行时mysqld才会分配更多内存。可以设置为16MB或者更大,但设置的太大也可能有危险。
#该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
table_open_cache = 512
#MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64,假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上。
back_log = 600
#MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
#然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
#如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
#以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
#另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
#你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
sort_buffer_size = 8M
#MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
#如果不能,可以尝试增加sort_buffer_size变量的大小,默认为256k。另外,一般出现Using filesort的时候,要通过增加索引来解决。
read_buffer_size = 2M
#该参数用于表的顺序扫描,表示每个线程分配的缓冲区大小。比如在进行全表扫描时,MySQL会按照数据的存储顺序依次读取数据块,每次读