Mysql需要調整的參數
#以 mysql 5.6版本示例講解
一、Innodb設定
innodb_buffer_pool_size:儲存innodb資料和索引在該buffer中,
對專用mysql伺服器,推薦50-80%實體記憶體大小,
如 5-6GB (8GB RAM), 20-25GB (32GB RAM),
100-120GB(128GB RAM) 。
innodb_log_file_size: 控制redo日志的大小,redo日志可以加速寫,
持久性和crash恢複。通常使用兩個檔案,mysql 5.5總的redo日志限制為4GB,對寫負載型的應用,應該增加該值,使背景檢查點活動減少,提高性能,如4G左右,太大将使故障恢複需要更長的時間。
innodb_flush_method: 控制資料和日志怎樣重新整理到磁盤,如果使用了RAID控制器,
應該使用O_DIRECT。
innodb_flush_neighbors:如果是SSD可以關閉,對連續IO沒有任何性能改善。
innodb_io_capacity和innodb_io_capacity_max:設定每秒有多少背景線程工作,
根據硬體的能力進行設定。
innodb_lru_scan_depth:如果增加innodb_io_capacity,也要增加該值
innodb_file_per_table:設定為ON,每個表使用獨立的.ibd檔案存儲資料和索引,允許當dropping、truncating或rebuilding表時回收再利用剩餘空間,也能支援擴充的特性如壓縮。
innodb_flush_log_at_trx_commit:預設為1,意味着Innodb是完全遵守ACID特性,重新整理每個改變到redo日志;設定為2,每秒重新整理一次;0更快,但是在crash時将丢失一些資料。
innodb_log_buffer_size: 事務日志buffer,當有大的blob/text字段時,可以考慮提高該值,以免産生額外的I/O負載。通過觀察Innodb_log_waits狀态變量,如果非0,将增大該值。
二、複制
log-bin: 啟用二進制日志,預設不是crash安全的,根據業務情況進行設定,
如果需要持久性,需要開啟sync_binlog=1,sync_relay_log=1,
relay-log-info-repository=TABLE和master-info-repository=TABLE
或sync_relay_log_info=1和sync_master_info=1。
expire-log-days: 推薦1-10天
server-id: 在主從複制環境,每個伺服器需要有唯一的server-id
binlog_format=ROW: 使用基于行的複制,提高性能,減少鎖。同時需要設定
transaction-isolation=READ-COMMITIED,
innodb_autoinc_lock_mode=2
三、混合參數
timezone=GMT:适合全球化
character-set-server=utf8mb4
collation-server=utf8mb4_general_ci:utf8 #是更好字元集的格式,
也可以設定skip-character-set-client-handshake
忽略應用程式設定的字元集
sql-mode: #預設是寬容的,會靜默的截斷資料,應該更好的設定
STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,
NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,
NO_ZERO_IN_DATE,ONLY_FULL_GROUP_BY
skip-name-resolve:對進來的連接配接禁用域名反向查找,禁止使用主機名進行授權,
必須使用IP位址進行授權
max_connect_errors:設定成100000,因使用防火牆阻止通路攻擊
max-connections: 建議300-500,推薦不要太高,建議使用應用連接配接池,或者mysql線程池
query_cache_size: 關閉該選項,使用另外的方式,如好的索引、使用複制分擔讀負載,或使用外部cache機制(memcached、redis)提高性能。
本文轉自 boy461205160 51CTO部落格,原文連結:http://blog.51cto.com/461205160/1885588