mysql 优化配置参数详解

在 my.cnf 文件中数据库

各设置参数的含义以下:安全

 

innodb_data_home_dir

这是InnoDB表的目录共用设置。若是没有在 my.cnf 进行设置,InnoDB 将使用MySQL的 datadir 目录为缺省目录。若是设定一个空字串,能够在 innodb_data_file_path 中设定绝对路径。服务器

innodb_data_file_path 单独指定数据文件的路径与大小。数据文件的完整路径由 innodb_data_home_dir 与这里所设定值的组合。 文件大小以 MB 单位指定。所以在文件大小指定后必有“M”。 InnoDB 也支持缩写“G”, 1G = 1024M。从 3.23.44 开始,在那些支持大文件的操做系统上能够设置数据文件大小大于 4 GB。而在另外一些操做系统上数据文件必须小于 2 GB。数据文件大小总和至少要达到 10 MB。在 MySQL-3.23 中这个参数必须在 my.cnf 中明确指定。在 MySQL-4.0.2 以及更新版本中则不需如此,系统会默认在 MySQL 的 datadir 目录下建立一个 16 MB 自扩充(auto-extending)的数据文件 ibdata1。你一样可使用一个 原生磁盘分区(RAW raw disk partitions(raw devices)) 做为数据文件, 如何在 my.cnf 中详细指定它们请查看第 12.1 节。
innodb_mirrored_log_groups 为了保护数据而设置的日志文件组的拷贝数目,默认设置为 1。在 my.cnf 中以数字格式设置。
innodb_log_group_home_dir InnoDB 日志文件的路径。必须与 innodb_log_arch_dir 设置相同值。 若是没有明确指定将默认在 MySQL 的 datadir 目录下创建两个 5 MB 大小的 ib_logfile... 文件。
innodb_log_files_in_group 日志组中的日志文件数目。InnoDB 以环型方式(circular fashion)写入文件。数值 3 被推荐使用。在 my.cnf 中以数字格式设置。
innodb_log_file_size 日志组中的每一个日志文件的大小(单位 MB)。若是 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值,能够减小刷新缓冲池的次数,从而减小磁盘 I/O。可是大的日志文件意味着在崩溃时须要更长的时间来恢复数据。 日志文件总和必须小于 2 GB,3.23.55 和 4.0.9 以上为小于 4 GB。在 my.cnf 中以数字格式设置。
innodb_log_buffer_size InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲容许事务运行时不须要将日志保存入磁盘而只到事务被提交(commit)。 所以,若是有大的事务处理,设置大的日志缓冲能够减小磁盘I/O。 在 my.cnf 中以数字格式设置。
innodb_flush_log_at_trx_commit 一般设置为 1,意味着在事务提交前日志已被写入磁盘, 事务能够运行更长以及服务崩溃后的修复能力。若是你愿意减弱这个安全,或你运行的是比较小的事务处理,能够将它设置为 0 ,以减小写日志文件的磁盘 I/O。这个选项默认设置为 0。
innodb_log_arch_dir The directory where fully written log files would be archived if we used log archiving. 这里设置的参数必须与 innodb_log_group_home_dir 相同。 从 4.0.6 开始,能够忽略这个参数。
innodb_log_archive 这个值一般设为 0。 既然从备份中恢复(recovery)适合于 MySQL 使用它本身的 log files,于是一般再也不须要 archive InnoDB log files。这个选项默认设置为 0。
innodb_buffer_pool_size InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可使访问数据时减小磁盘 I/O。在一个专用的数据库服务器上能够将它设置为物理内存的 80 %。 不要将它设置太大,由于物理内存的使用竞争可能会影响操做系统的页面调用。在 my.cnf 中以数字格式设置。
innodb_additional_mem_pool_size InnoDB 用来存储数据字典(data dictionary)信息和其它内部数据结构(internal data structures)的存储器组合(memory pool)大小。理想的值为 2M,若是有更多的表你就须要在这里从新分配。若是 InnoDB 用尽这个池中的全部内存,它将从操做系统中分配内存,并将错误信息写入 MySQL 的错误日志中。在 my.cnf 中以数字格式设置。
innodb_file_io_threads InnoDB 中的文件 I/O 线程。 一般设置为 4,可是在 Windows 下能够设定一个更大的值以提升磁盘 I/O。在 my.cnf 中以数字格式设置。
innodb_lock_wait_timeout 在回滚(rooled back)以前,InnoDB 事务将等待超时的时间(单位 秒)。InnoDB 会自动检查自身在锁定表与事务回滚时的事务死锁。若是使用 LOCK TABLES 命令,或在同一个事务中使用其它事务安全型表处理器(transaction safe table handlers than InnoDB),那么可能会发生一个 InnoDB 没法注意到的死锁。在这种状况下超时将用来解决这个问题。这个参数的默认值为 50 秒。在 my.cnf 中以数字格式设置。
innodb_flush_method 这个参数仅仅与 Unix 相关。这个参数默认值为 fdatasync。 另外一个设置项为 O_DSYNC。这仅仅影响日志文件的转储,在 Unix 下以 fsync 转储数据。InnoDB 版本从 3.23.40b 开始,在 Unix 下指定 fdatasync 为使用 fsync 方式、指定 O_DSYNC 为使用 O_SYNC 方式。因为这在某些 Unix 环境下还有些问题因此在 'data' versions 并无被使用。
innodb_force_recovery 警告:此参数只能在你但愿从一个被损坏的数据库中转储(dump)数据的紧急状况下使用! 可能设置的值范围为 1 - 6。查看下面的章节 'Forcing recovery' 以了解这个参数的具体含义。参数设置大于 0 的值表明着 InnoDB 防止用户修改数据的安全度。从 3.23.44 开始,这个参数可用。在 my.cnf 中以数字格式设置。
innodb_fast_shutdown InnoDB 缺乏在关闭以前清空插入缓冲。这个操做可能须要几分钟,在极端的状况下能够须要几个小时。若是这个参数据设置为 1 ,InnoDB 将跳过这个过程而直接关闭。从 3.23.44 和 4.0.1 开始,此参数可用。从 3.23.50 开始,此参数的默认值为 1。
innodb_thread_concurrency InnoDB 会试图将 InnoDB 服务的使用的操做系统进程小于或等于这里所设定的数值。此参数默认值为 8。若是计算机系统性能较低或 innodb_monitor 显示有不少线程等侍信号,应该将这个值设小一点。若是你的计算机系统有很个人处理器与磁盘系统,则能够将这个值设高一点以充分利用你的系统资源。建议设值为处理器数目+ 磁盘数目。 从 3.23.44 和 4.0.1 开始,此参数可用。在 my.cnf 中以数字格式设置。