https://dev.mysql.com/doc/refman/5.5/en/server-system-variables.htmlphp
非innodb參數設置:html
1.key_buffer_size=16M 這個參數針對myisam做用很大,主要用來緩存myi索引文件,通常設置16M,myisqm能夠開大點, 但同時也會帶來一個問題, 就是一但crash,致使索引壞掉的話, 所帶來的修復索引的時間也會較長。 一般用個myisamchk 命令能夠用來批量修復,例如:myisamchk -r /data/mysql/*.MYIjava
2.sort_buffer_size=4*1024*1024 這個參數不分myisam仍是innodb , 當每一個鏈接來order by操做時會分配的大小, 通常設爲4~8M比較合適mysql
3.query_cache_size =32M 全myisam表 考慮設置的大點好比128/512M 全innodb表設置的小一些16/32M,特殊狀況:若是在show processlist/show profile看到狀態waiting query for lock 致使全局鎖時, 應考慮把這個參考設置更小或爲0關閉 query_cache_size=0nginx
4.auto_increment_increment 設置自增的步長(自增時,每次增長几)sql
auto_increment_offset 在數據爲空的表開始入數據時,自增列初始的基數值是多少, auto_increment_offset通常要小於auto_increment_incremet ,才能生效, 否則系統會忽略auto_increment_offset只生效auto_increment_increment的設置, 這兩參數和auto_increment是不同的, auto_increment是設置下一個自增值從哪一個數開始例如:alter table test AUTO_INCREMENT = 1000;數據庫
5.expire_logs_days 設置保留多少天的binlog,防止binog把盤佔滿, 若是手動在mysql裏刪除能夠用purge master logs to 'binlogfilename' 或 purge master logs before ‘date’apache
6.init_connect='auto_commit=0' 對每一個鏈接設置一個初始操做用, 本身實驗過用這個結合binlog來記錄mysql審覈,思路:在這裏設置每次鏈接進來的進程id 和對應的用戶名入到一張定義好的表, 而後能夠去binlog文件裏找出相應具體操做所對應的進程id 反過來回查這個表所記錄的用戶是誰,缺陷是這參數沒法對super用戶的操做生效。緩存
7.interactive_timeout安全
wait_timeout 這兩個參數一般要一塊兒設置, 單設一個不會生效, 若是是短鏈接 如php, 能夠設置的時間短一些, 好比都等於30 而若是是長鏈接,如java 就設置的長一些28800
還有一個參數max_connections, 例若有時候咱們會看到應用端會報many connection就是由於這個參數沒有規劃好, 若是是php 3000 若是是java 8092, 這個數據還有一個相關聯的參數max_user_connections 這個是分給每一個用戶所容許的最大鏈接數, 注意:max_connections>max_user_connections*用戶數, 最好max_connections要多出來幾個供管理mysql用
8.log_slave_updates 級連複製時,用在中繼服務器上生成binlog所用
9.log_slow_queries
long_query_time 這兩參數設置慢查詢
10.max_allowed_packet=64M 在同步的數據量比較大時, 這個值要考慮一下, 若是設置太小,同步可能會停掉
11.max_connection_error=999999 因爲應用和數據庫之間的網絡不穩定,致使鏈接錯誤,若是錯誤數達到這個閥值, 可能會報錯
12.skip_networking 這個參數在apache,nginx和mysql在一臺機器上提升安全性只容許本機連的時候有用, 同時在skip-grant-tables和其它的維護數據庫防止用戶訪問場景時會用到
設置global profiling=1 而後能夠用show frofile/show profile [All.....] for query N來看語句的性能開銷在哪裏,從而作相應的優化
slave stop;set global sql_slave_skip_counter=1;slave start 主從複製時能夠用來跳過出錯的一條事務, 讓複製繼續
show engine innodb status; 看引擎在幹些啥 show global status;看系統的運行表現
mysqladmin -uroot -p -i 1 -r exten | grep -E '(Com_select|Com_update|Com_delete)' 查看數據庫當前每秒多少select
gdb -p $(pidof mysqld) -ex "set opt_log_slave_updates=1" 此方式可在不重啓狀況下設置靜態變量並生效