前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx, Redis, MySQL配置文件说明

Nginx, Redis, MySQL配置文件说明

作者头像
ITer.996
发布2019-08-28 10:50:32
1.6K0
发布2019-08-28 10:50:32
举报
文章被收录于专栏:PHPer技术栈PHPer技术栈

1. Nginx中/etc/nginx/nginx.conf的常用配置及说明

代码语言:javascript
复制
# 指定Nginx Worker进程运行用户, 语法: user user [group]
user nginx;

# worker进程数, 通常设置成和CPU的数量相等, 默认为1. 
worker_processes 1;

# 指定进程id存储文件
pid /run/nginx.pid;

# 事件模块
events {
    # 每个worker进程的连接数, 通过worker_connections和worker_proceses可以计算出maxclients: 
    # max_clients = worker_processes * worker_connections, 作为反向代理时, max_clients为: 
    # max_clients = worker_processes * worker_connections/4
    worker_connections 768;

    # 若开启此配置, 则Nginx会在接到一个新的连接通知之后, 尽可能多地去接受, 默认为: off
    multi_accept off;
}

# http核心模块
http {
    ##
    # 基本设置
    ##

    # 是否启动高效传输文件模式, sendfile可以让Nginx在传输文件时直接在磁盘和tcp socket之间传输数据. 
    # 如果这个参数不开启, 会先在用户空间(Nginx进程空间)申请一个buffer, 用read函数把数据从磁盘读到cache,
    # 再从cache读取到用户空间的buffer, 再用write函数把数据从用户空间的buffer写入到内核的buffer, 
    # 最后到tcp socket. 开启这个参数后可以让数据不用经过用户buffer, 默认off. 
    sendfile on;

    # 必须在sendfile开启模式才有效, 告诉Nginx在一个数据包里发送所有头文件, 而不一个接一个的发送, 默认off. 
    tcp_nopush on;

    # 告诉Nginx不要缓存数据, 而是一段一段的发送, 当需要及时发送数据时, 就应该开启这个功能, 
    # 这样发送一小块数据信息时就能够立即得到返回值, 默认on. 
    tcp_nodelay on;

    # 给客户端分配keep-alive链接超时时间, 服务器将在这个超时时间过后关闭链接. 
    # 我们将它设置低些可以让Ngnix持续工作的时间更长. 
    keepalive_timeout 65;

    # 影响散列表的冲突率, types_hash_max_size越大, 就会消耗更多的内存, 但散列key的冲突率会降低, 
    # 检索速度就更快. types_hash_max_size越小, 消耗的内存就越小, 但散列key的冲突率可能上升. 
    types_hash_max_size 2048;
    
    # 是否显示版本号, 若不显示, 浏览器访问时抓包, 查看HTTP响应的Server头没有版本号, 默认on 
    server_tokens on;

    # 保存服务器名字的hash表是由指令server_names_hash_max_size和server_names_hash_bucket_size所控制, 
    # 若Nginx给出需要增大hash max size或hash bucket size的提示, 那么首要的是增大前一个参数的大小. 
    # server_names_hash_max_size 512;
    # server_names_hash_bucket_size 64;

    # 若为off, 则始终按照默认的80端口, 若为on, 则返回当前正在监听的端口, 默认on. 
    port_in_redirect on;
    
    # 若为off, 则会以当前服务器的IP地址进行拼接URL. 若为on, 则会首先查找server_name, 
    # 若没有找到, 则会查找请求头的HOST字段, 若还是没有, 则以当前服务器的IP进行拼接, 默认on. 
    server_name_in_redirect on;

    # 设定MIME类型, 类型由mime.type文件定义. 
    include /etc/nginx/mime.types;
    
    # 设定默认的MIME类型, 默认: text/plain. 
    default_type application/octet-stream;

    # 设置上传文件大小最大为1000m, 超过会报413错误
    client_max_body_size 1000m;

    ##
    # SSL协议设置
    ##

    # 用于指定支持的加密协议. 
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
    
    # 设置协商加密算法时, 优先使用服务端的加密套件, 而不是客户端浏览器的加密套件, 默认off. 
    ssl_prefer_server_ciphers off;

    ##
    # 日志设置
    ##

    # 每一个访问请求的记录位置
    access_log /var/log/nginx/access.log;
    
    # Nginx错误信息的记录位置
    error_log /var/log/nginx/error.log;

    ##
    # Gzip压缩设置
    ##

    # 是否启动Gzip
    gzip on;
    
    # IE6的某些版本对gzip的压缩支持很不好, 会造成页面的假死, 
    # 对img进行Gzip后造成IE6的假死, 把对img的Gzip压缩去掉后就正常了.
    gzip_disable "msie6";
    
    # 和HTTP头有关系, 加个vary头, 给代理服务器用的, 有的浏览器支持压缩, 有的不支持, 
    # 为了避免浪费不支持的也压缩, 根据客户端的HTTP头来判断, 是否需要压缩. 
    gzip_vary on;
    
    # Nginx作为反向代理的时候该参数起作用, 根据某些请求和应答来决定是否在对代理请求的应答启用Gzip压缩, 
    # 是否压缩取决于请求头中的"Via"字段, 指令中可以同时指定多个不同的参数, 可选值值为:
    # off - 关闭所有的代理结果数据的压缩  
    # expired - 启用压缩,如果header头中包含 "Expires" 头信息  
    # no-cache - 启用压缩,如果header头中包含 "Cache-Control:no-cache" 头信息  
    # no-store - 启用压缩,如果header头中包含 "Cache-Control:no-store" 头信息  
    # private - 启用压缩,如果header头中包含 "Cache-Control:private" 头信息  
    # no_last_modified - 启用压缩,如果header头中不包含 "Last-Modified" 头信息  
    # no_etag - 启用压缩 ,如果header头中不包含 "ETag" 头信息  
    # auth - 启用压缩 , 如果header头中包含 "Authorization" 头信息  
    # any - 无条件启用压 
    # 默认为off.
    gzip_proxied off;
    
    # Gzip压缩比, 值为1~9, 1的压缩比最小处理速度最快, 9的压缩比最大但处理最慢(传输快但比较消耗CPU)
    gzip_comp_level 6;
    
    # 设置允许压缩的页面最小字节数, 默认值是0, 不管页面多大都压缩, 建议设置大于1k(即1024), 小于1k可能会越压越大.
    gzip_min_length 1024;
    
    # 设置系统获取几个单位的缓存用于存储Gzip的压缩结果数据流, 4 8k代表: 按照原始数据大小以8k为单位的4倍申请内存.
    gzip_buffers 4 8k;
    
    # 匹配MIME类型进行压缩
    gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;
    
    # 识别HTTP的协议版本, 99.99%的浏览器都支持1.1, 所以可以不用设这个值, 保持系统默认即可, 默认1.1. 
    gzip_http_version 1.1;

    ##
    # 虚拟主机设置
    ##

    # Nginx的配置很灵活, 支持include配置文件, 如果我们的域名都配置到nginx.conf, 那么这个文件就会比较乱,
    # 也影响管理和阅读, 所以直接拆分出来, 分成不同的配置文件. 
    include /etc/nginx/conf.d/*.conf;
    
    # 加载一个外部的配置文件, sites-enabled文件夹下只有一个default文件, 
    # 这个外部的配置文件就是负责我们Nginx的默认代理, 也就是server块的配置. 
    include /etc/nginx/sites-enabled/*;

    ##
    # 缓存设置
    ##

    # 缓存文件路径
    # levels=1:2 设置目录深度, 第一层目录是1个字符, 第2层是2个字符. 
    # keys_zone 设置web缓存名称和内存缓存空间大小. 
    # inactive 自动清除缓存文件时间. 
    # max_size 硬盘空间最大可使用值, 如果缓存空间满, 默认覆盖掉缓存时间最长的资源.  
    proxy_cache_path /data/proxy/cache levels=1:2 keys_zone=cache_one:500m inactive=7d max_size=10g;
    
    # 指定临时缓存文件的存储路径(路径需和上面路径在同一分区)
    proxy_temp_path /data/proxy/temp;
}
代码语言:javascript
复制
# 配置邮件服务器
#mail {
#    # See sample authentication script at:
#    # http://wiki.nginx.org/ImapAuthenticateWithApachePhpScript
# 
#    # 指定Nginx提供邮件服务时, 用于HTTP认证的服务地址
#    # auth_http localhost/auth.php;
#    # 指定现有客户端上的POP3协议的扩展
#    # pop3_capabilities "TOP" "USER";
#    # 指定现有客户端上的IMAP协议的扩展
#    # imap_capabilities "IMAP4rev1" "UIDPLUS";
# 
#    server {
#        # 指定邮件服务器监听的IP地址和端口. 
#        listen     localhost:110;
#       # 指定虚拟机支持的加密协议. 
#        protocol   pop3;
#        # 是否开启邮件代理
#        proxy      on;
#    }
# 
#    server {
#        # 指定邮件服务器监听的IP地址和端口. 
#        listen     localhost:143;
#        # 指定虚拟机支持的加密协议. 
#        protocol   imap;
#        # 是否开启邮件代理
#        proxy      on;
#    }
#}

2. Nginx中/etc/nginx/sites-enabled/default的常用配置及说明

代码语言:javascript
复制
server {
    # Nginx监听的IP及端口号, 可以监听多个
    listen 127.0.0.1:80;
    # Nginx监听的IPv6的IP及端口号
    listen [::]:80;

    # SSL协议配置
    # listen 443 ssl default_server;
    # listen [::]:443 ssl default_server;
    # 加载配置片段
    # include snippets/snakeoil.conf;

    # 指定哪个目录作为根目录, 用于文件的检索
    root /var/www/html;

    # 在上面指定的根目录下, 找到如下页面, 作为Nginx的默认主页
    index index.html index.htm index.nginx-debian.html;

    # 配置server的多域名, 域名可以通过以下方式: 
    # 1. 完整的域名, 如: www.example.com
    # 2. 带*号开头的域名, 如: *.example.com
    # 3. 带*号末尾的域名, 如: mail.*
    # 4. 可匹配的正则表达式
    server_name www.paulandcode.com;

    location / {
        # 原请求不存在时, 重定向到指定的URI, 并返回结果(此处设定为404)
        try_files $uri $uri/ =404;
    }

    # 静态文件的处理
    location ~ ^/(images|javascript|js|css|flash|media|static)/ {
        # 设置被代理服务器的地址, 包含传输协议, 主机名称或IP地址加端口号, URI等要素. 
        proxy_pass http://www.paulandcode.com:8080;
        
        # 自定义http header头, 用于发送给后端真实服务器. 
         proxy_set_header Host $host:$server_port;
         
         # 指定哪个目录作为根目录, 用于文件的检索
         root /home/django/projects/blogs;
        
        # 启用Gzip压缩
        gzip on;
         # 对js、css、jpg、png、gif格式的文件启用gzip压缩功能
         gzip_types application/javascript text/css image/jpeg image/png image/gif;
         # 所压缩文件的最小值,小于这个的不会压缩
         gzip_min_length 1024;

         # 使用名为cache_one的对应缓存配置. 
         proxy_cache cache_one;
         # 对httpcode为200, 206, 301, 302, 304的缓存10天. 
         proxy_cache_valid 200 206 301 302 304 10d;
         # 定义缓存唯一key, 通过唯一key来进行hash存取. 
         proxy_cache_key $uri
        # 过期30天, 静态文件不怎么更新, 过期可以设大一点, 如果频繁更新, 则可以设置得小一点. 
         expires 30d;
    }
}

3. Redis配置文件redis.conf

代码语言:javascript
复制
# Redis配置文件样例

# Note on units: when memory size is needed, it is possible to specifiy
# it in the usual form of 1k 5GB 4M and so forth:
#
# 1k => 1000 bytes
# 1kb => 1024 bytes
# 1m => 1000000 bytes
# 1mb => 1024*1024 bytes
# 1g => 1000000000 bytes
# 1gb => 1024*1024*1024 bytes
#
# units are case insensitive so 1GB 1Gb 1gB are all the same.

# Redis默认不是以守护进程的方式运行,可以通过该配置项修改,使用yes启用守护进程
# 启用守护进程后,Redis会把pid写到一个pidfile中,在/var/run/redis.pid
daemonize no

# 当Redis以守护进程方式运行时,Redis默认会把pid写入/var/run/redis.pid文件,可以通过pidfile指定
pidfile /var/run/redis.pid

# 指定Redis监听端口,默认端口为6379
# 如果指定0端口,表示Redis不监听TCP连接
port 6379

# 绑定的主机地址
# 你可以绑定单一接口,如果没有绑定,所有接口都会监听到来的连接
# bind 127.0.0.1

# Specify the path for the unix socket that will be used to listen for
# incoming connections. There is no default, so Redis will not listen
# on a unix socket when not specified.
#
# unixsocket /tmp/redis.sock
# unixsocketperm 755

# 当客户端闲置多长时间后关闭连接,如果指定为0,表示关闭该功能
timeout 0

# 指定日志记录级别,Redis总共支持四个级别:debug、verbose、notice、warning,默认为verbose
# debug (很多信息, 对开发/测试比较有用)
# verbose (many rarely useful info, but not a mess like the debug level)
# notice (moderately verbose, what you want in production probably)
# warning (only very important / critical messages are logged)
loglevel verbose

# 日志记录方式,默认为标准输出,如果配置为redis为守护进程方式运行,而这里又配置为标准输出,则日志将会发送给/dev/null
logfile stdout

# To enable logging to the system logger, just set 'syslog-enabled' to yes,
# and optionally update the other syslog parameters to suit your needs.
# syslog-enabled no

# Specify the syslog identity.
# syslog-ident redis

# Specify the syslog facility.  Must be USER or between LOCAL0-LOCAL7.
# syslog-facility local0

# 设置数据库的数量,默认数据库为0,可以使用select <dbid>命令在连接上指定数据库id
# dbid是从0到‘databases’-1的数目
databases 16

################################ SNAPSHOTTING  #################################
# 指定在多长时间内,有多少次更新操作,就将数据同步到数据文件,可以多个条件配合

4. MySQL中my.cnf的配置

代码语言:javascript
复制
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
port = 3306
socket = /tmp/mysql.sock
basedir = /usr/local/mysql
datadir = /data/mysql
pid-file = /data/mysql/mysql.pid
user = mysql
bind-address = 0.0.0.0
server-id = 1 #表示是本机的序号为1,一般来讲就是master的意思
skip-name-resolve
# 禁止MySQL对外部连接进行DNS解析,使用这一选项可以消除MySQL进行DNS解析的时间。但需要注意,如果开启该选项,
# 则所有远程主机连接授权都要使用IP地址方式,否则MySQL将无法正常处理连接请求
#skip-networking
back_log = 600
# MySQL能有的连接数量。当主要MySQL线程在一个很短时间内得到非常多的连接请求,这就起作用,
# 然后主线程花些时间(尽管很短)检查连接并且启动一个新线程。back_log值指出在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。
# 如果期望在一个短时间内有很多连接,你需要增加它。也就是说,如果MySQL的连接数据达到max_connections时,新来的请求将会被存在堆栈中,
# 以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
# 另外,这值(back_log)限于您的操作系统对到来的TCP/IP连接的侦听队列的大小。
# 你的操作系统在这个队列大小上有它自己的限制(可以检查你的OS文档找出这个变量的最大值),试图设定back_log高于你的操作系统的限制将是无效的。
max_connections = 1000
# MySQL的最大连接数,如果服务器的并发连接请求量比较大,建议调高此值,以增加并行连接数量,当然这建立在机器能支撑的情况下,因为如果连接数越多,介于MySQL会为每个连接提供连接缓冲区,就会开销越多的内存,所以要适当调整该值,不能盲目提高设值。可以过'conn%'通配符查看当前状态的连接数量,以定夺该值的大小。
max_connect_errors = 6000
# 对于同一主机,如果有超出该参数值个数的中断错误连接,则该主机将被禁止连接。如需对该主机进行解禁,执行:FLUSH HOST。
open_files_limit = 65535
# MySQL打开的文件描述符限制,默认最小1024;当open_files_limit没有被配置的时候,比较max_connections*5和ulimit -n的值,哪个大用哪个,
# 当open_file_limit被配置的时候,比较open_files_limit和max_connections*5的值,哪个大用哪个。
table_open_cache = 128
# MySQL每打开一个表,都会读入一些数据到table_open_cache缓存中,当MySQL在这个缓存中找不到相应信息时,才会去磁盘上读取。默认值64
# 假定系统有200个并发连接,则需将此参数设置为200*N(N为每个连接所需的文件描述符数目);
# 当把table_open_cache设置为很大时,如果系统处理不了那么多文件描述符,那么就会出现客户端失效,连接不上
max_allowed_packet = 4M
# 接受的数据包大小;增加该变量的值十分安全,这是因为仅当需要时才会分配额外内存。例如,仅当你发出长查询或MySQLd必须返回大的结果行时MySQLd才会分配更多内存。
# 该变量之所以取较小默认值是一种预防措施,以捕获客户端和服务器之间的错误信息包,并确保不会因偶然使用大的信息包而导致内存溢出。
binlog_cache_size = 1M
# 一个事务,在没有提交的时候,产生的日志,记录到Cache中;等到事务提交需要提交的时候,则把日志持久化到磁盘。默认binlog_cache_size大小32K
max_heap_table_size = 8M
# 定义了用户可以创建的内存表(memory table)的大小。这个值用来计算内存表的最大行数值。这个变量支持动态改变
tmp_table_size = 16M
# MySQL的heap(堆积)表缓冲大小。所有联合在一个DML指令内完成,并且大多数联合甚至可以不用临时表即可以完成。
# 大多数临时表是基于内存的(HEAP)表。具有大的记录长度的临时表 (所有列的长度的和)或包含BLOB列的表存储在硬盘上。
# 如果某个内部heap(堆积)表大小超过tmp_table_size,MySQL可以根据需要自动将内存中的heap表改为基于硬盘的MyISAM表。还可以通过设置tmp_table_size选项来增加临时表的大小。也就是说,如果调高该值,MySQL同时将增加heap表的大小,可达到提高联接查询速度的效果
read_buffer_size = 2M
# MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。
# 如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能
read_rnd_buffer_size = 8M
# MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,
# MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大
sort_buffer_size = 8M
# MySQL执行排序使用的缓冲大小。如果想要增加ORDER BY的速度,首先看是否可以让MySQL使用索引而不是额外的排序阶段。
# 如果不能,可以尝试增加sort_buffer_size变量的大小
join_buffer_size = 8M
# 联合查询操作所能使用的缓冲区大小,和sort_buffer_size一样,该参数对应的分配内存也是每连接独享
thread_cache_size = 8
# 这个值(默认8)表示可以重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,
# 如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,
# 增加这个值可以改善系统性能.通过比较Connections和Threads_created状态的变量,可以看到这个变量的作用。(–>表示要调整的值)
# 根据物理内存设置规则如下:
# 1G  —> 8
# 2G  —> 16
# 3G  —> 32
# 大于3G  —> 64
query_cache_size = 8M
#MySQL的查询缓冲大小(从4.0.1开始,MySQL提供了查询缓冲机制)使用查询缓冲,MySQL将SELECT语句和查询结果存放在缓冲区中,
# 今后对于同样的SELECT语句(区分大小写),将直接从缓冲区中读取结果。根据MySQL用户手册,使用查询缓冲最多可以达到238%的效率。
# 通过检查状态值'Qcache_%',可以知道query_cache_size设置是否合理:如果Qcache_lowmem_prunes的值非常大,则表明经常出现缓冲不够的情况,
# 如果Qcache_hits的值也非常大,则表明查询缓冲使用非常频繁,此时需要增加缓冲大小;如果Qcache_hits的值不大,则表明你的查询重复率很低,
# 这种情况下使用查询缓冲反而会影响效率,那么可以考虑不用查询缓冲。此外,在SELECT语句中加入SQL_NO_CACHE可以明确表示不使用查询缓冲
query_cache_limit = 2M
#指定单个查询能够使用的缓冲区大小,默认1M
key_buffer_size = 4M
#指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,
# 系统将开始换页并且真的变慢了。对于内存在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%'获得)。注意:该参数值设置的过大反而会是服务器整体效率降低
ft_min_word_len = 4
# 分词词汇最小长度,默认4
transaction_isolation = REPEATABLE-READ
# MySQL支持4种事务隔离级别,他们分别是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如没有指定,MySQL默认采用的是REPEATABLE-READ,ORACLE默认的是READ-COMMITTED
log_bin = mysql-bin
binlog_format = mixed
expire_logs_days = 30 #超过30天的binlog删除
log_error = /data/mysql/mysql-error.log #错误日志路径
slow_query_log = 1
long_query_time = 1 #慢查询时间 超过1秒则为慢查询
slow_query_log_file = /data/mysql/mysql-slow.log
performance_schema = 0
explicit_defaults_for_timestamp
#lower_case_table_names = 1 #不区分大小写
skip-external-locking #MySQL选项以避免外部锁定。该选项默认开启
default-storage-engine = InnoDB #默认存储引擎
innodb_file_per_table = 1
# InnoDB为独立表空间模式,每个数据库的每个表都会生成一个数据空间
# 独立表空间优点:
# 1.每个表都有自已独立的表空间。
# 2.每个表的数据和索引都会存在自已的表空间中。
# 3.可以实现单表在不同的数据库中移动。
# 4.空间可以回收(除drop table操作处,表空不能自已回收)
# 缺点:
# 单表增加过大,如超过100G
# 结论:
# 共享表空间在Insert操作上少有优势。其它都没独立表空间表现好。当启用独立表空间时,请合理调整:innodb_open_files
innodb_open_files = 500
# 限制Innodb能打开的表的数据,如果库里的表特别多的情况,请增加这个。这个值默认是300
innodb_buffer_pool_size = 64M
# InnoDB使用一个缓冲池来保存索引和原始数据, 不像MyISAM.
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,
# 所以不要设置的太高.
innodb_write_io_threads = 4
innodb_read_io_threads = 4
# innodb使用后台线程处理数据页上的读写 I/O(输入输出)请求,根据你的 CPU 核数来更改,默认是4
# 注:这两个参数不支持动态改变,需要把该参数加入到my.cnf里,修改完后重启MySQL服务,允许值的范围从 1-64
innodb_thread_concurrency = 0
# 默认设置为 0,表示不限制并发数,这里推荐设置为0,更好去发挥CPU多核处理能力,提高并发量
innodb_purge_threads = 1
# InnoDB中的清除操作是一类定期回收无用数据的操作。在之前的几个版本中,清除操作是主线程的一部分,这意味着运行时它可能会堵塞其它的数据库操作。
# 从MySQL5.5.X版本开始,该操作运行于独立的线程中,并支持更多的并发数。用户可通过设置innodb_purge_threads配置参数来选择清除操作是否使用单
# 独线程,默认情况下参数设置为0(不使用单独线程),设置为 1 时表示使用单独的清除线程。建议为1
innodb_flush_log_at_trx_commit = 2
# 0:如果innodb_flush_log_at_trx_commit的值为0,log buffer每秒就会被刷写日志文件到磁盘,提交事务的时候不做任何操作(执行是由mysql的master thread线程来执行的。
# 主线程中每秒会将重做日志缓冲写入磁盘的重做日志文件(REDO LOG)中。不论事务是否已经提交)默认的日志文件是ib_logfile0,ib_logfile1
# 1:当设为默认值1的时候,每次提交事务的时候,都会将log buffer刷写到日志。
# 2:如果设为2,每次提交事务都会写日志,但并不会执行刷的操作。每秒定时会刷到日志文件。要注意的是,并不能保证100%每秒一定都会刷到磁盘,这要取决于进程的调度。
# 每次事务提交的时候将数据写入事务日志,而这里的写入仅是调用了文件系统的写入操作,而文件系统是有 缓存的,所以这个写入并不能保证数据已经写入到物理磁盘
# 默认值1是为了保证完整的ACID。当然,你可以将这个配置项设为1以外的值来换取更高的性能,但是在系统崩溃的时候,你将会丢失1秒的数据。
# 设为0的话,mysqld进程崩溃的时候,就会丢失最后1秒的事务。设为2,只有在操作系统崩溃或者断电的时候才会丢失最后1秒的数据。InnoDB在做恢复的时候会忽略这个值。
# 总结
# 设为1当然是最安全的,但性能页是最差的(相对其他两个参数而言,但不是不能接受)。如果对数据一致性和完整性要求不高,完全可以设为2,如果只最求性能,例如高并发写的日志服务器,设为0来获得更高性能
innodb_log_buffer_size = 2M
# 此参数确定些日志文件所用的内存大小,以M为单位。缓冲区更大能提高性能,但意外的故障将会丢失数据。MySQL开发人员建议设置为1-8M之间
innodb_log_file_size = 32M
# 此参数确定数据日志文件的大小,更大的设置可以提高性能,但也会增加恢复故障数据库所需的时间
innodb_log_files_in_group = 3
# 为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
innodb_max_dirty_pages_pct = 90
# innodb主线程刷新缓存池中的数据,使脏数据比例小于90%
innodb_lock_wait_timeout = 120 
# InnoDB事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB在它自己的锁定表中自动检测事务死锁并且回滚事务。InnoDB用LOCK TABLES语句注意到锁定设置。默认值是50秒
bulk_insert_buffer_size = 8M
# 批量插入缓存大小, 这个参数是针对MyISAM存储引擎来说的。适用于在一次性插入100-1000+条记录时, 提高效率。默认值是8M。可以针对数据量的大小,翻倍增加。
myisam_sort_buffer_size = 8M
# MyISAM设置恢复表之时使用的缓冲区的尺寸,当在REPAIR TABLE或用CREATE INDEX创建索引或ALTER TABLE过程中排序 MyISAM索引分配的缓冲区
myisam_max_sort_file_size = 10G
# 如果临时文件会变得超过索引,不要使用快速排序索引方法来创建一个索引。注释:这个参数以字节的形式给出
myisam_repair_threads = 1
# 如果该值大于1,在Repair by sorting过程中并行创建MyISAM表索引(每个索引在自己的线程内) 
interactive_timeout = 28800
# 服务器关闭交互式连接前等待活动的秒数。交互式客户端定义为在mysql_real_connect()中使用CLIENT_INTERACTIVE选项的客户端。默认值:28800秒(8小时)
wait_timeout = 28800
# 服务器关闭非交互连接之前等待活动的秒数。在线程启动时,根据全局wait_timeout值或全局interactive_timeout值初始化会话wait_timeout值,
# 取决于客户端类型(由mysql_real_connect()的连接选项CLIENT_INTERACTIVE定义)。参数默认值:28800秒(8小时)
# MySQL服务器所支持的最大连接数是有上限的,因为每个连接的建立都会消耗内存,因此我们希望客户端在连接到MySQL Server处理完相应的操作后,
# 应该断开连接并释放占用的内存。如果你的MySQL Server有大量的闲置连接,他们不仅会白白消耗内存,而且如果连接一直在累加而不断开,
# 最终肯定会达到MySQL Server的连接上限数,这会报'too many connections'的错误。对于wait_timeout的值设定,应该根据系统的运行情况来判断。
# 在系统运行一段时间后,可以通过show processlist命令查看当前系统的连接状态,如果发现有大量的sleep状态的连接进程,则说明该参数设置的过大,
# 可以进行适当的调整小些。要同时设置interactive_timeout和wait_timeout才会生效。
[mysqldump]
quick
max_allowed_packet = 16M #服务器发送和接受的最大包长度
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-08-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 PHPer技术栈 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. Nginx中/etc/nginx/nginx.conf的常用配置及说明
  • 2. Nginx中/etc/nginx/sites-enabled/default的常用配置及说明
  • 3. Redis配置文件redis.conf
  • 4. MySQL中my.cnf的配置
相关产品与服务
云数据库 Redis
腾讯云数据库 Redis(TencentDB for Redis)是腾讯云打造的兼容 Redis 协议的缓存和存储服务。丰富的数据结构能帮助您完成不同类型的业务场景开发。支持主从热备,提供自动容灾切换、数据备份、故障迁移、实例监控、在线扩容、数据回档等全套的数据库服务。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档