[mysqld] #在这里加入其它 的 mysql 服务器配置 #... # 如果不使用innodb表将一列一行注释去除 # skip-innodb # # 数据文件必须 # 能够容下数据与索引 # 确定有足够的 # 磁盘空间 innodb_data_file_path = /ibdata/ibdata1:2000m;/dr2/ibdata/ibdata2:2000m:autoextend # 设置缓冲池的大小为 # 你的主内存大小的 # 50 - 80 %,但是 # 在 linux x86 总内存 # 使用必须小于 2 gb set-variable = innodb_buffer_pool_size=1g set-variable = innodb_additional_mem_pool_size=20m innodb_log_group_home_dir = /dr3/iblogs # .._log_arch_dir 必须和 # .._log_group_home_dir一样; # 从 4.0.6开始,可以省略它 innodb_log_arch_dir = /dr3/iblogs set-variable = innodb_log_files_in_group=3 # 设置日志文件的大小约为 # 缓冲池(buffer pool) # 大小的 15 % set-variable = innodb_log_file_size=150m set-variable = innodb_log_buffer_size=8m # 如果丢失最近几个事务影响 # 不大的话可以设置 # .._flush_log_at_trx_commit = 0 innodb_flush_log_at_trx_commit=1 set-variable = innodb_lock_wait_timeout=50 #innodb_flush_method=fdatasync #set-variable = innodb_thread_concurrency=5
注意:我们已在不同的硬盘上放置了两个数据文件, innodb 将从数据文件的底部填充表空间。在某些情况下所有的数据被分配到不同的物理硬盘中会提高数据库的性能。 将日志文件与数据文件分别放在不同的物理硬盘中对提高性能通常是很有益的。你同样可以使用一个 raw 磁盘分区( raw disk partitions(raw devices)) 作为数据文件, 在一些 unixe 系统中这将提高 i/o 能力。 如何在 my.cnf 中详细指定它们请查看第 12.1 节。
警告:在 linux x86 上必须小心不能将内存使用设置太高, glibc 会把进程堆增长到线程堆栈之上,这将会使服务器崩溃。下面的接近或超过于 2g 将会很危险:
innodb_buffer_pool_size + key_buffer + max_connections * (sort_buffer + record_buffer) + max_connections * 2 mb每个线程将使用 2mb(mysql ab 二进制版本为 256 kb)的堆栈,在最坏的环境下还会使用
sort_buffer + record_buffer 的附加内存。
如何调整其它的 mysqld 服务器参数?查看 mysql 用户手册可以得到更详细的信息。适合大多数用户的典型参数如下所示:
skip-locking set-variable = max_connections=200 set-variable = record_buffer=1m set-variable = sort_buffer=1m # 设置索引缓冲(key_buffer)大小为 # 你的 ram 的 5 - 50% ,这主要依赖于 # 系统中 myisam 表使用量。 # 但是必须保证索引缓冲(key_buffer)与 innodb # 的缓冲池(buffer pool)大小总和 # 小于 ram 的 80%。 set-variable = key_buffer=...
注意:在 my.cnf 文件中有些参数是为了设置数字的,它们的设置格式为:set-variable
= innodb... = 123,而其它(字符串和逻辑型)的采用另一设置格式:innodb_... = ... .
各设置参数的含义如下:
innodb_data_home_dir |
这是innodb表的目录共用设置。如果没有在 my.cnf 进行设置,innodb 将使用mysql的 |
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 中以数字格式设置。 |