1. 程式人生 > >linux下mysql5.7以上my.cnf配置檔案配置

linux下mysql5.7以上my.cnf配置檔案配置

簡單配置,低配置伺服器配置

 

[client]
#客戶端設定
port    = 3306
socket    = /data/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysqld]
user    = mysql
port    = 3306
socket    = /data/mysql/data/mysql.sock
server-id = 1
pid-file = /data/mysql/data/mysql.pid
#安裝目錄
basedir    = /usr/local/mysql
#資料庫存放目錄
datadir = /data/mysql/data/ #系統資料庫編碼設定,排序規則 character_set_server = utf8mb4 collation_server = utf8mb4_bin back_log = 1024 explicit_defaults_for_timestamp = ON lower_case_table_names = 0 sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION max_connections
= 512 max_connect_errors = 1000000 table_open_cache = 1024 max_allowed_packet = 8M thread_stack = 256K thread_cache_size = 384 skip-external-locking interactive_timeout = 600 wait_timeout = 3600 log_timestamps = SYSTEM log-error = /data/mysql/logs/error.log #預設使用InnoDB儲存引擎 default_storage_engine = InnoDB innodb_buffer_pool_size
= 64M innodb_purge_threads = 1 innodb_log_buffer_size = 2M innodb_log_file_size = 128M innodb_lock_wait_timeout = 120 bulk_insert_buffer_size = 32M myisam_sort_buffer_size = 8M # MySQL重建索引時所允許的最大臨時檔案的大小 myisam_max_sort_file_size = 10G myisam_repair_threads = 1 [mysqldump] quick max_allowed_packet = 16M [myisamchk] key_buffer_size = 8M sort_buffer_size = 8M read_buffer = 4M write_buffer = 4M

下面是詳細的配置解釋

 

[client]
#客戶端設定
port    = 3306
socket    = /data/mysql/data/mysql.sock
default-character-set = utf8mb4

[mysqld]
#mysql啟動時使用的使用者
user    = mysql
#預設連線埠
port    = 3306
#為MySQL客戶端程式和伺服器之間的本地通訊指定一個套接字檔案
socket    = /data/mysql/data/mysql.sock
#資料庫伺服器id,這個id用來在主從伺服器中標記唯一mysql伺服器
server-id = 1
#埠繫結的ip地址,0.0.0.0表示允許所有遠端訪問,127.0.0.1表示只能本機訪問,預設值為*
bind-address = 0.0.0.0
#預設名為 主機名.pid,在資料庫/mysql/data/主機名.pid,記錄mysql執行的process id
#如果存在,再次start時會報已經啟動
pid-file = /data/mysql/data/mysql.pid

#安裝目錄
basedir    = /usr/local/mysql
#資料庫存放目錄
datadir    = /data/mysql/data/

#系統資料庫編碼設定,排序規則
character_set_server = utf8mb4
collation_server = utf8mb4_bin

#secure_auth 為了防止低版本的MySQL客戶端(<4.1)使用舊的密碼認證方式訪問高版本的伺服器。MySQL 5.6.7開始secure_auth 預設為啟用值1
secure_auth = 1

#可能的連線數
#指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆疊中。
back_log = 1024

#########################################
#################其他設定################
#########################################

#顯式指定預設時間戳,即定義表中的timestamp時間戳的列時需要顯示指定預設值
#預設為OFF,
#如果第一個TIMESTAMP列,沒有顯式設定DEFAULT,將自動分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性
#timestamp列不能設定為NULL,第二列及以後的timestamp列都預設為"0000-00-00 00:00:00"
#如果設定為ON,
#第一個timestamp列可以設定為NULL,不會預設分配DEFAULT CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP屬性
#宣告為NOT NULL且沒有顯式DEFAULT子句,在嚴格模式下會報錯。
explicit_defaults_for_timestamp = ON

#linux下要嚴格區分大小寫,windows下不區分大小寫
#1表示不區分大小寫,0表示區分大小寫。
#lower_case_table_names = 0
lower_case_table_names = 0

#預設sql模式,嚴格模式
#sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,
#NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
#ONLY_FULL_GROUP_BY 
#NO_ZERO_IN_DATE 不允許年月為0
#NO_ZERO_DATE 不允許插入年月為0的日期
#ERROR_FOR_DIVISION_BY_ZERO 在INSERT或UPDATE過程中,如果資料被零除,則產生錯誤而非警告。如 果未給出該模式,那麼資料被零除時MySQL返回NULL
#NO_ENGINE_SUBSTITUTION 不使用預設的儲存引擎替代
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION



########################################################
############各種緩衝區及處理資料的最大值設定############
########################################################

#是MySQL執行排序使用的緩衝大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段
#如果不能,可以嘗試增加sort_buffer_size變數的大小
sort_buffer_size = 16M

#應用程式經常會出現一些兩表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的時候(all/index join),
#為了減少參與Join的“被驅動表”的讀取次數以提高效能,需要使用到 Join Buffer 來協助完成 Join操作。
#當 Join Buffer 太小,MySQL 不會將該 Buffer 存入磁碟檔案,而是先將Join Buffer中的結果集與需要 Join 的表進行 Join 操作
#然後清空 Join Buffer 中的資料,繼續將剩餘的結果集寫入此 Buffer 中,
#如此往復。這勢必會造成被驅動表需要被多次讀取,成倍增加 IO 訪問,降低效率。
#若果多表連線需求大,則這個值要設定大一點。
join_buffer_size = 16M

#索引塊的緩衝區大預設16M
key_buffer_size = 15M
# 訊息緩衝區會用到該列,該值太小則會在處理大包時產生錯誤。如果使用大的text,BLOB列,必須增加該值
max_allowed_packet = 32M

# mysql伺服器最大連線數值的設定範圍比較理想的是:伺服器響應的最大連線數值佔伺服器上限連線數值的比例值在10%以上
# Max_used_connections / max_connections * 100% 
max_connections = 512
# 阻止過多嘗試失敗的客戶端,如果值為10時,失敗(如密碼錯誤)10次,mysql會無條件阻止使用者連線
max_connect_errors = 1000000

#表描述符快取大小,可減少檔案開啟/關閉次數,一般max_connections*2。
table_open_cache = 1024
#MySQL 快取 table 控制代碼的分割槽的個數,每個cache_instance<=table_open_cache/table_open_cache_instances
table_open_cache_instances = 32
#mysql開啟最大檔案數
open_files_limit = 65535


#InnoDB表中,表更新後,查詢快取失效,事務操作提交之前,所有查詢都無法使用快取。影響查詢快取命中率
#查詢快取是靠一個全域性鎖操作保護的,如果查詢快取配置的記憶體比較大且裡面存放了大量的查詢結果,
#當查詢快取失效的時候,會長時間的持有這個全域性鎖。
#因為查詢快取的命中檢測操作以及快取失效檢測也都依賴這個全域性鎖,所以可能會導致系統僵死的情況
#在高併發,寫入量大的系統,建義把該功能禁掉
query_cache_size = 0
#決定是否快取查詢結果。這個變數有三個取值:0,1,2,分別代表了off、on、demand。
query_cache_type = 0
#指定單個查詢能夠使用的緩衝區大小,預設為1M
query_cache_limit = 1M


##############################################
#################執行緒相關配置#################
##############################################

#執行緒快取;主要用來存放每一個執行緒自身的標識資訊,執行緒棧大小
thread_stack = 256K

#thread_cahe_size執行緒池,執行緒快取。用來快取空閒的執行緒,以至於不被銷燬,
#如果執行緒快取在的空閒執行緒,需要重新建立新連線,則會優先呼叫執行緒池中的快取,很快就能響應連線請求。
#每建立一個連線,都需要一個執行緒與之匹配。
thread_cache_size = 384

#External-locking用於多程序條件下為MyISAM資料表進行鎖定
#伺服器訪問資料表時經常需要等待解鎖,因此在單伺服器環境下external locking開啟會讓MySQL效能下降

#單伺服器環境,使用skip-external-locking,關閉外部鎖定,
#多伺服器使用同一個資料庫目錄時,必須開啟external-locking,也就是說註釋掉skip-external-locking
skip-external-locking


#最大的空閒等待時間,預設是28800,單位秒,即8個小時
#通過mysql客戶端連線資料庫是互動式連線,通過jdbc連線資料庫是非互動式連線
#互動式連線超時時間,超過這個時間自動斷開連線
interactive_timeout = 600
#非互動式連線超時時間,超過這個時間自動斷開連線
wait_timeout = 600

#它規定了內部記憶體臨時表的最大值,每個執行緒都要分配。(實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。)
#如果記憶體臨時表超出了限制,MySQL就會自動地把它轉化為基於磁碟的MyISAM表,儲存在指定的tmpdir目錄下
tmp_table_size = 96M
max_heap_table_size = 96M



############################
##########日誌設定##########
############################

# 日誌時間戳,mysql5.7.2版本之後才有的屬性,控制寫入到檔案上顯示日誌的時間,
# 不會影響general log 和 slow log 寫到表(mysql.general_log, mysql.slow_log)中的日誌的時間
# 可以設定的有:UTC 和 SYSTEM,預設UTC,即0時區的時間,比北京時間慢8小時,所以要設定為SYSTEM
log_timestamps = SYSTEM

#日誌的輸出位置一般有三種方式:file(檔案),table(表),none(不儲存)
#其中前兩個輸出位置可以同時定義,none表示是開啟日誌功能但是不記錄日誌資訊。
#file就是通過general_log_file=/mydata/data/general.log 等方式定義的,
#而輸出位置定義為表時檢視日誌的內容:mysql.general_log表

##二進位制日誌設定
#預設不開啟二進位制日誌
log_bin = OFF
#log-bin = /data/mysqldata/3307/binlog/mysql-bin 設定二進位制路徑時,如果沒有生命log_bin=OFF,會開啟日誌
#二進位制日誌緩衝大小
#我們知道InnoDB儲存引擎是支援事務的,實現事務需要依賴於日誌技術,為了效能,日誌編碼採用二進位制格式。那麼,我們如何記日誌呢?有日誌的時候,就直接寫磁碟?
#可是磁碟的效率是很低的,如果你用過Nginx,,一般Nginx輸出access log都是要緩衝輸出的。因此,記錄二進位制日誌的時候,我們是否也需要考慮Cache呢?
#答案是肯定的,但是Cache不是直接持久化,於是面臨安全性的問題——因為系統宕機時,Cache中可能有殘餘的資料沒來得及寫入磁碟。因此,Cache要權衡,要恰到好處:
#既減少磁碟I/O,滿足效能要求;又保證Cache無殘留,及時持久化,滿足安全要求。
binlog_cache_size = 16M


##慢查詢,開發調式階段才需要開啟慢日誌功能。上線後關閉
slow_query_log = OFF
#慢日誌檔案路徑
slow_query_log_file = /data/mysql/logs/slow_query.log
#該值是ON,則會記錄所有沒有利用索引來進行查詢的語句,前提是slow_query_log 的值也是ON
log_queries_not_using_indexes = ON
#記錄管理語句
log-slow-admin-statements
#如果執行的SQL語句沒有使用索引,
#則mysql資料庫同樣會將這條SQL語句記錄到慢查詢日誌檔案中。除錯時候使用
#log-queries-not-using-indexes
#設定每分鐘記錄到日誌的未使用索引的語句數目,超過這個數目後只記錄語句數量和花費的總時間
#log_throttle_queries_not_using_indexes = 60

#MySQL能夠記錄執行時間超過引數 long_query_time 設定值的SQL語句,預設是不記錄的。超過這個時間的sql語句會被記錄到慢日誌檔案中
long_query_time = 2

##錯誤日誌:記錄啟動,執行,停止mysql時出現的資訊
log-error = /data/mysql/logs/error.log

##一般查詢日誌,記錄建立的客戶端連線使用者的所有操作,增上改查等,
#不是為了調式資料庫,建議不要開啟,0關閉,1開啟
general_log = OFF
general_log_file = /data/mysql/logs/general.log

#log-long-format 擴充套件方式記錄有關事件
#它是記錄啟用的更新日誌、二進位制更新日誌、和慢查詢日誌的大量資訊。例如,所有查詢的使用者名稱和時間戳將記錄下來
#log-short-format,相反,記錄少量的資訊



############################
######資料庫儲存引擎########
############################

#預設使用InnoDB儲存引擎
default_storage_engine = InnoDB

############################
######innoDB setting########
############################

#控制開啟.ibd檔案的數量。
#如果未啟用innodb_file_per_table,則預設值為300
#否則取決於300和innodb_open_files中的較大值
innodb_file_per_table = 1
innodb_open_files = 350
#表定義快取(資料字典)數量400-2000,預設為400 + (table_open_cache / 2),小網站可以設定為最低
table_definition_cache = 400
#InnoDB 用來高速緩衝資料和索引記憶體緩衝大小。更大的設定可以使訪問資料時減少磁碟 I/O。
innodb_buffer_pool_size = 64M

#單獨指定資料檔案的路徑與大小
#預設會在datadir目錄下建立ibdata1,表空間tablespace
#如果想為innodb tablespace指定不同目錄下的檔案,必須指定innodb_data_home_dir,home目錄
innodb_data_file_path = ibdata1:32M:autoextend
#對於多核的CPU機器,可以修改innodb_read_io_threads和innodb_write_io_threads來增加IO執行緒,來充分利用多核的效能。預設4
#innodb_write_io_threads = 4
#innodb_read_io_threads = 4

#併發執行緒數的限制值,表示預設0情況下不限制執行緒併發執行的數量
innodb_thread_concurrency = 0
#開始碎片回收執行緒。這個應該能讓碎片回收得更及時而且不影響其他執行緒的操作,
#預設值1表示innodb的purge操作被分離到purge執行緒中,master thread不再做purge操作。
#innodb_purge_threads = 1

#配置MySql日誌何時寫入硬碟的引數,預設為1
#0:log buffer將每秒一次地寫入log file中,並且log file的flush(刷到磁碟)操作同時進行。該模式下在事務提交的時候,不會主動觸發寫入磁碟的操作。
#1:每次事務提交時MySQL都會把log buffer的資料寫入log file,並且flush(刷到磁碟)中去
#2:每次事務提交時mysql都會把log buffer的資料寫入log file,但是flush(刷到磁碟)操作並不會同時進行。該模式下,MySQL會每秒執行一次 flush(刷到磁碟)操作
#通常設定為 1,意味著在事務提交前日誌已被寫入磁碟, 事務可以執行更長以及服務崩潰後的修復能力。
innodb_flush_log_at_trx_commit = 1

#InnoDB 將日誌寫入日誌磁碟檔案前的緩衝大小。理想值為 1M 至 8M。大的日誌緩衝允許事務執行時不需要將日誌儲存入磁碟而只到事務被提交(commit)。
#因此,如果有大的事務處理,設定大的日誌緩衝可以減少磁碟I/O。
innodb_log_buffer_size = 2M
#日誌組中的每個日誌檔案的大小(單位 MB)。如果 n 是日誌組中日誌檔案的數目,那麼理想的數值為 1M 至下面設定的緩衝池(buffer pool)大小的 1/n。較大的值,
#可以減少重新整理緩衝池的次數,從而減少磁碟 I/O。但是大的日誌檔案意味著在崩潰時需要更長的時間來恢復資料。
innodb_log_file_size = 128M
#指定有三個日誌組
innodb_log_files_in_group = 3
#innodb_max_dirty_pages_pct作用:控制Innodb的髒頁在緩衝中在那個百分比之下,值在範圍1-100,預設為90.這個引數的另一個用處:
#當Innodb的記憶體分配過大,致使swap佔用嚴重時,可以適當的減小調整這個值,使達到swap空間釋放出來。建義:這個值最大在90%,最小在15%。
#太大,快取中每次更新需要致換資料頁太多,太小,放的資料頁太小,更新操作太慢。
innodb_max_dirty_pages_pct = 75
#在回滾(rooled back)之前,InnoDB 事務將等待超時的時間(單位 秒)
innodb_lock_wait_timeout = 120

#Innodb Plugin引擎開始引入多種格式的行儲存機制,目前支援:Antelope、Barracuda兩種。其中Barracuda相容Antelope格式。
#innodb_file_format = Barracuda
#限制Innodb能開啟的表的數量
#innodb_open_files = 65536



#分散式事務
#innodb_support_xa = FALSE

#innodb_buffer_pool_size 一致 可以開啟多個記憶體緩衝池,把需要緩衝的資料hash到不同的緩衝池中,這樣可以並行的記憶體讀寫。
#innodb_buffer_pool_instances = 4
#這個引數據控制Innodb checkpoint時的IO能力
#innodb_io_capacity = 500
#作用:使每個Innodb的表,有自已獨立的表空間。如刪除檔案後可以回收那部分空間。
#分配原則:只有使用不使用。但DB還需要有一個公共的表空間。
#innodb_file_per_table = 1

#當更新/插入的非聚集索引的資料所對應的頁不在記憶體中時(對非聚集索引的更新操作通常會帶來隨機IO),會將其放到一個insert buffer中,
#當隨後頁面被讀到記憶體中時,會將這些變化的記錄merge到頁中。當伺服器比較空閒時,後臺執行緒也會做merge操作
#innodb_change_buffering = inserts
#該值影響每秒重新整理髒頁的操作,開啟此配置後,重新整理髒頁會通過判斷產生重做日誌的速度來判斷最合適的重新整理髒頁的數量;
#innodb_adaptive_flushing = 1

#資料庫事務隔離級別 ,讀取提交內容
#transaction-isolation = READ-COMMITTED

#innodb_flush_method這個引數控制著innodb資料檔案及redo log的開啟、刷寫模式
#InnoDB使用O_DIRECT模式開啟資料檔案,用fsync()函式去更新日誌和資料檔案。
#innodb_flush_method = O_DIRECT
#預設設定值為1.設定為0:表示Innodb使用自帶的記憶體分配程式;設定為1:表示InnoDB使用作業系統的記憶體分配程式     
#innodb_use_sys_malloc = 1

############################
######myisam setting########
############################
bulk_insert_buffer_size = 8M
myisam_sort_buffer_size = 8M
# MySQL重建索引時所允許的最大臨時檔案的大小
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1

#資料庫全量備份
[mysqldump]
#強制mysqldump從伺服器一次一行地檢索表中的行
quick
#可接收資料包大小
max_allowed_packet = 16M
 
#在mysqld伺服器不使用的情況下修復表或在崩潰狀態下恢復表
[myisamchk]
key_buffer_size = 8M
sort_buffer_size = 8M
read_buffer = 4M
write_buffer = 4M

# https://lnmp.org/  linux nginx mysql php一鍵安裝配置