1.啟用InnoDB的每張表一個數據文件設置
InnoDB可以把每個數據庫的信息保存在一個.idb數據文件中,每個.ibd文件代表自己的表空間,通過這樣的方式可以更快地完成類
似“TRUNCATE”的數據庫操作,當刪除或截斷一個數據庫表時你也可以回收未使用的空間,這樣配置的另一個好處是你可以將某些數據
庫表存放在一個單獨的存儲設備,這大大提升你磁盤的I/O負載
MySQL5.6及以上的版本默認啟用了innodb_file_per_table=1
2.將MySQL數據分儲到獨立分區上,注意此設置在MariaDB上無效
建議使用單獨的磁盤(最好是SSD)用於MySQL服務,創建新分區,格式化新分區,並掛載新分區這裡略過,假設/ssd是我們新分區掛載的
目錄,MySQL數據目錄是/var/lib/mysql, 接下來復制整個數據目錄到新分區中 cp -Rp /var/lib/mysql /ssd/ 復制完成後重命名原來的數據目
錄 mv /var/lib/mysql /var/lib/mysql-backup 接下來創建一個符號鏈接 ln -sv /ssd/mysql /var/lib/mysql
3.優化使用InnoDB的緩沖池,InnoDB引擎在內存中有一個緩沖池用於緩存數據和索引,這有助於你更快地執行MySQL/MariaDB查詢語
句,在一個專用的機器上,你可能會把60%~70%的內存分配給innodb_buffer_pool_size,如果機器還運行了其它的服務應該重新考慮這個值
得設置
4.在MySQL中避免使用swappiness,‘交換’是一個當系統移動部分內存到一個稱為‘交換空間’的特殊磁盤空間時的過程,當系統用完
物理內存後就會出現這種情況,系統將信息寫入磁盤而不是釋放一些內存,磁盤要比內存慢得多因此 sysctl -w vm.swappiness=0 關閉
swappiness
5.設置MySQL的最大連接數,只有當執行MySQL請求的時候才會建立連接,執行完成後會關閉連接並被新的連接取代,記住,太多的連
接會導致內存的使用量過高並且會鎖住你的MySQL服務器,一般小網站100~200,較大可能需要500~800甚至更多,可以動態地改變
max_connections的值而無需重啟MySQL服務器 set global max_connections = 500;
6.配置MySQL的線程緩存數量,當客戶端斷開連接時,如果當前線程數小於thread_cache_size,它的線程將被放入緩存中,下一個請求通
過使用緩存池中的線程來完成,要提高服務器的性能,你可以將此值設置相對高一些,查看線程緩存命中率 show status like
‘threads_created’; show status like 'connections'; 使用以下公式來計算線程池的命中率 100 - ((threads_created / connections) *
100) 如果得到一個較低的數字,意味著大多數mysql連接使用新的線程,而不是從緩存中加載,這時需要增加thread_cache_size值,這裡有
一個好處是可以動態地改變thread_cache_size,而無需重啟MySQL服務,通過以下方法實現 mysql > set global thread_cache_size = 16;
7.禁用MySQL的DNS反向查詢,在配置文件中添加以下選項 skip_name_resolve
8.配置MySQL的查詢緩存容量,如果你有很多重復的查詢並且數據不經常改變---請使用緩存查詢,query_cache_size 設置為GB級會降低服
務器的性能,原因是更新過程中線程需要鎖定緩存,通常設置為200~300MB應該足夠了,網站比較小可以先給64M並在以後及時去增
加,在配置文件中添加如下配置 query_cache_type = 1 query_cache_size = 64M query_cache_limit = 256K query_cache_min_res_unit = 2k
9.配置臨時表容量和內存表最大容量,tmp_table_size 和 max_heap_table_size 這兩個變量的大小應該相同,它們可以讓你避免磁盤寫
入,tmp_table_size 是內置內存表的最大空間,如果表的大小超出限值將會被轉換為磁盤上的MyISAM表,這會影響數據庫的性能,建議
在服務器上設置這兩個值為沒GB內存給64M, tmp_table_size= 64M max_heap_table_size= 64M
10.啟用MySQL慢查詢日志
11.檢查MySQL的空閒連接,空閒連接會消耗資源,空閒連接是出於‘sleep’狀態並且保持了很長一段時間的連接,使用 mysqladmin
processlist -uroot -p | grep “sleep” 查看空閒連接 set global wait_timeout= 60 要重啟也有效則需修改配置文件,默認的值為28800秒
12.有時候MySQL/MariaDB 數據庫中的表很容易崩潰,尤其是服務器意外關機,文件系統突然崩潰或復制過程中仍然訪問數據庫,有一
個稱為‘mysqlcheck’的免費開源工具,它會自動檢查,修復和優化linux中數據庫的所有表 mysqlcheck --auto-repair --check --optimize -
-all-databases
mysqlcheck --auto-repair --check --optimize databasename