概述最近对mysql在各个系统的一些参数进行了优化,同时也开启了慢查询,为后面针对具体sql做进一步的优化做准备。下面主要介绍一些优化的参数。1、之前优化mysql的配置,可以看到基本没有优化。2.优化配置下面是一些优化的参数。3.优化参数说明:#基础配置datadir=/data/datafilesocket=/var/lib/mysql/mysql.socklog-error=/data/log/mysqld.logpid-file=/var/run/mysqld/mysqld.pidcharacter_set_server=utf8#允许任意IP访问bind-address=0.0.0.0#支持符号链接,即数据库或表可以存放在my.cnf中指定datadir以外的分区或目录中,如果为0,不启用#symbolic-links=0#支持caselower_case_table_names=1#二进制配置server-id=1log-bin=/data/log/mysql-bin.loglog-bin-index=/data/log/binlog。indexlog_bin_trust_function_creators=1expire_logs_days=7#sql_mode定义了mysql应该支持的sql语法、数据校验等。#mysql5.0及以上版本支持三种sql_mode模式:ANSI、TRADITIONAL和STRICT_TRANS_TABLES。#ANSI模式:松散模式,检查插入的数据,如果不符合定义的类型或长度,则调整或截断数据类型保存,并报warning警告。#TRADITIONAL模式:严格模式,向mysql数据库插入数据时,严格检查数据,保证不能插入错误的数据,报error错误。用于事物时,事物会回滚。#STRICT_TRANS_TABLES模式:严格模式,严格校验数据,错误数据不能插入,报error错误。sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION#InnoDB存放数据字典和内部数据结构的缓冲池,16MB足够大。innodb_additional_mem_pool_size=16M#InnoDB用于缓存数据、索引、锁、insertbuffer、数据字典等。#如果是专用的DB服务器,并且InnoDB引擎是主要场景,通常60%的物理内存即可set#如果是非专用DB服务器,可以尝试设置为内存的1/4innodb_buffer_pool_size=4G#InnoDB的logbuffer,一般设置为64MB就够了innodb_log_buffer_size=64M#InnoDBredologsize,一般设置为256MB够2就够innodb_log_files_in_group=2#共享表空间:某个数据库的所有表数据和索引文件都放在一个文件中。默认情况下,此共享表空间的文件路径在数据目录中。默认文件名为:ibdata1,初始化为10M。#独享表空间:每张表都会生成一个独立的文件进行存储。每个表都有一个.frm表描述文件和一个.ibd文件。其中,这个文件包含了单个表的数据内容和索引内容。默认情况下,它的存储位置也在表的位置。#设置参数为1开启InnoDB的独立表空间模式,便于管理4Ginnodb_temp_data_file_path=ibtmp1:500M:autoextend:max:4096M#开启InnoDB的statusfile,方便管理员查看和监控秒丢失所有交易数据。#设置为1时,该模式最安全,但也是最慢的。在mysqld服务崩溃或服务器主机崩溃的情况下,binarylog最多只会丢失一条语句或一个事务。#当设置为2时,该模式比0更快更安全。只有当操作系统崩溃或系统断电时,最后一秒的所有交易数据才有可能丢失。innodb_flush_log_at_trx_commit=1#设置事务隔离级别为READ-COMMITED,提高事务效率,通常满足事务一致性要求#transaction_isolation=READ-COMMITTED#max_connections:对于所有账户,所有客户端连接MYSQL的最大并行连接数平行编号服务。简单的说,就是指MYSQL服务可以同时接受的最大并行连接数。#max_user_connections:一个账户的所有客户端与MYSQL服务的最大并行连接数。简单的说就是同一个账号最多可以同时连接mysql服务的连接数。设置为0表示无限制。#max_connect_errors:某IP主机连接中断与mysql服务连接的次数。如果这个值超过了这个值,IP主机就会阻塞从IP主机发出的连接请求。在这种情况下,您需要执行flushhosts。#执行flushhost或mysqladminflush-hosts,目的是清除hostcache中的信息。可以适当增加,防止前端主机频繁连接错误后被mysql拒绝。它不是指当前的连接情况,而是一个比较值。如果在过去某个时刻,MYSQL服务有1000个请求同时连接,之后就没有这么大的并发请求了,那么Max_used_connections=1000。请注意显示变量中与max_user_connections的区别。#Max_used_connections/max_connections*100%≈85%max_connections=600max_connect_errors=1000max_user_connections=400#设置临时表的最大值,会为每个连接分配。它不应该设置得太大。每个连接都会分配一些排序、连接等缓冲区,一般设置2MB就够了Engine-basedDB,MyISAM引擎专用的key_buffer_size可以设置小一些,8MB就够了#如果MyISAM引擎是主引擎,可以设置大一些,但不能超过4Gkey_buffer_size=8M#设置连接超时阈值,如果前端程序使用短连接的话,建议将这两个值缩短。如果前端程序使用长连接,可以直接注释掉这两个选项,即默认配置(8小时)#interactive_timeout=120#wait_timeout=120#InnoDB使用后台线程处理数据的读取次数和页面写I/0请求,允许取值范围为1-64#假设CPU为2个4核,数据库读操作多于写操作,可以设置#innodb_read_io_threads=5#innodb_write_io_threads=3#通过showengineinnodbstatus的FILEI/O选项可以查看线程分配#设置慢查询阈值,单位是秒long_query_time=120slow_query_log=1#打开mysqlslowsql的loglog_output=table,File#日志输出会写入到表和日志文件,为了方便程序统计,最好写表slow_query_log_file=/data/log/slow.log##启用log_queries_not_using_indexes后,记录slowsql的频率,每分钟记录条数#log_throttle_queries_not_using_indexes=5##作为从库时生效,从库复制时任何慢sql都会被记录#log_slow_slave_statements=1##检查不使用索引的sql#log_queries_not_using_indexes=1#快速预热缓冲池innodb_buffer_pool_dump_at_shutdown=1innodb_buffer_pool_load_at_startup=1#打印死锁日志innodb_print_all_deadlocks=1
