收集一些常用的mysql引數,方便日後使用。
全域性引數
通用配置
max_connections
mysql能建立的最大連線數,如果資料庫的併發量比較大,建議調高此值,以增加並行連線數量,當然連線數越多,由於mysql會為每個連線建立連線緩衝區,連線數越多會消耗更多記憶體
open_files_limit
mysql開啟的檔案描述符限制,預設最小1024
port
= 3306 守護程序監聽埠
socket
= /tmp/mysql.sock 本地sock檔案
basedir
= /opt/mysql57 mysql安裝目錄
datadir
= /opt/mysql57/var mysql資料目錄
back_log
= 600 引數值指定到來的tcp/ip連線的偵聽佇列的大小
max_connect_errors
= 6000 允許每個客戶端最多嘗試登入次數
skip-name-resolve
跳過網域名稱解析,只使用ip
default-storage-engine
= innodb 預設儲存引擎
緩衝區引數
key_buffer_size
key_buffer_size指定索引緩衝區的大小,它決定索引處理的速度,尤其是索引讀的速度。
query_cache_size
使用查詢緩衝,mysql將查詢結果存放在緩衝區中,今後對於同樣的select語句(區分大小寫),將直接從緩衝區中讀取結果。
record_buffer_size
每個進行乙個順序掃瞄的執行緒為其掃瞄的每張表分配這個大小的乙個緩衝區。如果你做很多順序掃瞄,你可能想要增加該值。
wait_timeout
指定乙個請求的最大連線時間,對於4gb左右記憶體的伺服器可以設定為5-10。
innodb引擎相關配置
sync_binlog
二進位制日誌檔案binlog的重新整理寫入方式,這個引數不僅影響到binlog日誌對mysql所帶來的效能損耗,而且還影響到mysql中資料的完整性。引數設定說明如下:
1) sync_binlog=0,
當事務提交之後,mysql不做fsync之類的磁碟同步指令重新整理binlog_cache中的資訊到磁碟,而讓檔案系統自行決定什麼時候來做同步,或者cache滿了之後才同步到磁碟。如果沒重新整理到磁碟前系統宕機,則會丟失最後的binlog內容,但是此引數效能最佳
2) sync_binlog=n,
當每進行n次事務提交之後,mysql將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟。
innodb_flush_logs_at_trx_commit
innodb引擎事務日誌檔案的重新整理寫入方式,這個引數對innodb引擎的寫入效能來說非常重要,有以下3種設定:
1) =1時,在每個事務提交時,日誌緩衝被寫到日誌檔案,對日誌檔案做到磁碟操作的重新整理。最安全的方式,但是速度最慢。
2) =2時,在每個事務提交時,日誌緩衝被寫到檔案,但不對日誌檔案做到磁碟操作的重新整理。只有作業系統崩潰或掉電才會刪除最後一秒的事務,不然不會丟失事務。
3) =0時, 日誌緩衝每秒一次地被寫到日誌檔案,並且對日誌檔案做到磁碟操作的重新整理。任何mysqld程序的崩潰會刪除崩潰前最後一秒的事務
innodb_flush_method
這個引數控制著innodb資料檔案及redo og的開啟、刷寫模式,有以下3種設定:
1) 預設是fdatasync,呼叫fsync()去刷資料檔案與redo log的buffer
2) 為o_dsync時,innodb會使用o_sync方式開啟和刷寫redo log,使用fsync()刷寫資料檔案,通常比較慢。
3) 為o_direct時,innodb使用o_direct開啟資料檔案,使用fsync()刷寫資料檔案跟redo log,在linux上使用direct io,可以顯著提高速度,特別是在raid系統上,避免額外的資料複製和double buffering(mysql buffering 和os buffering)。
任何資料庫,只要涉及到持久化,就與上面這三個方面的引數有極大關係,包括nosql與記憶體資料庫,有時nosql與記憶體資料庫之所以比mysql快,與這方面的設定也有很大關係
其實,在大部分場景下,如果某個產品宣稱自己的寫讀tps超過其他儲存n倍,一般來說都是從k-v這個角度入手進行優化的,主要入手的點是樹的資料結構優化和鎖的細化,一般都能在一些特定的場景獲得5-10倍的效能提公升。
innodb_buffer_pool_size
這是innodb最重要的乙個配置引數,這個引數控制innodb本身的緩大小,也影響到,多少資料能在快取中。建議該引數的配置在物理記憶體的70%-80%之間。
innodb_io_capacity
這個引數控制innodb checkpoint時的io能力,一般可以按一塊sas 15000轉的磁碟200個計算,6塊盤的sas做的raid10這個值可以配到600即可。如果是普通的sata一塊盤只能按100算。(innodb-plugin, percona有這個引數)
innodb_log_file_size
在高寫入負載尤其是資料集很大的時候,這個值非常重要,值越高效能越好,不過可能會增加資料恢復的時候。我設定為128m。
日誌檔案:
錯誤日誌
log-error=」filename.log」
可以通過如下sql語句查詢error日誌配置路徑:
mysql> show variables like 'log_error%';
查詢日誌
引數配置:
log-output=file
general-log=1
general_log_file="filename.log"
通過sql語句查詢日誌路徑:
mysql> show variables like 'general_log%';
慢查詢日誌
引數配置
slow-query-log = 1
slow-query-log-file = /usr/loval/var/mysql/mysql-slow.log
long_query_time = 1 #設定滿請求時間
log-queries-not-using-indexes
通過sql語句查詢慢查詢日誌配置:
mysql> show variables like 'slow_query_log%';
二進位制日誌
log-bin=mysql-bin 表示啟用二進位制日誌記錄,伺服器記錄了所有改變資料語句的二進位制日誌,用於備份和複製。
binlog_format=mixed 設定binlog格式,可選如下三種:
row,日誌中會記錄成每一行資料被修改的形式,缺點是會產生大量的日誌
statement,每一條會修改資料的sql都會記錄到master的bin-log中,如果sql語句包含函式可能會導致主從資料庫的資料不一致,比如呼叫now()函式獲取時間
mixed,mysql會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在 statement和row之間選擇一種。
作業系統優化
網路優化
修改/etc/sysctl.conf檔案
1. 增加syn佇列長度:net.ipv4.tcp_max_syn_backlog = 65535
2. socket資源**優化
net.ipv4.tcp_tw_recycle = 1 處理time-wait狀態的socket快速**
net.ipv4.tcp_tw_reuse = 1 允許將處於time-wait狀態的socket重新用於新的連線
net.ipv4.tcp_fin_timeout = 30 處於fin_wait-2狀態的時間
開啟檔案數限制
通過ulimit -a檢視限制,修改/etc/security/limits.conf,增加開啟檔案控制代碼限制
* soft nofile 65536
* hard nofile 65535
參考文件
mysql常用引數優化 mysql常用優化引數
修改全站搜尋 修改my.ini my.cnf 在 mysqld 後面加入一行 ft min word len 1 然後 重啟mysql,再登入 後台 模組管理 全站搜尋 重建全文索引。記錄慢查詢sql語句,修改my.ini my.cnf 新增如下 log slow queries long quer...
mysql常見常用引數
其他常見常用引數 useperformancemonitor,userperfmon,perfmon 是否啟用效能監視,預設 false ignoreprepare 是否忽略 prepare 呼叫,預設 true useprocedurebodies,procedure bodies 是否檢查儲存過...
mysql 修改表命令 MySQL常用修改表命令
mysql常用修改表命令 1.新增字段 alter table 表名 add 欄位名 first after 列名 alter table teacher add address varchar 50 comment 位址 最後一列 alter table teacher add address v...