Mysql配置参数详解以及优化配置

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

mysql有以下几种日志:错误日志:log-err查询日志:log慢查询日志:log-slow-queries更新日志:log-update二进制日志:log-bin要把日志生成在/var/log目录下(是系统日志存放的地方,只有root账号有写权限),需要MySQL进程对这个目录有读写权限,一般是不这么做的,也考虑到安全问题,包括MySQL本身的数据安全,因为对MySQL的所有操作,都会记录到常规查询日志。MySQL的日志就不要用/var/log/目录下。---------------------------------------------------------------------2my.cnfdefault-character-set=utf8port=3306socket=/tmp/mysql.sockno-auto-rehash#default-character-set=utf8user=mysqlport=3306socket=/tmp/mysql.sockbasedir=/usr/local/webserver/mysqldatadir=/data0/mysql/3306/dataopen_files_limit=10240back_log=600max_connections=3000实际MySQL服务器允许的最大连接数16384;max_connect_errors=6000可以允许多少个错误连接table_cache=1024高速缓存的大小.table_cache的值在2G内存以下的机器中的值默认时256到512,如果机器有4G内存,则默认这个值是2048,但这决意味着机器内存越大,这个值应该越大,因为table_cache加大后,使得mysql对SQL响应的速度更快了,不可避免的会产生更多的死锁(deadlock),这样反而使得数据库整个一套操作慢了下来,严重影响性能。external-locking=FALSEmax_allowed_packet=32Msort_buffer_size=2M是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存.并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。join_buffer_size=2Mthread_cache_size=64重新利用保存在缓存中线程的数量,当断开连接时如果缓存中还有空间,那么客户端的线程将被放到缓存中,如果线程重新被请求,那么请求将从缓存中读取,如果缓存中是空的或者是新的请求,那么这个线程将被重新创建,如果有很多新的线程,增加这个值可以改善系统性能根据物理内存设置规则如下:1G---82G---163G---323G---64thread_concurrency=16对mysql的性能影响很大,在多个cpu(或多核)的情况下,错误设置了thread_concurrency的值,会导致mysql不能充分利用多cpu(或多核),出现同一时刻只能一个cpu(或核)在工作的情况。应设为CPU核数的2倍.比如有一个双核的CPU,那么thread_concurrency的应该为4;2个双核的cpu,thread_concurrency的值应为8.query_cache_size=32M缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空query_cache_limit=2M单个查询能够使用的缓冲区大小.缺省为1Mquery_cache_min_res_unit=2k它指定分配缓冲区空间的最小单位,缺省为4K。检查状态值Qcache_free_blocks,如果该值非常大,则表明缓冲区中碎片很多,这就表明查询结果都比较小,此时需要减小query_cache_min_res_unitdefault-storage-engine=MyISAMdefault_table_type=MyISAMthread_stack=192Ktransaction_isolation=READ-COMMITTED设置所有连接的默认事务隔离级tmp_table_size=256M临时HEAP数据表的最大长度max_heap_table_size=256MHEAP数据表(内存表)的最大长度(默认设置是16M);long_query_time=1log_long_formatlog-bin=/data0/mysql/3306/binlogbinlog_cache_size=8M为binarylog指定在查询请求处理过程中SQL查询语句使用的缓存大小binlog_format=MIXEDmax_binlog_cache_size=8Mmax_binlog_size=512Mexpire_logs_days=7key_buffer_size=256M索引缓冲区的大小,严格说是它决定了数据库索引处理的速度,尤其是索引读的速度read_buffer_size=1M读查询操作所能使用的缓冲区大小,该参数对应的分配内存也是每连接独享.read_rnd_buffer_size=16M针对按某种特定顺序(如ORDERBY子句)输出的查询结果(默认256K)加速排序操作后的读数据,提高读分类行的速度。bulk_insert_buffer_size=64M指定MyISAM类型数据表表使用特殊的树形结构的缓存myisam_sort_buffer_size=128Mmyisam引擎的sort_buffer_sizemyisam_max_sort_file_size=10G#myisam_max_extra_sort_file_size=10G这个参数已经不在MySQLmyisam_repair_threads=1myisam_recover自动检查和修复无法正确关闭MyISAM表skip-name-resolvemaster-connect-retry=10slave-skip-errors=1032,1062,126,1114,1146,1048,1396server-id=1设定为masterinnodb_additional_mem_pool_size=16MInnoDB用来存储数据字典和其他内部数据结构的内存池大小。应用程序里的表越多就应该分配越多的内存,如果innodb用光了这个内存就会向系统内存要。并且写入警告日志,根据MySQL手册,对于2G内存的机器,推荐值是20M。缺省值是1M。通常不用太大,只要够用就行,与表结构的复杂度有关系。innodb_status_fileInnoDB发送诊断输出到stderr或文件,而不是到stdout或者固定尺寸内存缓冲,以避免底层缓冲溢出。作为一个副效果,SHOWINNODBSTATUS的输出每15秒钟写到一个状态文件。这个文件的名字是innodb_status.pid,其中pid是服务器进程ID。这个文件在MySQL数据目录里创建。正常关机之时,InnoDB删除这个文件。如果发生不正常的关机,这些状态文件的实例可能被展示,而且必须被手动删除。在移除它们之前,你可能想要检查它们来看它们是否包含有关不正常关机的原因的有用信息。仅在配置选项innodb_status_file=1被设置之时,innodb_status.pid文件被创建。innodb_buffer_pool_size=2048M指定大小的内存来缓冲数据和索引。对于单独的MySQL数据库服务器,最大可以把该值设置成物理内存的80%。根据MySQL手册,对于2G内存的机器,推荐值是1G(50%)innodb_data_file_path=ibdata1:1024M:autoextendinnodb_file_io_threads=4IO操作(硬盘写操作)的最大线程个数(默认设置是4)。innodb_thread_concurrency=16InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。innodb_flush_log_at_trx_commit=2InnoDB记录日志的方式如果设置为1,则每个事务提交的时候,MySQL都会将事务日志写入磁盘。如果设置为0或者2,则大概每秒中将日志写入磁盘一次。实际测试发现,该值对插入数据的速度影响非常大设置为2时插入10000条记录只需要2秒,设置为0时只需要1秒,而设置为1时则需要229秒。建议尽量将插入操作合并成一个事务,这样可以大幅提高速度。在存在丢失最近部分事务的危险的前提下,可以把该值设为0。innodb_log_buffer_size=16M日志缓存的大小默认的设置在中等强度写入负载以及较短事务的情况下,一般可以满足服务器的性能要求。如果更新操作峰值或者负载较大就应该加大这个值。8-16M即可。innodb_log_file_size=128M日志组中每个日志文件的大小在高写入负载尤其是大数据集的情况下很重要。这个值越大性能就越高,但恢复时时间会加长。默认是5M。Javaeye推荐innodb_log_file_size=64Minnodb_log_files_in_group=3日志组中的日志文件数目,推荐使用3innodb_max_dirty_pages_pct=90最大脏页的百分数innodb_lock_wait_timeout=120事务获得资源超时设置,默认50sinnodb_file_per_table=0为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里quick不缓冲查询,直接导出至stdoutmax_allowed_packet=32M停用mysql的严格验证STRICT_TRANS_TABLES#把sql-mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION中STRICT_TRANS_TABLES,去掉,重启MySQL服务,问题解决……汗颜~~~经过此役,总结数据库设计中的一个注意点,也即避免此现象的两种方法:1、在表的设计过程中,对所有不能为空的字段设置默认值2、配置MySQL服务,如上所述将STRICT_TRANS_TABLES去掉#开启event#event_scheduler=on#myisam自动修复myisam-recover=BACKUP,FORCE#在中輸入log-bin=/var/lib/mysql/mysql-bin#expire_logs_days=10#max_binlog_size=100Mlog=/var/lib/mysql/mysql.loglog-error=/var/lib/mysql/error.log#log-update=/var/lib/mysql/update.log未能成功生成long_query_time=1log-slow-querieslog-queries-not-using-indexes是否启用了日志mysqlshowvariableslike'log_%';怎样知道当前的日志mysqlshowmasterstatus;顯示二進制日志數目mysqlshowmasterlogs;看二进制日志文件用mysqlbinlogshellmysqlbinlogmail-bin.000001或者shellmysqlbinlogmail-bin.000001|tail#详细说明log-bin=/var/lib/mysql/mysql-bin#二进制LOG,mysqlbinlog直接读取二进制日志文件。二进制日志包含所有更新数据的语句,其目的是在恢复数据库时用它来把数据尽可能恢复到最后的状态。另外,如果做同步复制(Replication)的话,也需要使用二进制日志传送修

1 / 9
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功