生产环境MySQL Server核心参数的配置(二)
:mysqld服务关闭前,先进行数据完全的清理和插入缓冲区的合并操作
若是脏数据较多或者服务器性能等因素,会导致此过程需要数分钟或者更长时间
1:正常关闭mysqld服务,针对innodb引擎不做任何其他的操作
2:若是mysqld出现崩溃,立即刷事务日志到磁盘上并且冷关闭mysqld服务
没有提交的事务将会丢失,但是再启动mysqld服务的时候会进行事务回滚恢复
innodb_force_recovery
参数含义:mysqld服务出现崩溃之后,InnoDB引擎进行回滚的模式,默认值为0,可设置的值0~6
0:正常的关闭和启动,不会做任何强迫恢复操作
1:跳过错误页,让mysqld服务继续运行。跳过错误索引记录和存储页,尝试用:
SELECT * INOT OUTFILE ‘../filename’ FROM tablename;方式,完成数据备份
2:阻止InnoDB的主线程运行。清理操作时出现mysqld服务崩溃,则会阻止数据恢复操作
3:恢复的时候,不进行事务回滚
4:阻止INSERT缓冲区的合并操作。不做合并操作,为防止出现mysqld服务崩溃。不计算表的统计信息
5:mysqld服务启动的时候不检查回滚日志:InnoDB引擎对待每个不确定的事务就像提交的事务一样
6:不做事务日志前滚恢复操作
推荐的参数组合配置:
innodb_fast_shutdown = 1
#若是机房条件较好可设置为0(双路电源、UPS、RAID卡电池和供电
系统稳定性)
innodb_force_recovery =0
#至于出问题的时候,设置为何值,要视出错的原因和程度,对数据后续做的操作
⑼ innodb_additional_mem_pool_size
● 推荐理由
参数含义:开辟一片内存用于缓存InnoDB引擎的数据字典信息和内部数据结构(比如:自适应HASH索引结构)
默认值:build-in版本默认值为:1M;Plugin-innodb版本默认值为:8M;
若是mysqld服务上的表对象数量较多,InnoDB引擎数据量很大,且innodb_buffer_pool_size的值设置较大
则应该适当地调整innodb_additional_mem_pool_size的值
若是出现缓存区的内存不足,则会直接向OS申请内存分配,并且会向MySQL的error log文件写入警告信息
⑽ innodb_buffer_pool_size
● 推荐理由
参数含义:开辟一片内存用于缓存InnoDB引擎表的数据和索引
参数最大值:受限于CPU的架构,支持32位还是支持64位,另外还受限于OS为32位还是64位
innodb_buffer_pool_size的值设置合适,会节约访问表对象中数据的物理IO
InnoDB占用的内存,除innodb_buffer_pool_size用于存储页面缓存数据外,另外正常情况下还有大约8%的开销
主要用在每个缓存页帧的描述、adaptive hash等数据结构,如果不是安全关闭,启动时还要恢复的话
还要另开大约12%的内存用于恢复,两者相加就有差不多21%的开销
所以、在分配innodb_buffer_pool_size时应该多加留意
对于一个专用的DB,理论上可以分到60%-80%的内存给DB. 分到60%-80%是不是就OK了,就不用管了.当然不是了
是不是合适,可以通过show engine innodb status\G; 查看命中情况. 当命中没达到97%以上,都可以考虑加内存
在保证系统不宕机,不发生内存溢出(OOM),不发生严重内存swap,给myisam、其他应用及系统预留一定份额前提下
给innodb分配的buffer越大越好,浪费就浪费点,早晚都能用上的,谁让内存越来越便宜了呢
⑾ innodb_flush_log_at_trx_commit AND sync_binlog
● 推荐理由
innodb_flush_log_at_trx_commit = N
N=0 – 每隔一秒,把事务日志缓存区的数据写到日志文件中,以及把日志文件的数据刷新到磁盘上
N=1 – 每个事务提交时候,把事务日志从缓存区写到日志文件中,并且刷新日志文件的数据到磁盘上
N=2 – 每事务提交的时候,把事务日志数据从缓存区写到日志文件中;每隔一秒,刷新一次日志文件
但不一定刷新到磁盘上,而是取决于操作系统的调度
sync_binlog = N
N>0 — 每向二进制日志文件写入N条SQL或N个事务后,则把二进制日志文件的数据刷新到磁盘上
N=0 — 不主动刷新二进制日志文件的数据到磁盘上,而是由操作系统决定
推荐配置组合:
N=1,1 — 适合数据安全性要求非常高,而且磁盘IO写能力足够支持业务,比如充值消费系统
N=1,0 — 适合数据安全性要求高,磁盘IO写能力支持业务不富余,允许备库落后或无复制
N=2,0或2,m(0
N=0,0 — 磁盘IO写能力有限,无复制或允许复制延迟稍微长点能接受,例如:日志性登记业务
⑿ innodb_file_per_table
● 推荐理由
参数含义:每个表一个表空间
如果设置了便可以明确知道innodb表究竟占多大空间了
表备份方便了,删除能回收空间
如果是共享表空间, 当你的表多,表空间会撑得很大; 当然随着表的删除,也会留下不少空隙
如果是独立表空间, 在做数据维护的时候也会特别清晰,比如alter table , 结束后会把临时产生的空间释放;
而如果是共享表空间,临时扩大的空间,是不会及时收缩的、可能会存在大量碎片
共享表空间在I