概述:在linux vps主機上配置mysql數據庫,由於默認使用yum安裝的數據庫啟動了InnoDB引擎,同時其/etc/my.cnf配置都我們的vps主機不是很適合,本文詳細講解如何配置適合自己vps主機的mysql配置文件
目的:優化vps主機上的mysql數據庫,使之更合適vps主機這樣的環境
query_cache_size = 268435456 query_cache_type=1 query_cache_limit=1048576
查看mysql-server靜態參數值命令
mysql>show variables;
或者mysqladmin -uroot variables
mysql服務器的參數很多,如果需要了解某個參數的詳細定義,可以使用mysqld –verbose –help | more
查看mysql-server動態狀態信息命令
mysql>show status;
或者mysqladmin -uroot status
其中show status分為show [session|global]status;可以根據需要加上參數“session”或者”global”來顯示session級(當前統計)的統計結果和global級(自數據庫上次啟動至今)的統計結果,如果不寫,默認為”session”
1、查看和修改默認的存儲引擎,關閉不需要的存儲引擎
在我們使用vps主機過程中,很多用戶只使用MyISAM一個引擎,關閉那麼沒有使用的InnoDB MEMORY等其他引擎
查看當前系統有哪些引擎
mysql>SHOW ENGINES \G 或者第二種方法 mysql>SHOW VARIABLES LIKE 'have%';
查看默認引擎
mysql> show variables like 'table_type'; +---------------+--------+ | Variable_name | Value | +---------------+--------+ | table_type | MyISAM | +---------------+--------+ 1 row in set (0.00 sec) 或者 mysql> show variables like 'storage_engine'; +----------------+--------+ | Variable_name | Value | +----------------+--------+ | storage_engine | MyISAM | +----------------+--------+ 1 row in set (0.00 sec)
mysql默認的存儲引擎是MyISAM,修改默認的存儲引擎可以修改/etc/my.cnf參數文件,在[mysqld]字段裡面增加default-storage-engine=innodb,這裡假設設置默認為innodb,根據自己的需要進行設置,關閉不需要的存儲引擎,可以修改/etc/my.cnf參數文件,在[mysqld]字段裡面增加–skip-innodb。
2、調節key_buffer_size大小
mysql> show variables like 'key_buffer_size'; +-----------------+-----------+ | Variable_name | Value | +-----------------+-----------+ | key_buffer_size | 402653184 | +-----------------+-----------+ 1 row in set (0.00 sec) mysql> 從上面可以看到,key_buffer_size為:384M,可以修改/etc/my.cnf參數文件,在[mysqld]字段裡面增加key_buffer_size = 384M,當然也可以使用mysql>set grobal key_buffer_size=512M修改。 此參數是用來<strong>設置索引塊</strong>(Index Blocks)緩存的大小,它被所有的線程共享,只適合MyISAM存儲引擎。
3、調節table_cache設置
這個參數表示數據庫用戶打開表的緩存數量,每個連接進來,都會至少打開一個表緩存,如此,table_cache與max_connections有關,
查看當前的table_cache值
mysql> show variables like 'table_cache'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | table_cache | 4096 | +---------------+-------+ 1 row in set (0.00 sec)
從上面可以看到,table_cache為:4096,可以修改/etc/my.cnf參數文件,在[mysqld]字段裡面增加table_cachee = 4096
4、調節query_cache設置
Query Cache 在提高數據庫性能方面具有非常重要的作用,其設定也非常簡單,僅需要在配置文件寫入兩行: query_cache_type 和 query_cache _size,而且 MySQL 的 query cache 非常快!而且一旦命中,就直接發送給客戶端,節約大量的 CPU 時間。
當然,非 SELECT 語句對緩沖是有影響的,它們可能使緩沖中的數據過期。一個 UPDATE 語句引起的部分表修改,將導致對該表所有的緩沖數據失效,這是 MySQL 為了平衡性能而沒有采取的措施。因為,如果每次 UPDATE 需要檢查修改的數據,然後撤出部分緩沖將導致代碼的復雜度增加。
query_cache_type :0 代表不使用緩沖, 1 代表使用緩沖,2 代表根據需要使用。
設置 1 代表緩沖永遠有效,如果不需要緩沖,就需要使用如下語句:
SELECT SQL_NO_CACHE * FROM my_table WHERE …
如果設置為 2 ,需要開啟緩沖,可以用如下語句:
SELECT SQL_CACHE * FROM my_table WHERE …
用 SHOW STATUS 可以查看緩沖的情況:
mysql> show status like 'Qca%'; +-------------------------+----------+ | Variable_name | Value | +-------------------------+----------+ | Qcache_queries_in_cache | 8 | | Qcache_inserts | 545875 | | Qcache_hits | 83951 | | Qcache_lowmem_prunes | 0 | | Qcache_not_cached | 2343256 | | Qcache_free_memory | 33508248 | | Qcache_free_blocks | 1 | | Qcache_total_blocks | 18 | +-------------------------+----------+ 8 rows in set (0.00 sec)
如果需要計算命中率,需要知道服務器執行了多少 SELECT 語句:
mysql> show status like 'Com_sel%'; +---------------+---------+ | Variable_name | Value | +---------------+---------+ | Com_select | 2889628 | +---------------+---------+ 1 row in set (0.01 sec)
在本例中, MySQL 命中了 2,889,628 條查詢中的 83,951 條,而且 INSERT 語句只有 545,875 條。因此,它們兩者的和和280萬的總查詢相比有很大差距,因此,我們知道本例使用的緩沖類型是 2 。
而在類型是 1 的例子中, Qcache_hits 的數值會遠遠大於 Com_select 。 Qcache_not_cached是可以記錄DML語句的數量的