[client] |
#客戶端設置,即客戶端默認的連接參數 |
port = 3307 |
#默認連接端口 |
socket = /data/mysqldata/3307/mysql.sock |
#用於本地連接的socket套接字 |
default-character-set = utf8mb4 |
#編碼 |
[mysqld] |
#服務端基本設置 |
port = 3307 |
MySQL監聽端口、 |
socket = /data/mysqldata/3307/mysql.sock |
#為MySQL客戶端程序和服務器之間的本地通訊指定一個套接字文件 |
pid-file = /data/mysqldata/3307/mysql.pid |
#pid文件所在目錄 |
basedir = /usr/local/mysql-5.7.11 |
#數據文件存放的目錄 |
tmpdir = /data/mysqldata/3307/tmp |
#MySQL存放臨時文件的目錄 |
character_set_server = utf8mb4 |
#服務端默認編碼(數據庫級別) |
collation_server = utf8mb4_bin |
#服務端默認的比對規則,排序規則 |
user = mysql |
#MySQL啟動用戶 |
performance_schema = 0 |
#性能優化的引擎,默認關閉 |
secure_auth = 1 |
#secure_auth 為了防止低版本的MySQL客戶端(<4.1)使用舊的密碼認證方式訪問高版本的服務器。MySQL 5.6.7開始secure_auth 默認為啟用值1 |
#ft_min_word_len = 1 |
#開啟全文索引 |
#myisam_recover |
#自動修復MySQL的myisam表 |
explicit_defaults_for_timestamp |
#明確時間戳默認null方式 |
event_scheduler |
#計划任務(事件調度器) |
skip-external-locking |
#跳過外部鎖定;External-locking用於多進程條件下為MyISAM數據表進行鎖定 |
skip-name-resolve |
#跳過客戶端域名解析;當新的客戶連接mysqld時,mysqld創建一個新的線程來處理請求。該線程先檢查是否主機名在主機名緩存中。如果不在,線程試圖解析主機名。 |
- |
#使用這一選項以消除MySQL進行DNS解析的時間。但需要注意,如果開啟該選項,則所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求! |
#bind-address = 127.0.0.1 |
#MySQL綁定IP |
skip-slave-start |
#為了安全起見,復制環境的數據庫還是設置--skip-slave-start參數,防止復制隨着mysql啟動而自動啟動 |
slave_net_timeout = 30 |
#The number of seconds to wait for more data from a master/slave connection before aborting the read. MySQL主從復制的時候, |
- |
#當Master和Slave之間的網絡中斷,但是Master和Slave無法察覺的情況下(比如防火牆或者路由問題)。 |
- |
#Slave會等待slave_net_timeout設置的秒數后,才能認為網絡出現故障,然后才會重連並且追趕這段時間主庫的數據。 |
- |
#1.用這三個參數來判斷主從是否延遲是不准確的Slave_IO_Running,Slave_SQL_Running,Seconds_Behind_Master.還是用pt-heartbeat吧。 |
- |
#2.slave_net_timeout不要用默認值,設置一個你能接受的延時時間。 |
local-infile = 0 |
#設定是否支持命令load data local infile。如果指定local關鍵詞,則表明支持從客戶主機讀文件 |
back_log = 1024 |
#指定MySQL可能的連接數量。當MySQL主線程在很短的時間內得到非常多的連接請求,該參數就起作用,之后主線程花些時間(盡管很短)檢查連接並且啟動一個新線程。 |
- |
#back_log參數的值指出在MySQL暫時停止響應新請求之前的短時間內多少個請求可以被存在堆棧中。 |
- |
#sql_mode = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' |
sql_mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER |
#sql_mode,定義了mysql應該支持的sql語法,數據校驗等! NO_AUTO_CREATE_USER:禁止GRANT創建密碼為空的用戶。 |
- |
#NO_ENGINE_SUBSTITUTION 如果需要的存儲引擎被禁用或未編譯,可以防止自動替換存儲引擎 |
key_buffer_size = 32M |
#索引塊的緩沖區大小,對MyISAM表性能影響最大的一個參數.決定索引處理的速度,尤其是索引讀的速度。默認值是16M,通過檢查狀態值Key_read_requests |
- |
#和Key_reads,可以知道key_buffer_size設置是否合理 |
max_allowed_packet = 512M |
#一個查詢語句包的最大尺寸。消息緩沖區被初始化為net_buffer_length字節,但是可在需要時增加到max_allowed_packet個字節。 |
- |
#該值太小則會在處理大包時產生錯誤。如果使用大的BLOB列,必須增加該值。 |
- |
#這個值來限制server接受的數據包大小。有時候大的插入和更新會受max_allowed_packet 參數限制,導致寫入或者更新失敗。 |
thread_stack = 256K |
#線程緩存;主要用來存放每一個線程自身的標識信息,如線程id,線程運行時基本信息等等,我們可以通過 thread_stack 參數來設置為每一個線程棧分配多大的內存。 |
sort_buffer_size = 16M |
#是MySQL執行排序使用的緩沖大小。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引而不是額外的排序階段。 |
- |
#如果不能,可以嘗試增加sort_buffer_size變量的大小。 |
read_buffer_size = 16M |
#是MySQL讀入緩沖區大小。對表進行順序掃描的請求將分配一個讀入緩沖區,MySQL會為它分配一段內存緩沖區。read_buffer_size變量控制這一緩沖區的大小。 |
- |
#如果對表的順序掃描請求非常頻繁,並且你認為頻繁掃描進行得太慢,可以通過增加該變量值以及內存緩沖區大小提高其性能。 |
join_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 訪問,降低效率。 |
read_rnd_buffer_size = 32M |
#是MySQL的隨機讀緩沖區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySQL會首先掃描一遍該緩沖,以避免磁盤搜索, |
- |
#提高查詢速度,如果需要排序大量數據,可適當調高該值。但MySQL會為每個客戶連接發放該緩沖空間,所以應盡量適當設置該值,以避免內存開銷過大。 |
net_buffer_length = 16K |
#通信緩沖區在查詢期間被重置到該大小。通常不要改變該參數值,但是如果內存不足,可以將它設置為查詢期望的大小。 |
- |
#(即,客戶發出的SQL語句期望的長度。如果語句超過這個長度,緩沖區自動地被擴大,直到max_allowed_packet個字節。) |
myisam_sort_buffer_size = 128M |
#當對MyISAM表執行repair table或創建索引時,用以緩存排序索引;設置太小時可能會遇到” myisam_sort_buffer_size is too small” |
bulk_insert_buffer_size = 32M |
#默認8M,當對MyISAM非空表執行insert … select/ insert … values(…),(…)或者load data infile時,使用樹狀cache緩存數據,每個thread分配一個; |
- |
#注:當對MyISAM表load 大文件時,調大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size會極大提升速度 |
thread_cache_size = 384 |
#thread_cahe_size線程池,線程緩存。用來緩存空閑的線程,以至於不被銷毀,如果線程緩存在的空閑線程,需要重新建立新連接, |
- |
#則會優先調用線程池中的緩存,很快就能響應連接請求。每建立一個連接,都需要一個線程與之匹配。 |
query_cache_size = 0 |
#工作原理: 一個SELECT查詢在DB中工作后,DB會把該語句緩存下來,當同樣的一個SQL再次來到DB里調用時,DB在該表沒發生變化的情況下把結果從緩存中返回給Client。 |
- |
#在數據庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。而且在高並發,寫入量大的系統,建系把該功能禁掉。 |
query_cache_type = 0 |
#決定是否緩存查詢結果。這個變量有三個取值:0,1,2,分別代表了off、on、demand。 |
tmp_table_size = 1024M - |
#它規定了內部內存臨時表的最大值,每個線程都要分配。(實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。) |
- |
#如果內存臨時表超出了限制,MySQL就會自動地把它轉化為基於磁盤的MyISAM表,存儲在指定的tmpdir目錄下 |
max_heap_table_size = 512M |
#獨立的內存表所允許的最大容量.# 此選項為了防止意外創建一個超大的內存表導致永盡所有的內存資源. |
open_files_limit = 10240 |
#mysql打開最大文件數 |
max_connections = 2000 |
#MySQL無論如何都會保留一個用於管理員(SUPER)登陸的連接,用於管理員連接數據庫進行維護操作,即使當前連接數已經達到了max_connections。 |
- |
#因此MySQL的實際最大可連接數為max_connections+1; |
- |
#這個參數實際起作用的最大值(實際最大可連接數)為16384,即該參數最大值不能超過16384,即使超過也以16384為准; |
- |
#增加max_connections參數的值,不會占用太多系統資源。系統資源(CPU、內存)的占用主要取決於查詢的密度、效率等; |
- |
#該參數設置過小的最明顯特征是出現”Too many connections”錯誤; |
max-user-connections = 0 |
#用來限制用戶資源的,0不限制;對整個服務器的用戶限制 |
max_connect_errors = 100000 |
#max_connect_errors是一個MySQL中與安全有關的計數器值,它負責阻止過多嘗試失敗的客戶端以防止暴力破解密碼的情況。max_connect_errors的值與性能並無太大關系。 |
- |
#當此值設置為10時,意味着如果某一客戶端嘗試連接此MySQL服務器,但是失敗(如密碼錯誤等等)10次,則MySQL會無條件強制阻止此客戶端連接。 |
table_open_cache = 5120 |
#表描述符緩存大小,可減少文件打開/關閉次數; |
interactive_timeout = 86400 |
#interactive_time -- 指的是mysql在關閉一個交互的連接之前所要等待的秒數(交互連接如mysql gui tool中的連接 |
wait_timeout = 86400 |
#wait_timeout -- 指的是MySQL在關閉一個非交互的連接之前所要等待的秒數 |
binlog_cache_size = 16M |
#二進制日志緩沖大小 |
- |
#我們知道InnoDB存儲引擎是支持事務的,實現事務需要依賴於日志技術,為了性能,日志編碼采用二進制格式。那么,我們如何記日志呢?有日志的時候,就直接寫磁盤? |
- |
#可是磁盤的效率是很低的,如果你用過Nginx,,一般Nginx輸出access log都是要緩沖輸出的。因此,記錄二進制日志的時候,我們是否也需要考慮Cache呢? |
- |
#答案是肯定的,但是Cache不是直接持久化,於是面臨安全性的問題——因為系統宕機時,Cache中可能有殘余的數據沒來得及寫入磁盤。因此,Cache要權衡,要恰到好處: |
- |
#既減少磁盤I/O,滿足性能要求;又保證Cache無殘留,及時持久化,滿足安全要求。 |
slow_query_log = 1 |
#開啟慢查詢 |
long_query_time = 1 |
#超過的時間為1s;MySQL能夠記錄執行時間超過參數 long_query_time 設置值的SQL語句,默認是不記錄的。 |
log-slow-admin-statements |
- |
log-queries-not-using-indexes |
#記錄管理語句和沒有使用index的查詢記錄 |
binlog_format = ROW |
#在復制方面的改進就是引進了新的復制技術:基於行的復制。簡言之,這種新技術就是關注表中發生變化的記錄,而非以前的照抄 binlog 模式。 |
- |
#從 MySQL 5.1.12 開始,可以用以下三種模式來實現:基於SQL語句的復制(statement-based replication, SBR),基於行的復制(row-based replication, RBR), |
- |
混合模式復制(mixed-based replication, MBR)。相應地,binlog的格式也有三種:STATEMENT,ROW,MIXED。MBR 模式中,SBR 模式是默認的。 |
#max_binlog_cache_size = 102400 |
# 為每個session 最大可分配的內存,在事務過程中用來存儲二進制日志的緩存。 |
log-bin = /data/mysqldata/3307/binlog/mysql-bin |
#開啟二進制日志功能,binlog數據位置 |
log-bin-index = /data/mysqldata/3307/binlog/mysql-bin.index |
- |
relay-log = /data/mysqldata/3307/relay/mysql-relay-bin |
#relay-log日志記錄的是從服務器I/O線程將主服務器的二進制日志讀取過來記錄到從服務器本地文件, |
- |
#然后SQL線程會讀取relay-log日志的內容並應用到從服務器 |
relay-log-index = /data/mysqldata/3307/relay/mysql-relay-bin.index |
#binlog傳到備機被寫道relaylog里,備機的slave sql線程從relaylog里讀取然后應用到本地。 |
server_id = 100 |
#服務端ID,用來高可用時做區分 |
log_slave_updates = 1 |
#log_slave_updates是將從服務器從主服務器收到的更新記入到從服務器自己的二進制日志文件中。 |
expire-logs-days = 15 |
#二進制日志自動刪除的天數。默認值為0,表示“沒有自動刪除”。啟動時和二進制日志循環時可能刪除。 |
max_binlog_size = 512M |
#如果二進制日志寫入的內容超出給定值,日志就會發生滾動。你不能將該變量設置為大於1GB或小於4096字節。 默認值是1GB。 |
replicate-wild-ignore-table = mysql.% |
#replicate-wild-ignore-table參數能同步所有跨數據庫的更新,比如replicate-do-db或者replicate-ignore-db不會同步類似 |
#replicate-wild-do-table = db_name.% |
#設定需要復制的Table |
#slave-skip-errors = 1062,1053,1146 |
#復制時跳過一些錯誤;不要胡亂使用這些跳過錯誤的參數,除非你非常確定你在做什么。當你使用這些參數時候,MYSQL會忽略那些錯誤, |
- |
#這樣會導致你的主從服務器數據不一致。 |
auto_increment_offset = 1 |
- |
auto_increment_increment = 2 |
#這兩個參數一般用在主主同步中,用來錯開自增值, 防止鍵值沖突 |
relay_log_info_repository = TABLE |
#將中繼日志的信息寫入表:mysql.slave_realy_log_info |
master_info_repository = TABLE |
#將master的連接信息寫入表:mysql.salve_master_info |
relay_log_recovery = on |
#中繼日志自我修復;當slave從庫宕機后,假如relay-log損壞了,導致一部分中繼日志沒有處理,則自動放棄所有未執行的relay-log, |
- |
#並且重新從master上獲取日志,這樣就保證了relay-log的完整性 |