MySQL数据库优化经验详谈(服务器普通配置)

  • A+
所属分类:数据库

代码:

  1. # Example MySQL config file for medium systems. 
  2. # This is for a system with little memory (32M - 64M) where MySQL plays 
  3. # an important part, or systems up to 128M where MySQL is used together with 
  4. # other programs (such as a web server) 
  5. # You can copy this file to 
  6. # /etc/my.cnf to set global options, 
  7. # mysql-data-dir/my.cnf to set server-specific options (in this 
  8. # installation this directory is /var/lib/mysql) or 
  9. # ~/.my.cnf to set user-specific options. 
  10. # In this file, you can use all long options that a program supports. 
  11. # If you want to know which options a program supports, run the program 
  12. # with the "--help" option. 
  13. # The following options will be passed to all MySQL clients 
  14. [client]
  15. #password = your_password 
  16. port = 3306
  17. socket = /tmp/mysql.sock
  18. #socket = /var/lib/mysql/mysql.sock 
  19. # Here follows entries for some specific programs 
  20. # The MySQL server 
  21. [mysqld]
  22. port = 3306
  23. socket = /tmp/mysql.sock
  24. #socket = /var/lib/mysql/mysql.sock 
  25. skip-locking
  26. key_buffer = 128M
  27. max_allowed_packet = 1M
  28. table_cache = 256
  29. sort_buffer_size = 1M
  30. net_buffer_length = 16K
  31. myisam_sort_buffer_size = 1M
  32. max_connections=120
  33. #addnew config 
  34. wait_timeout =120
  35. back_log=100
  36. read_buffer_size = 1M
  37. thread_cache=32
  38. skip-innodb
  39. skip-bdb
  40. skip-name-resolve
  41. join_buffer_size=512k
  42. query_cache_size = 32M
  43. interactive_timeout=120
  44. long_query_time=10
  45. log_slow_queries= /usr/local/mysql4/logs/slow_query.log
  46. query_cache_type= 1
  47. # Try number of CPU's*2 for thread_concurrency 
  48. thread_concurrency = 4
  49. #end new config 
  50. # Don't listen on a TCP/IP port at all. This can be a security enhancement, 
  51. # if all processes that need to connect to mysqld run on the same host. 
  52. # All interaction with mysqld must be made via Unix sockets or named pipes. 
  53. # Note that using this option without enabling named pipes on Windows 
  54. # (via the "enable-named-pipe" option) will render mysqld useless! 
  55. #skip-networking 
  56. # Replication Master Server (default) 
  57. # binary logging is required for replication 
  58. #log-bin 
  59. # required unique id between 1 and 2^32 - 1 
  60. # defaults to 1 if master-host is not set 
  61. # but will not function as a master if omitted 
  62. server-id = 1
  63. # Replication Slave (comment out master section to use this) 
  64. # To configure this host as a replication slave, you can choose between 
  65. # two methods : 
  66. # 1) Use the CHANGE MASTER TO command (fully described in our manual) - 
  67. # the syntax is: 
  68. # CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=, 
  69. # MASTER_USER=, MASTER_PASSWORD= ; 
  70. # where you replace , , by quoted strings and 
  71. # by the master's port number (3306 by default). 
  72. # Example: 
  73. # CHANGE MASTER TO MASTER_HOST='125.564.12.1', MASTER_PORT=3306, 
  74. # MASTER_USER='joe', MASTER_PASSWORD='secret'; 
  75. # OR 
  76. # 2) Set the variables below. However, in case you choose this method, then 
  77. # start replication for the first time (even unsuccessfully, for example 
  78. # if you mistyped the password in master-password and the slave fails to 
  79. # connect), the slave will create a master.info file, and any later 
  80. # change in this file to the variables' values below will be ignored and 
  81. # overridden by the content of the master.info file, unless you shutdown 
  82. # the slave server, delete master.info and restart the slaver server. 
  83. # For that reason, you may want to leave the lines below untouched 
  84. # (commented) and instead use CHANGE MASTER TO (see above) 
  85. # required unique id between 2 and 2^32 - 1 
  86. # (and different from the master) 
  87. # defaults to 2 if master-host is set 
  88. # but will not function as a slave if omitted 
  89. #server-id = 2 
  90. # The replication master for this slave - required 
  91. #master-host = 
  92. # The username the slave will use for authentication when connecting 
  93. # to the master - required 
  94. #master-user = 
  95. # The password the slave will authenticate with when connecting to 
  96. # the master - required 
  97. #master-password = 
  98. # The port the master is listening on. 
  99. # optional - defaults to 3306 
  100. #master-port = 
  101. # binary logging - not required for slaves, but recommended 
  102. #log-bin 
  103. # Point the following paths to different dedicated disks 
  104. #tmpdir = /tmp/ 
  105. #log-update = /path-to-dedicated-directory/hostname 
  106. # Uncomment the following if you are using BDB tables 
  107. #bdb_cache_size = 4M 
  108. #bdb_max_lock = 10000 
  109. # Uncomment the following if you are using InnoDB tables 
  110. #innodb_data_home_dir = /var/lib/mysql/ 
  111. #innodb_data_file_path = ibdata1:10M:autoextend 
  112. #innodb_log_group_home_dir = /var/lib/mysql/ 
  113. #innodb_log_arch_dir = /var/lib/mysql/ 
  114. # You can set .._buffer_pool_size up to 50 - 80 % 
  115. # of RAM but beware of setting memory usage too high 
  116. #innodb_buffer_pool_size = 16M 
  117. #innodb_additional_mem_pool_size = 2M 
  118. # Set .._log_file_size to 25 % of buffer pool size 
  119. #innodb_log_file_size = 5M 
  120. #innodb_log_buffer_size = 8M 
  121. #innodb_flush_log_at_trx_commit = 1 
  122. #innodb_lock_wait_timeout = 50 
  123. [mysqldump]
  124. quick
  125. max_allowed_packet = 16M
  126. [mysql]
  127. no-auto-rehash
  128. # Remove the next comment character if you are not familiar with SQL 
  129. #safe-updates 
  130. [isamchk]
  131. key_buffer = 20M
  132. sort_buffer_size = 20M
  133. read_buffer = 2M
  134. write_buffer = 2M
  135. [myisamchk]
  136. key_buffer = 20M
  137. sort_buffer_size = 20M
  138. read_buffer = 2M
  139. write_buffer = 2M
  140. [mysqlhotcopy]
  141. interactive-timeout

补充:
优化table_cachetable_cache指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加 table_cache的值。如果你发现open_tables等于table_cache,并且opened_tables在不断增长,那么你就需要增加table_cache的值了(上述状态值可以使用SHOW STATUS LIKE ‘Open%tables'获得)。注意,不能盲目地把table_cache设置成很大的值。如果设置得太高,可能会造成文件描述符不足,从而造成性能不稳定或者连接失败。对于有1G内存的机器,推荐值是128-256。
案例1:该案例来自一个不是特别繁忙的服务器
table_cache – 512
open_tables – 103
opened_tables – 1273
uptime – 4021421 (measured in seconds)
该案例中table_cache似乎设置得太高了。在峰值时间,打开表的数目比table_cache要少得多。
案例2:该案例来自一台开发服务器。
table_cache – 64
open_tables – 64
opened-tables – 431
uptime – 1662790 (measured in seconds)
虽然open_tables已经等于table_cache,但是相对于服务器运行时间来说,opened_tables的值也非常低。因此,增加table_cache的值应该用处不大。
案例3:该案例来自一个upderperforming的服务器
table_cache – 64
open_tables – 64
opened_tables – 22423
uptime – 19538
该案例中table_cache设置得太低了。虽然运行时间不到6小时,open_tables达到了最大值,opened_tables的值也非常高。这样就需要增加table_cache的值。优化key_buffer_sizekey_buffer_size指定索引缓冲区的大小,它决定索引处理的速度,尤其是索引读的速度。通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size 设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%'获得)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是 MyISAM表,也要使用该值。可以使用检查状态值created_tmp_disk_tables得知详情。对于1G内存的机器,如果不使用 MyISAM表,推荐值是16M(8-64M)。
案例1:健康状况
key_buffer_size – 402649088 (384M)
key_read_requests – 597579931
key_reads - 56188
案例2:警报状态
key_buffer_size – 16777216 (16M)
key_read_requests – 597579931
key_reads - 53832731
案例1中比例低于1:10000,是健康的情况;案例2中比例达到1:11,警报已经拉响。

图片引用自网络