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

下面是詳細的配置解釋

 

NO_ZERO_IN_DATE 支持 0000-00-00 0000-01-01 (年月日都為0,月日不為0)

NO_ZERO_DATE 支持 1000-00-00 0000-01-00 0000-00-01(年月日中任何一個不為0)

要控制0000-00-00這樣的數據插入必須兩個都設置

[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一鍵安裝配置

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM