Mysql常用配置及優化


[client]
# 該目錄下的內容常用來進行localhost登陸,一般不需要修改
port = 3306 # 端口號
socket = /var/lib/mysql/mysql.sock # 套接字文件(localhost登陸會自動生成)

[mysql]
# 包含一些客戶端mysql命令行的配置
no-auto-rehash # 默認不自動補全 auto-rehash自動補全

[mysqld]
# mysql優化的配置目錄,除硬件和環境配置外,全部優化在此配置,
# 一般服務器安裝只有此配置目錄
user = mysql #默認啟動用戶,一般不需要修改,可能出現啟動不成功
port = 3306 #端口號
socket = /var/lib/mysql/mysql.sock #套接字文件 (套接字方式登陸比TCP/IP方式連接快)
character-set-server = utf8 #設置數據庫服務器默認編碼 utf-8
basedir = /usr/local/mysql #數據庫安裝目錄--指定此參數可解決相對路徑造成的問題
datadir = /data/mysql #數據庫目錄,數據庫目錄切換時需要用到
pid-file = /var/run/mysqld/mysqld.pid #mysql進程文件,可指定自己的進程文件
external-locking = FALSE #外部鎖定(非多服務器可不設置該選項,默認skip-external-locking)
skip-external-locking #跳過外部鎖定 (避免多進程環境下的external locking--鎖機制)
skip-name-resolve #跳過主機名解析,直接IP訪問,可提升訪問速度
log-error = /data/log/mysqld.log #錯誤日志文件
log-warnings #默認為1,表示啟用警告信息記錄日志,不需要置0即可,大於1時表示將錯誤或者失敗連接記錄日志
open_files_limit = 10240 #全局只讀變量,文件描述符限制 注:上限其實為OS文件描述符上限,小於OS上限時生效 可用lsof查看限制並修改相應配置

#以下配置較為重要
back_log = 600 #在MYSQL暫時停止響應新請求之前,短時間內的多少個請求可以被存在堆棧中。不超過TCP/IP監聽隊列,建議512倍數
#如果系統在短時間內有很多連接,則需要增大該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。默認值50。
max_connections = 5000 #MySQL允許最大的進程連接數,如果經常出現Too Many Connections的錯誤提示,則需要增大此值
max_connect_errors = 6000 #設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的連接請求,
#直到mysql服務器重啟或通過flush hosts命令清空此host的相關信息
max_allowed_packet = 32M #限制接收數據包的大小,單條數據超過該值時插入或更新失敗,
#show VARIABLES like '%max_allowed_packet%'; 查看當前限制大小
sort_buffer_size = 8M #每個連接獨享,用於優化不能通過sql或者索引優化的group和order等,設置的值應適中
#比如:500個連接,500*8 = 4G,將消耗4G內存
join_buffer_size = 8M #用於表間關聯緩存的大小,每個連接獨享
#thread_concurrency = 16 #應設為CPU核數的2倍.
thread_cache_size = 600 #線程緩存變量,減少連接的創建,一般設置規則
#1G->8;2G->16;3G->32;根據實際情況可適當加大(個人:2^(n+2))
thread_stack = 1024K #設置MYSQL每個線程的堆棧大小,可設置范圍為128K至4GB,默認足夠大,一般不用修改
query_cache_size = 128M #查詢緩存,設置不宜過大,主要是因為緩存越大,設置失效時間越長。如果高並發寫,可以禁用該功能
query_cache_limit = 2M #指定單個查詢能夠使用的緩沖區大小,默認為1M
query_cache_min_res_unit = 4k #大數據查詢4k,小數據查詢2k,目的是提高緩存命中率

#數據庫引擎相關參數
default-storage-engine = InnoDB #默認數據庫引擎
innodb_data_file_path = ibdata1:1024M:autoextend #指定數據文件,初始大小,指定擴展大小 注意與數據庫中初始文件大小保持一致
#格式:size-allocation[:autoextend[:max-size-allocation]]
innodb_read_io_threads = 16 #read IO線程,根據cpu核心線程數量設置
innodb_write_io_threads = 16 #write IO線程,根據cpu核心線程數量設置
innodb_thread_concurrency = 48 #服務器有幾個CPU就設置為幾,建議用默認設置,一般為8
innodb_lock_wait_timeout = 120 #事務獲取鎖的最長等待時間,超時請求失敗
innodb_buffer_pool_size = 80G #類似於myisam的key_pool_size 適當增加可提高命中率,專用服務器可設置為70-80%
#innodb_flush_log_at_trx_commit = 2 #默認值1 每次提交日志記錄磁盤 2 日志寫入系統緩存 0 不提交也記錄,不安全,不推薦
innodb_flush_method = O_DIRECT #控制着innodb數據文件及redo log的打開、刷寫模式
#fdatasync(默認),調用fsync()去刷數據文件與redo log的buffer
#O_DSYNC,innodb會使用O_SYNC方式打開和刷寫redo log,使用fsync()刷寫數據文件
#O_DIRECT,innodb使用O_DIRECT打開數據文件,使用fsync()刷寫數據文件跟redo log
#fsync() 作用:數作用是flush時將與fd文件描述符所指文件有關的buffer刷寫到磁盤
innodb_log_files_in_group = 2 #以循環方式將日志文件寫到多個文件,默認2
innodb_log_file_size = 4G #數據日志文件大小,較大可提升性能,
innodb_log_buffer_size = 512M #日志文件所用的內存大小,以M為單位。緩沖區更大能提高性能,但意外的故障將會丟失數據(開發人員推薦1-8M---不知道為什么)
#innodb_file_per_table = 1 #獨立表空間 innodb 默認一個表空間
#
innodb_autoinc_lock_mode = 2 #主要作用於自增列
#0 這個表示tradition 傳統 得到語句級別的鎖,具有連續性和重復性,但影響並發的插入
     #1 這個表示consecutive 連續 根據一次性插入的數量生成連續的值,
#auto_inc鎖不需要一直保持到語句的結束,語句得到了相應的值后就可以提前釋放鎖
     #2 這個表示interleaved 交錯 沒有auto_inc鎖,auto_incremant值可能不是連續的

#Percona XtraDB Cluster 5.7. 基於同步復制的多主MySQL集群解決方案,只支持Innodb引擎
#需要安裝wsrep打過補丁的版本
#下載地址:https://www.percona.com/downloads/

pxc_strict_mode = ENFORCING
wsrep_cluster_address = gcomm://192.168.66.242,192.168.66.241 #集群中的節點地址,可以使用主機名或IP
wsrep_node_address = 192.168.66.241 #本機節點地址,可以使用主機名或IP
wsrep_provider = /usr/lib64/galera3/libgalera_smm.so
wsrep_sst_method = xtrabackup-v2 #指定SST方式,支持rsync(最快,需要鎖表),
#mysqldump和xtrabackup,從5.5.33-23.7.6起支持xtrabackup-v2
wsrep_slave_threads = 8 #線程數量
wsrep_cluster_name = Cluster #集群名字,必須統一
wsrep_node_name = Node1 #集群中節點名字,必須唯一
wsrep_sst_auth = "sstuser:8jUthGnAUfWEfJ9" #xtrabackup使用的用戶名密碼,第一台節點啟動時創建,詳見安裝文檔
#wsrep_sst_donor='node3,' #一個逗號分割的節點串作為狀態轉移源,
#比如wsrep_sst_donor=node5,node3, 如果node5可用,用node5,不可用用node3,
#如果node3不可用,最后的逗號表明讓提供商自己選擇一個最優的。

transaction_isolation = READ-COMMITTED #事務隔離級別
# 1.READ-UNCOMMITTED-讀未提交 --臟讀(開發生產均不建議)
# 2.READ-COMMITTE-讀已提交 --非默認
# 3.REPEATABLE-READ -可重復讀 --可能出現幻影行(Innodb 和 Falcon 通過並發解決幻讀問題)
# 4.SERIALIZABLE -串行 --最高級別 可能出現大量超時和鎖競爭
tmp_table_size = 10G #查詢生成的臨時表大小超過該值時會在硬盤生成MyISAM表,如果存在大量group by 等語句,可調整大小
max_heap_table_size = 5G #內存表最大空間限制 表在磁盤中,數據在內存中
explicit_defaults_for_timestamp=1 #主要針對TIMESTAMP列,不指定默認會自動加上notnull屬性,第一列會自動添加current timestamp
table-definition-cache = 4096 #表定義相關信息緩存 實際存放的是frm與內存的映射關系
table-open-cache = 4096 #打開表緩存 存放已打開的表句柄
#同時設置生效
interactive_timeout = 120 #mysql在關閉一個交互的連接之前所要等待的秒數(客戶端連接)
wait_timeout = 864000 #mysql在關閉一個非交互的連接之前所要等待的秒數 默認8小時(應用程序調用),
#根據應用實際情況決定 show processlist; sleep進程多則相應調小
long_query_time = 2 #慢查詢超時設置,默認10秒,記錄超過查詢時間的語句
slow-query-log=1 #注意之前的版本5.6之前的版本為 log-slow-query 是否記錄慢查詢日志---作為數據庫分析
slow-query-log-file=/data/log/query-slow.log #慢查詢日志記錄文件
#相關二進制文件設置
log_bin #數據庫操作二進制記錄,數據庫備份,復制所需
binlog_format = ROW #ROW(基於行的復制--安全,但是注意並發) STATEMENT(基於sql語句的復制),MIXED(混合模式復制)
binlog_cache_size = 4M #二進制日志緩存,提高log-bin記錄效率
log_bin_trust_function_creators = 1 #主從復制是需要注意,為了保證主從復制完全一致,需要開啟此選項,主從默認阻止函數創建
max_binlog_size = 1G #二進制日志文件大小默認1G 要求大於4096 小於1G
expire_logs_days = 7 #清除過期日志
#binlog_do_db #此參數表示只記錄指定數據庫的二進制日志
#binlog_ignore_db #忽略某數據庫記錄

key_buffer_size = 2048M #提高查詢命中率,最好不要超過4G,可根據緩存命中率適當調整show global status like 'key_read%';
read_buffer_size = 16M #順序讀緩存,每個連接獨享
read_rnd_buffer_size = 64M #隨機讀緩存,每個連接獨享
bulk_insert_buffer_size = 1G #批量插入並且只有向非空表添加數據時才使用該緩存,只對myisam表使用。


#主從復制相關--必須開啟log-bin
server-id = 19911216 #主從復制必須,並且各服務器具有唯一性
log_slave_updates #配置從服務器的更新是否寫入二進制日志,默認是不打開的
replicate-ignore-db = mysql #主從復制默認忽略的數據庫,可用","分隔或使用多條記錄
#replicate-do-db=qrs,login #主從復制指定數據庫,","號隔開或使用多條記錄

[mysqldump] #數據庫全量備份
quick #強制mysqldump從服務器一次一行地檢索表中的行
max_allowed_packet = 32M #可接收數據包大小

[isamchk] #在mysqld服務器不使用的情況下修復表或在崩潰狀態下恢復表
key_buffer = 1024M
sort_buff_size =1024M
read_buffer = 16M
write_buffer = 16M

[myisamchk] #在mysqld服務器不使用的情況下修復表或在崩潰狀態下恢復表
key_buffer = 1024M
sort_buff_size = 1024M
read_buffer = 16M
write_buffer = 16M

[mysqld_safe] #safe方式啟動數據庫,相比於mysqld,會在服務啟動后繼續監控服務狀態,死機時重啟
open-files-limit = 8192


免責聲明!

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



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