zoukankan      html  css  js  c++  java
  • 7.Mysql之my.cnf配置参数(唯一)

    1.前言

      在本节没有出来以前,我看过很多的关于Mysql的配置文件参数,网上也有很多模板,这里我想将之前看到的一些有用的配置参数(可以用到生产环境)的给重新整理一份分享出来,如有错误或者不足还请后来的读者可以指出。

    2.my.cnf配置参数

      

        
    #[client]
      待补充。。。该选项组一般是客户端程序读取的配置块。可以不写
    [mysql]
    prompt="u@mysqldb R:m:s [d]> "        ##这个是mysql的命令提示符,该参数有时候可能在单实例的配置中可能不会生效,有时候我们可以将它放到全局配置文件/etc/my.cnf中
    no-auto-rehash                             ##这个是不启用自动补全功能
    [mysqld]
    ########basic settings########
    user = mysql server
    -id = 11 port = xx bind_address = xx.xx.xx.xx #根据实际情况修改 character_set_server=utf8mb4 skip_name_resolve = 1 max_connections = 800 max_connect_errors = 1000 datadir = /data/mysql_data #根据实际情况修改,建议和程序分离存放 #transaction_isolation = READ-COMMITTED ##5.7和8.0默认隔离级别 explicit_defaults_for_timestamp = 1 #join_buffer_size = 134217728 #tmp_table_size = 67108864 tmpdir = /tmp sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER" interactive_timeout = 1800 wait_timeout = 1800 #read_buffer_size = 16777216 #read_rnd_buffer_size = 33554432 #sort_buffer_size = 33554432 ########log settings######## log_error = xxxxxx       ##根据自己路径进行修改 slow_query_log = 1 slow_query_log_file = slow.log ##根据自己路径修改 log_queries_not_using_indexes = 1 log_slow_admin_statements = 1 log_slow_slave_statements = 1 log_throttle_queries_not_using_indexes = 10 long_query_time = 2 min_examined_row_limit = 100
    expire_logs_days = 90   ##binlog二进制保存有效期。


    ########
    replication settings######## master_info_repository = TABLE relay_log_info_repository = TABLE log_bin = bin.log ##根据自己的路径进行修改 sync_binlog = 1      ##双一之一 gtid_mode = on enforce_gtid_consistency = 1 log_slave_updates ##该参数是开启slave的binlog日志功能(常用与高可用架构中) binlog_format = row relay_log = relay.log relay_log_recovery = 1 binlog_gtid_simple_recovery = 1 slave_skip_errors = ddl_exist_errors

    #####并行复制(主要指从库上的SQL线程进行并行回放)##########
    slave_parallel_type=LOGICAL_CLOCK ##该参数要求主备两库上面都需要进行配置,而下面两个参数只需要在从库上配置即可
    slave_perserve_commit_order=1
    slave_parallel_workers=N ##开启N个worker线程进行并行回放
    ########innodb settings######## innodb_page_size
    = 8192 ##数据页的大小 innodb_buffer_pool_size = 6G #根据实际情况修改,很重要,一般会配置为物理机内存的70% innodb_buffer_pool_instances = 8 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_lru_scan_depth = 2000 innodb_lock_wait_timeout = 5 innodb_io_capacity = 4000 ##这里是磁盘iops的能力,一般不会限制它的一下,填写磁盘的最大的iops即可 innodb_io_capacity_max = 8000 ##这可以个人可以填写磁盘顺序读的io(带宽能力) innodb_flush_method = O_DIRECT innodb_file_format = Barracuda innodb_file_format_max = Barracuda
    innodb_log_files_in_group = 4  ##这个是配置redo log日志的个数 innodb_log_group_home_dir
    = /redolog/ #根据实际情况修改 innodb_undo_directory = /undolog/ #根据实际情况修改 innodb_undo_logs = 128 innodb_undo_tablespaces = 3 innodb_flush_neighbors = 0  ##指定是否冲洗从一个页面InnoDB 缓冲池也可以清空其他脏页在相同的程度。设置为0将禁用 innodb_flush_neighbors。处于相同程度的脏页不会被刷新
    innodb_log_file_size = 4G #根据实际情况修改,生产环境一般都会配置4G innodb_log_buffer_size = 16777216
    innodb_data_file_path = ibdata1:1G:autoextend  ###按我理解是当系统表空间(ibdata1)达到阈值时,它会按照1G的容量进行自动扩容
    innodb_open_files = 65535
    innodb_max_dirty_pages_pct = 50  ##这个是脏页的刷新占比,默认是75%
    innodb_write_io_threads = 8
    innodb_read_io_threads = 8
    innodb_purge_threads = 4
    innodb_page_cleaners = 4
    innodb_large_prefix = 1
    innodb_thread_concurrency = 64         ##并发数,一般填写服务器逻辑CPU的个数
    #innodb_print_all_deadlocks = 1
    #innodb_strict_mode = 1
    innodb_sort_buffer_size = 67108864 
    innodb_file_per_table = 1 ##开启独立表空间
    innodb_online_alter_log_max_size = 4G ##这个是在线ddl存储的最大日志量(也就就是ddl中的row log日志)

    #innodb_status_output = 0    ## 这个是是否开启innodb锁的信息
    #innodb_status_output_locks = 0   ##这个是是否打开锁信息输出功能
    
    ########semi sync replication settings########
    
    plugin_dir=/usr/local/mysql/lib/plugin      #根据实际情况修改,这里要说明一下关于增强半同步复制需要安装插件
    plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    loose_rpl_semi_sync_master_enabled = 1
    loose_rpl_semi_sync_slave_enabled = 1
    loose_rpl_semi_sync_master_timeout = 5000
    #[mysqld-5.7] innodb_buffer_pool_dump_pct = 40 #innodb_page_cleaners = 4 #innodb_undo_log_truncate = 1 #innodb_max_undo_log_size = 2G #innodb_purge_rseg_truncate_frequency = 128 #binlog_gtid_simple_recovery=1 #log_timestamps=system #transaction_write_set_extraction=MURMUR32 #show_compatibility_56=on

    [mysqldump]
     quick
     max_allowed_packet = 32M  ##mysql根据配置文件会限制server接受的数据包的大小
     

    参看知数堂的参考

      1 ##########服务器物理内存是64G,该实例有512个数据表,该实例最大并发连接数是512,binlog只保存7天##################
      2 ##以下默认值都是基于5,7.26版本
      3 ## my.cnf for MySQL 5.7/8.0
      4 ## autoor: yejr(yejinrong@zhishutang.com, http://imysql.com, QQ: 4700963)
      5 ##
      6 ## 叶金荣(yejr)
      7 ## 靠谱优质的在线培训品牌知数堂培训(http://zhishuedu.com)联合创始人
      8 ## 新浪微博: @叶金荣, 微信公众:老叶茶馆(imysql_wx)
      9 ## QQ群: 650149401
     10 ## 注意:个别建议可能需要根据实际情况作调整,请自行判断或联系我,本人不对这些建议结果负相应责任
     11 ## 本配置文件主要适用于MySQL 5.7/8.0版本
     12 #
     13 [client]
     14 port    = 3306
     15 socket    = /data/mysql/mysql.sock
     16 
     17 [mysql]
     18 prompt="u@mysqldb R:m:s [d]> "
     19 no-auto-rehash ##这个是不启用自动补全功能
     20 
     21 [mysqld]
     22 user    = mysql
     23 port    = 3306
     24 basedir    = /usr/local/mysql
     25 datadir    = /data/mysql
     26 socket    = /data/mysql/mysql.sock
     27 pid-file = mysqldb.pid
     28 character-set-server = utf8mb4  ##这个是设置mysql服务器中的字符集
     29 skip_name_resolve = 1 ##
     30 
     31 #若你的MySQL数据库主要运行在境外,请务必根据实际情况调整本参数
     32 log_timestamps=system       ##这个是设置mysql日志文件的时间和系统时间保持一致
     33 open_files_limit    = 65535  ###默认值是5000
     34 back_log = 1024       ##mysql能暂存的连接数量,默认是80
     35 max_connections = 512   ##mysql最大连接数,这里是自身mysql服务器并发请求量的情况而定。默认是151,如果该值过小,会报ERROR 1040 (HY000): Too many connections
     36 max_connect_errors = 1000000 ##默认是100,可以适当提高该值
     37 table_open_cache = 1024
     38 table_definition_cache = 1024
     39 table_open_cache_instances = 64
     40 thread_stack = 512K
     41 external-locking = FALSE
     42 max_allowed_packet = 32M
     43 sort_buffer_size = 4M ##默认256k,每个需要进行排序的线程分配该大小的一个缓冲区(针对order by/group by/distinct/union)
     44 join_buffer_size = 4M  ##默认是256k,这个用户表间关联缓存的大小,该参数对应的分配内存也是每个连接独享。一般我们会通过建索引的方式提高join关联的查询。
     45 thread_cache_size = 768 ##服务器线程缓存,默认是9个,该值可以重新利用保存在缓存中线程的数量,当断开连接时,那么客户端的线程将被放到缓存中响应下一个客户端而不是销毁(前提是缓存数未达上限),如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能.)
     46 interactive_timeout = 600   ##默认是8小时,表示关闭一个交互式连接要等待的秒数,这个一般针对的是应用程序,此值会设置的比较大一些
     47 wait_timeout = 600          ##默认是8小时,表示关闭一个非交互的连接之前要等待的秒数,该值一般会设置小一点。
     48 tmp_table_size = 32M        ##默认是16M
     49 max_heap_table_size = 32M
     50 slow_query_log = 1
     51 slow_query_log_file = /data/mysql/slow.log
     52 log-error = /data/mysql/error.log
     53 long_query_time = 0.1  该值是情况而定 ##设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s.所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.不要在这里使用”1″, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).
     54 log_queries_not_using_indexes =1  ##这个是记录没有走索引的sql语句
     55 log_throttle_queries_not_using_indexes = 60  ###设定每分钟记录到日志的未使用索引的语句数目,超过这个数目后只记录语句数量和花费的总时间
     56 min_examined_row_limit = 100  ###表示扫描的行数大于100行看,如果没有大于100行,即使这个语句执行时间超过了long_query_time的阈值也不会被记录。
     57 log_slow_admin_statements = 1  #记录执行缓慢的管理SQL,如alter table,analyze table, check table, create index, drop index, optimize table, repair table等
     58 log_slow_slave_statements = 1  ##记录从库上执行的慢查询语句
     59 server-id = 3306
     60 log-bin = /data/mysql/mybinlog
     61 sync_binlog = 1
     62 binlog_cache_size = 4M
     63 max_binlog_cache_size = 2G
     64 max_binlog_size = 1G  
     65 
     66 #注意:MySQL 8.0开始,binlog_expire_logs_seconds选项也存在的话,会忽略expire_logs_days选项
     67 expire_logs_days = 7
     68 
     69 master_info_repository = TABLE  ##这个不能保证io线程的高可用性
     70 relay_log_info_repository = TABLE  ##这个是保证sql线程的高可用性
     71 relay_log_recovery = 1  ###这个参数是保证IO线程的高可用性
     72 gtid_mode = on    ##gtid设置
     73 enforce_gtid_consistency = 1  ##gtid设置
     74 log_slave_updates  ##如果当前的库还有从库的话,这个参数也必须要打开
     75 slave-rows-search-algorithms = 'INDEX_SCAN,HASH_SCAN'
     76 binlog_format = row
     77 binlog_checksum = 1
     78 
     79 relay-log-purge = 1  ##这个默认是打开的,表示是否自动清空不再需要的中继日志。
     80 key_buffer_size = 32M ##表示索引(Myisam)缓冲区大小,它决定索引处理的速度,特别是读的速度。默认是8M  
     81 read_buffer_size = 8M ##mysql读入缓冲区大小,对表进行顺序扫描的请求将分配一个读入缓冲区,mysql会为它分配一段内存缓冲区。如果对表的扫描请求很频繁,可以调大该值。
     82 read_rnd_buffer_size = 4M ##MySql的随机读(查询操作)缓冲区大小
     83 bulk_insert_buffer_size = 64M
     84 myisam_sort_buffer_size = 128M
     85 myisam_max_sort_file_size = 10G
     86 myisam_repair_threads = 1
     87 lock_wait_timeout = 3600  ##此变量指定尝试获取元数据锁定的超时(以秒为单位)。允许的值范围是1到31536000(1年)。默认值为31536000
     88 explicit_defaults_for_timestamp = 1
     89 innodb_thread_concurrency = 0    ##此参数用来设置innodb线程的并发数量,默认值为0表示不限制
     90 #innodb_sync_spin_loops = 100
     91 #innodb_spin_wait_delay = 30
     92 
     93 transaction_isolation = REPEATABLE-READ
     94 #innodb_additional_mem_pool_size = 16M
     95 innodb_buffer_pool_size = 45875M  ##这个参数很重要,默认是128M
     96 innodb_buffer_pool_instances = 4
     97 innodb_buffer_pool_load_at_startup = 1  ###指定在MySQL服务器启动时,通过加载先前保存的相同页面来自动预热InnoDB 缓冲池
     98 innodb_buffer_pool_dump_at_shutdown = 1 ###指定在关闭MySQL服务器时是否记录InnoDB 缓冲池中缓存的页面 ,以缩短下次重启时的 预热过程。通常与结合使用 innodb_buffer_pool_load_at_startup。该 innodb_buffer_pool_dump_pct 选项定义要转储的最近使用的缓冲池页面的百分比
     99 innodb_data_file_path = ibdata1:1G:autoextend  ###按我理解是当系统表空间(ibdata1)达到阈值时,它会按照1G的容量进行自动扩容。
    100 innodb_flush_log_at_trx_commit = 1
    101 innodb_log_buffer_size = 32M     ##这个是设置日志缓冲区的大小,默认是16M
    102 innodb_log_file_size = 2G        ##这个主要是redo log 日志的大小,默认是48M
    103 innodb_log_files_in_group = 3    ##为提高性能,MySQL可以以循环方式将日志文件写到多个文件。推荐设置为3
    104 innodb_max_undo_log_size = 4G    ##这个表示每个undo日志的最大容量,默认是1G
    105 innodb_undo_directory = /data/mysql/undolog   ##这个是undo日志放置的位置
    106 innodb_undo_tablespaces = 95
    107 
    108 # 根据您的服务器IOPS能力适当调整
    109 # 一般配普通SSD盘的话,可以调整到 10000 - 20000
    110 # 配置高端PCIe SSD卡的话,则可以调整的更高,比如 50000 - 80000
    111 innodb_io_capacity = 4000 ###该innodb_io_capacity变量定义提供给整体的I / O容量 InnoDB。应该将其设置为大约系统每秒可以执行的I / O操作数(IOPS),默认是200
    112 innodb_io_capacity_max = 8000
    113 innodb_flush_sync = 0   ##默认是禁止
    114 innodb_flush_neighbors = 0  ##指定是否冲洗从一个页面InnoDB 缓冲池也可以清空其他脏页在相同的程度。设置为0将禁用 innodb_flush_neighbors。处于相同程度的脏页不会被刷新
    115 innodb_write_io_threads = 8
    116 innodb_read_io_threads = 8
    117 innodb_purge_threads = 4
    118 innodb_page_cleaners = 4
    119 innodb_open_files = 65535
    120 innodb_max_dirty_pages_pct = 50 ##这个是脏页的刷新占比,默认是75%
    121 innodb_flush_method = O_DIRECT ##这个表示数据页和redo log做持久化时用到的一个刷盘策略。
    122 innodb_lru_scan_depth = 4000   ##默认是1024,
    123 innodb_checksum_algorithm = crc32
    124 innodb_lock_wait_timeout = 10   ##InnoDB 事务在被回滚之前可以等待一个锁定的超时秒数。InnoDB 在它自己的 锁定表中自动检测事务死锁并且回滚事务。 InnoDB 用 LOCK TABLES 语句注意到锁定设置。默认值是 50125 innodb_rollback_on_timeout = 1  ##InnoDB 默认情况下,仅回滚事务超时上的最后一条语句。如果 --innodb-rollback-on-timeout指定,则事务超时导致 InnoDB中止并回滚整个事务。
    126 innodb_print_all_deadlocks = 1  #当启用该选项,所有信息死锁在 InnoDB用户交易被记录在 mysqld 错误日志
    127 innodb_file_per_table = 1       ##这里启用独立空间
    128 innodb_online_alter_log_max_size = 4G
    129 innodb_stats_on_metadata = 0  #禁用优化器统计信息或使用创建或更改单个表时,优化器统计信息不会保留在磁盘 上
    130 innodb_undo_log_truncate = 1
    131 
    132 #注意:MySQL 8.0.16开始删除该选项
    133 internal_tmp_disk_storage_engine = InnoDB
    134 
    135 # some var for MySQL 5.7
    136 innodb_checksums = 1
    137 #innodb_file_format = Barracuda
    138 #innodb_file_format_max = Barracuda
    139 query_cache_size = 0  ##关闭查询缓冲
    140 query_cache_type = 0
    141 innodb_undo_logs = 128
    142 
    143 innodb_status_file = 1
    144 #注意: 开启 innodb_status_output & innodb_status_output_locks 后, 可能会导致log-error文件增长较快
    145 innodb_status_output = 0
    146 innodb_status_output_locks = 1
    147 
    148 innodb_sort_buffer_size = 67108864
    149 innodb_autoinc_lock_mode = 1
    150 
    151 #performance_schema
    152 performance_schema = 1
    153 #performance_schema_instrument = '%memory%=on'
    154 #performance_schema_instrument = '%lock%=on'
    155 
    156 #innodb monitor
    157 innodb_monitor_enable="module_innodb"
    158 innodb_monitor_enable="module_server"
    159 innodb_monitor_enable="module_dml"
    160 innodb_monitor_enable="module_ddl"
    161 innodb_monitor_enable="module_trx"
    162 innodb_monitor_enable="module_os"
    163 innodb_monitor_enable="module_purge"
    164 innodb_monitor_enable="module_log"
    165 innodb_monitor_enable="module_lock"
    166 innodb_monitor_enable="module_buffer"
    167 innodb_monitor_enable="module_index"
    168 innodb_monitor_enable="module_ibuf_system"
    169 innodb_monitor_enable="module_buffer_page"
    170 innodb_monitor_enable="module_adaptive_hash"
    171 
    172 [mysqldump]
    173 quick
    174 max_allowed_packet = 32M  ##mysql根据配置文件会限制server接受的数据包的大小
    知数堂
  • 相关阅读:
    MySQL用户权限管理
    索引 聚集索引 唯一索引 普通索引 联合索引 覆盖索引
    sql注入
    pymysql
    MySQL 多表查询
    MySQL 聚合函数以及 优先级
    mysql 语句 字段 和结构主键外键的增删改
    协程
    事件 event
    进程池和线程池 concurrent.futures import ProcessPoolExecutor,ThreadPoolExecutor
  • 原文地址:https://www.cnblogs.com/zmc60/p/14888608.html
Copyright © 2011-2022 走看看