MyISAM引擎和InnoDB引擎介紹及應用場景
# 如果你的MySQL服務包含InnoDB支援但是並不打算使用的話,
# 使用此選項會節省記憶體以及磁碟空間,並且加速某些部分
#skip-innodb
=======================================================================================================================================================
# 附加的記憶體池被InnoDB用來儲存 metadata 資訊
# 如果InnoDB為此目的需要更多的記憶體,它會開始從OS這裡申請記憶體.
# 由於這個操作在大多數現代作業系統上已經足夠快, 你一般不需要修改此值.
# SHOW INNODB STATUS 命令會顯示當先使用的數量.
innodb_additional_mem_pool_size = 64M
=======================================================================================================================================================
# InnoDB使用一個緩衝池來儲存索引和原始資料, 不像 MyISAM.
# 這裡你設定越大,你在存取表裡面數據時所需要的磁碟I/O越少.
# 在一個獨立使用的資料庫伺服器上,你可以設定這個變數到伺服器實體記憶體大小的80%
# 不要設定過大,否則,由於實體記憶體的競爭可能導致作業系統的換頁顛簸.
# 注意在32位系統上你每個程序可能被限制在 2-3.5G 使用者層面記憶體限制,
# 所以不要設定的太高.
innodb_buffer_pool_size = 6G
=======================================================================================================================================================
# InnoDB 將資料儲存在一個或者多個數據檔案中成為表空間.
# 如果你只有單個邏輯驅動儲存你的資料,一個單個的自增檔案就足夠好了.
# 其他情況下.每個裝置一個檔案一般都是個好的選擇.
# 你也可以配置InnoDB來使用裸盤分割槽 – 請參考手冊來獲取更多相關內容
innodb_data_file_path = ibdata1:10M:autoextend
=======================================================================================================================================================
# 設定此選項如果你希望InnoDB表空間檔案被儲存在其他分割槽.
# 預設儲存在MySQL的datadir中.
#innodb_data_home_dir =
=======================================================================================================================================================
# 用來同步IO操作的IO執行緒的數量. This value is
# 此值在Unix下被硬編碼為4,但是在Windows磁碟I/O可能在一個大數值下表現的更好.
innodb_file_io_threads = 4
=======================================================================================================================================================
# 如果你發現InnoDB表空間損壞, 設定此值為一個非零值可能幫助你匯出你的表.
# 從1開始並且增加此值知道你能夠成功的匯出表.
#innodb_force_recovery=1
=======================================================================================================================================================
# 在InnoDb核心內的允許執行緒數量.
# 最優值依賴於應用程式,硬體以及作業系統的排程方式.
# 過高的值可能導致執行緒的互斥顛簸.
innodb_thread_concurrency = 16
=======================================================================================================================================================
# 如果設定為1 ,InnoDB會在每次提交後重新整理(fsync)事務日誌到磁碟上,
# 這提供了完整的ACID行為.
# 如果你願意對事務安全折衷, 並且你正在執行一個小的食物, 你可以設定此值到0或者2來減少由事務日誌引起的磁碟I/O
# 0代表日誌只大約每秒寫入日誌檔案並且日誌檔案重新整理到磁碟.
# 2代表日誌寫入日誌檔案在每次提交後,但是日誌檔案只有大約每秒才會重新整理到磁碟上.
innodb_flush_log_at_trx_commit = 2
(說明:如果是遊戲伺服器,建議此值設定為2;如果是對資料安全要求極高的應用,建議設定為1;
設定為0效能最高,但如果發生故障,資料可能會有丟失的危險!
預設值1的意思是每一次事務提交或事務外的指令都需要把日誌寫入(flush)硬碟,這是很費時的。
特別是使用電池供電快取(Battery backed up cache)時。
設成2對於很多運用,特別是從MyISAM錶轉過來的是可以的,它的意思是不寫入硬碟而是寫入系統快取。
日誌仍然會每秒flush到硬碟,所以你一般不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即使MySQL掛了也可能會丟失事務的資料。
而值2只會在整個作業系統掛了時才可能丟資料。)
===============================================================================================================================
# 加速InnoDB的關閉. 這會阻止InnoDB在關閉時做全清除以及插入緩衝合併.
# 這可能極大增加關機時間, 但是取而代之的是InnoDB可能在下次啟動時做這些操作.
#innodb_fast_shutdown
===============================================================================================================================
# 用來緩衝日誌資料的緩衝區的大小.
# 當此值快滿時, InnoDB將必須重新整理資料到磁碟上.
# 由於基本上每秒都會重新整理一次,所以沒有必要將此值設定的太大(甚至對於長事務而言)
innodb_log_buffer_size = 16M
================================================================================================================================
# 在日誌組中每個日誌檔案的大小.
# 你應該設定日誌檔案總合大小到你緩衝池大小的25%~100%
# 來避免在日誌檔案覆寫上不必要的緩衝池重新整理行為.
# 不論如何, 請注意一個大的日誌檔案大小會增加恢復程序所需要的時間.
innodb_log_file_size = 512M
================================================================================================================================
# 在日誌組中的檔案總數.
# 通常來說2~3是比較好的.
innodb_log_files_in_group = 3
================================================================================================================================
# InnoDB的日誌檔案所在位置. 預設是MySQL的datadir.
# 你可以將其指定到一個獨立的硬碟上或者一個RAID1捲上來提高其效能
#innodb_log_group_home_dir
================================================================================================================================
# 在InnoDB緩衝池中最大允許的髒頁面的比例.
# 如果達到限額, InnoDB會開始重新整理他們防止他們妨礙到乾淨資料頁面.
# 這是一個軟限制,不被保證絕對執行.
innodb_max_dirty_pages_pct = 90
================================================================================================================================
# InnoDB用來重新整理日誌的方法.
# 表空間總是使用雙重寫入重新整理方法
# 預設值是 “fdatasync”, 另一個是 “O_DSYNC”.
#innodb_flush_method=O_DSYNC
================================================================================================================================
# 在被回滾前,一個InnoDB的事務應該等待一個鎖被批准多久.
# InnoDB在其擁有的鎖表中自動檢測事務死鎖並且回滾事務.
# 如果你使用 LOCK TABLES 指令, 或者在同樣事務中使用除了InnoDB以外的其他事務安全的儲存引擎
# 那麼一個死鎖可能發生而InnoDB無法注意到.
# 這種情況下這個timeout值對於解決這種問題就非常有幫助.
innodb_lock_wait_timeout = 120