可能有時候咱們會問,「個人服務器有50 GB內存,12核CPU,怎樣配置最好?」 很遺憾,問題沒這麼簡單,MySQL 服務器的配置應該符合它的工做負載,數據,以及應用需求,並不只僅看硬件的狀況。一般只須要把基本的項配置正確,應該將更多的時間花費在 schema 的優化,索引,以及查詢設計上。mysql
爲 Mysql 服務器建立一個靠譜的配置文件過程。
MySQL是從命令行參數
和配置文件
得到配置信息。
在類 UNIX 系統中,配置文件的位置通常在 /etc/my.conf
或者 /etc/mysql/my.conf
中。sql
必定要清楚的知道服務器配置文件的位置!
有時候咱們嘗試修改配置文件可是不生效,由於修改的並非服務器讀取的文件。不過咱們能夠用下面的命令來找出正在運行的mysql的配置文件的位置。數據庫
➜ ~ which mysqld /usr/local/bin/mysqld ➜ ~ /usr/local/bin/mysqld --verbose --help | grep -A 1 'Default options' Default options are read from the following files in the given order: /etc/my.cnf /etc/mysql/my.cnf /usr/local/etc/my.cnf ~/.my.cnf ➜ ~
配置項設置都使用小寫,單詞之間用下劃線
或橫線
隔開。下面的例子是等價的,而且可能在命令行和配置文件中都看到這兩種格式:緩存
/usr/local/bin/mysqld --auto-increment-offset=5 /usr/local/bin/mysqld --auto_increment_offset=5
在這裏咱們建議使用一種固定的風格。bash
配置項能夠有多個做用域。有些設置是服務器級的(全局做用域
),有些對每一個鏈接是不一樣的(會話做用域
),剩下的一些是對象級
的。服務器
許多會話級變量跟全局變量相等,能夠認爲是默認值。若是改變會話級變量,它隻影響改動的當前鏈接,當鏈接關閉時全部的參數變動都會失效。socket
舉例:性能
另外,除了在配置文件中設置變量,有不少變量(但不是全部)也能夠在服務器運行時修改。MySQL 把這些歸爲動態配置變量。優化
SET sort_buffer_size = 2000;
若是動態的設置變量,要注意 MySQL 關閉時可能丟失這些設置,若是想保持這些設置,仍是須要修改配置文件。ui
若是在服務器運行時修改了變量的全局值,這個值對當前會話和其餘任何已經存在的會話都不起效果,這是由於會話的變量值是在連續建立時從全局值初始化來的。在每次變動後,應該檢查 SHOW_GLOBAL_VARIABLES
的輸出,確認已經按照指望變動了。
動態設置變量可能致使意外的反作用,例如從緩衝中刷新髒塊。務必當心那些能夠在線更改的設置,由於它們可能致使數據庫作大量的工做。
經常使用的變量:
key_buffer_size 鍵緩衝區 table_cache_size 表能夠被緩存的數量 thread_cache_size 線程緩存 query_cache_size 查詢緩存 read_buffer_size sort_buffer_size 排序操做緩存分配內存
正如咱們前面提到的,沒有一個適合全部場景的「最佳配置文件」,好比,對一臺有18GB 內存和 12 塊硬盤的 4 路CPU服務器,不會有一個相應的「最佳配置文件」。應該開發本身的配置,由於即便是一個好的起點,也依賴於具體是如何使用服務器的。
實際上MySQL 的可配置性太強也能夠說是一個弱點,看起來好像須要花費不少的時間在配置上,其實大多數配置的默認值已是最佳配置了,因此,不要改動太多配置。
下面就是這個基礎配置文件:
[mysqld] #GENERAl datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock pid_file=/var/lib/mysql/mysql.pid user=mysql port = 3306 default_storage_engine=InnoDB #INNODB innodb_buffer_pool_size=<value> innodb_log_file_size=<value> innodb_file_per_table=1 innodb_flush_method=0_DIRECT #LOGGING log_error=/var/lib/mysql/mysql-error.log slow_query_log=/var/lib/mysql/mysql-slow.log #OTHER tmp_table_size=32M max_heap_table_size=32M max_connections=<value> open_files_limit=65535 socket=/var/lib/mysql/mysql.sock # Replication Master Server (default) # binary logging is required for replication log-bin=mysql-bin # binary logging format - mixed recommended binlog_format=mixed
配置MySQL正確使用內存量對高性能事關重要。MySQL內存消耗能夠分爲兩類:能夠控制的內存
和不可控制的內存
。沒法控制MySQL服務器運行、解析查詢,以及其內部管理所消耗的內存,可是爲特定目的而使用多少內存則有不少參數能夠控制。
能夠按下面的步驟來配置內存: