本文更新於2020-05-30,使用MySQL 5.7,操作系統為Deepin 15.4。 配置文件 Windows下配置文件的讀取順序: %WINDIR%/my.ini C:/my.cnf INSTALL_DIR/my.ini,INSTALL_DIR為實際的安裝目錄 --defaults-extr ...
本文更新於2020-05-30,使用MySQL 5.7,操作系統為Deepin 15.4。
配置文件
Windows下配置文件的讀取順序:
- %WINDIR%/my.ini
- C:/my.cnf
- INSTALL_DIR/my.ini,INSTALL_DIR為實際的安裝目錄
- --defaults-extra-file=xxx指定的文件
Linux下配置文件的讀取順序:
- /etc/my.cnf
- INSTALL_DIR/my.cnf,INSTALL_DIR為實際的安裝目錄
- --defaults-extra-file=xxx指定的文件
- ~/.my.cnf
配置文件內容分為多個組:
- [mysql]:配置mysql客戶端工具。如default-character-set可配置預設客戶端、連接、返回結果字元集。
- [mysqld]:配置mysqld伺服器。
- [mysqldump]:配置mysqldump工具。
系統變數
關於系統變數的詳情參閱官方文檔:https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html。
關於InnoDB系統變數的詳情參閱官方文檔:https://dev.mysql.com/doc/refman/5.7/en/innodb-parameters.html。
MySQL伺服器可使用以下方式配置,各種方式的參數名相似:
- 系統變數:可使用
SHOW VARIABLES [LIKE 'name']
或SELECT @@name
查看,使用SET [GLOBAL|SESSION] [@@]name = value
設置。參數名使用“_”分隔單詞。 - 命令行參數:即mysqld的命令行參數。參數名加上“--”首碼,使用“-”分隔單詞。可通過
mysqld --help --verbose
可查看命令行參數的使用及從當前配置讀取的系統變數值。 - 配置文件:配置文件的[mysqld]組,參數名使用“-”或“_”分隔單詞。
參數值如為布爾類型,設置為0、OFF為假,1、ON為真。命令行參數和配置文件,不指定值時表示真。
系統變數 | 命令行參數 | 配置文件 | 說明 |
---|---|---|---|
autocommit | 是否自動提交事務 | ||
back_log | TCP監聽埠新連接的等待隊列大小 | ||
--binlog-do-db= | 只有指定的庫才記錄二進位日誌,可指定多次 | ||
binlog_format | --binlog-format= | 二進位日誌格式,,可為STATEMENT、ROW、MIXED | |
--binlog-ignore-db= | 只有指定的庫才不記錄二進位日誌,可指定多次 | ||
bulk_insert_buffer_size | 每個線程MyISAM批量插入的緩存區大小 | ||
character_set_client | 客戶端字元集 | ||
character_set_connection | 連接字元集,字元串常量的字元集也由此指定 | ||
character_set_database | 預設庫的字元集 | ||
character_set_results | 返回給客戶端的結果字元集 | ||
character_set_server | 伺服器字元集 | ||
collation_database | 預設庫的字元集校對規則 | ||
collation_server | 伺服器字元集校對規則 | ||
concurrent_insert | MyISAM表併發插入規則。NEVER或0不允許併發插入;AUTO或1當MyISAM表沒有空洞時,允許一個線程讀表的同時另一個線程從表尾插入;ALWAYS或2無論表有無空洞,都允許在表尾併發插入 | ||
datadir | 數據目錄。預設為/var/lib/mysql/ | ||
end_markers_in_json | 設置trace分析優化器以JSON格式輸出 | ||
event_scheduler | 是否打開事件調度器 | ||
expire_logs_days | --expire-logs-days= | 二進位日誌過期天數 | |
foreign_key_checks | 是否進行外鍵檢查 | ||
--general-log | 是否啟用查詢日誌 | ||
--general-log-file= | 查詢日誌文件名,預設為“主機名.log”,預設保存在datadir指定的目錄中 | ||
have_query_cache | 伺服器在安裝時是否已經配置高速緩存 | ||
init_file | 伺服器啟動後執行的SQL文件 | ||
innodb_buffer_pool_instances | InnoDB緩存池實例數,每個實例平分緩存池的大小 | ||
innodb_buffer_pool_size | InnoDB表數據和索引數據的最大緩存池大小 | ||
innodb_data_file_path | InnoDB共用表空間文件,格式為file_name:file_size[:autoextend[:max:max_file_size]],可以“;”分隔 | ||
innodb_data_home_dir | InnoDB共用表空間目錄 | ||
innodb_doublewrite | InnoDB是否開啟雙寫策略 | ||
innodb_file_per_table | InnoDB是否使用多表空間的存儲方式 | ||
innodb_flush_log_at_trx_commit | InnoDB事務提交時刷新日誌的規則。0在事務提交時,不會立即將緩存中的redo日誌寫到磁碟文件,而是每秒觸發一次,並調用操作系統fsync刷新IO緩存,若資料庫崩潰,數據就會丟失;1在事務提交時,立即將緩存中的redo日誌回寫到磁碟文件,並調用操作系統fsync刷新IO緩存;2在事務提交時,立即將緩存中的redo日誌回寫到磁碟文件,但並不馬上調用fsync刷新IO緩存,而是每秒觸發一次,若資料庫崩潰,只要操作系統沒有崩潰,數據就不會丟失 | ||
innodb_io_capacity | InnoDB後臺任務每秒的IO次數,包括刷新緩存池臟頁等 | ||
innodb_lock_wait_timeout | InnoDB事務等待行鎖的超時時間 | ||
innodb_locks_unsafe_for_binlog | InnoDB是否在執行INSERT INTO ... SELECT ... 和CREATE TABLE ... SELECT ... 時對源表記錄加鎖,如否則可能無法使用binlog正確恢復或複製數據 |
||
innodb_log_buffer_size | InnoDB日誌緩存池大小 | ||
innodb_log_file_size | InnoDB日誌文件大小 | ||
innodb_lru_scan_depth | InnoDB緩存池無可用數據頁時掃描LRU list尾部數據頁的個數。其後進行相關磁碟刷新操作,淘汰的頁放入free list中 | ||
innodb_max_dirty_pages_pct | InnoDB緩存池中臟頁的最大比例 | ||
innodb_old_blocks_pct | InnoDB緩存池LRU list中old sublist的比例 | ||
innodb_old_blocks_time | InnoDB緩存池LRU list中數據塊從old sublist轉移到new sublist的毫秒數 | ||
innodb_table_locks | InnoDB能否感知MySQL Server加的表級鎖,同時MySQL Server能否感知InnoDB加的行級鎖。能感知才能自動識別涉及表級鎖的死鎖 | ||
join_buffer_size | 每個線程的表連接緩存區大小 | ||
key_cache_age_threshold | MyISAM索引緩存塊由hot子表向warm子表降級的時間。對於有N個塊的索引緩存來說,如果一個在hot子表頭部的索引塊在最後N*key_cache_age_threshold/100次緩存命中未被訪問過,就會被降級到warm子表 | ||
key_cache_block_size | MyISAM索引緩存塊大小 | ||
key_cache_division_limit | MyISAM索引緩存用做warm子表的比例。預設值為100,亦即不啟用中點插入策略 | ||
key_buffer_size | MyISAM索引緩存區的大小。可使用 |
||
--local-infile | 是否允許LOAD DATA LOCAL INFILE 從客戶端本地讀取文件 |
||
log_bin | --log-bin[=] | 是否開啟二進位日誌。命令行參數可指定文件名,,預設為“主機名-bin”,預設保存在datadir指定的目錄中 | |
log_bin_basename | 二進位日誌文件名(不帶目錄,實際文件名會追加形如.000001的編號) | ||
log_bin_index | 二進位日誌文件的索引文件 | ||
log_error | --log-error[=] | 錯誤日誌文件名,預設為“主機名.err”,預設保存在datadir指定的目錄中 | |
--log-output= | 查詢日誌和慢查詢日誌的保存方式。NONE不保存,其優先順序最高;TABLE保存至表,查詢日誌保存至mysql庫general_log表,慢查詢日誌保存至msql庫slow_log表;FILE保存至文件,為預設值。可使用“,”分隔 | ||
--log-queries-not-using-indexes | 是否將不使用索引的查詢寫入慢查詢日誌 | ||
--log-slave-updates | 從庫是否寫二進位日誌。如果從庫同時也作為主庫,則需打開這個選項,還需指定--log-bin | ||
--log-slow-admin-statements | 是否將執行慢的管理語句寫入慢查詢日誌 | ||
long_query_time | 執行時間(不計入獲得鎖的時間)超過該值的查詢將寫入慢查詢日誌 | ||
low_priority_updates | 是否使MyISAM存儲引擎的寫請求比讀請求優先順序更低 | ||
lower_case_table_names | 表名大小寫規則。0磁碟存儲的表名區分大小寫,比較也區分大小寫,Linux的預設值;1磁碟存儲的表名為小寫,比較不區分大小寫,Windows的預設值;2磁碟存儲的表名區分大小寫,比較不區分大小寫,Mac的預設值 | ||
--master-connect-retry= | 從庫在與主庫的連接丟失時重試的時間間隔 | ||
max_connections | MySQL資料庫的最大連接數 | ||
max_heap_table_size | Memory存儲引擎最大的表大小 | ||
max_length_for_sort_data | 對filesort,如查詢到的欄位總大小小於該值,則使用一次掃描演算法,否則使用兩次掃描演算法 | ||
max_write_lock_count | 表級鎖獲取寫鎖的最大次數,此後會允許獲取一次讀鎖 | ||
min_examined_row_limit | 掃描記錄數不少於該值的查詢將寫入慢查詢日誌 | ||
open_files_limit | 打開的文件描述符最大數量 | ||
optimizer_trace | 優化器trace設置 | ||
optimizer_trace_max_size | 化器trace使用的最大記憶體大小 | ||
profiling | 是否打開profiling | ||
query_cahce_size | 查詢緩存大小 | ||
query_cache_type | 查詢緩存使用規則。0或OFF關閉查詢緩存;1或ON打開查詢緩存(使用SQL_NO_CACHE除外);2或DEMAND只緩存使用SQL_CACHE的查詢 | ||
read_buffer_size | MyISAM表順序讀取的緩存大小,為每個線程獨占 | ||
--read-only | 從庫是否只接受root的更新操作 | ||
read_rnd_buffer_size | MyISAM表隨機讀取的緩存大小,為每個線程獨占 | ||
--replicate-do-db= | 從庫複製的庫 | ||
--replicate-do-table= | 從庫複製的表 | ||
--replicate-ignore-db= | 從庫忽略複製的庫 | ||
--replicate-ignore-table= | 從庫忽略複製的表 | ||
--replicate-wild-go-table= | 以通配符方式指定從庫複製的表 | ||
--replicate-wild-ignore-table= | 以通配符方式指定從庫忽略複製的表 | ||
--safe-user-create | 是否不能用GRANT 創建新用戶,除非用戶有mysql庫user表的INSERT 許可權 |
||
--skip-grant-tables | 是否令伺服器跳過許可權系統的使用 | ||
--skip-networking | 是否不允許TCP/IP連接,而必須使用命名管道、共用記憶體、UNIX套接字 | ||
--skip-show-database | 是否有SHOW DATABASES 許可權的用戶才能執行且顯示所有庫名;否則所有用戶都能執行,但只顯示有許可權的庫名 |
||
--slave-skip-errors= | 複製過程中從庫可以自動跳過的錯誤號 | ||
slow_query_log | --slow-query-log | 是否啟用慢查詢日誌 | |
slow_query_log_file | --slow-query-log-file[=] | 慢查詢日誌文件名,預設為“主機名-slow.log”,預設保存在datadir指定的目錄中 | |
sort_buffer_size | 記憶體排序緩存區大小,為每個線程獨占 | ||
sql_log_bin | 是否寫入二進位日誌。具有SUPER許可權可禁止將自己的語句寫入二進位日誌 | ||
sql_log_off | 是否關閉查詢日誌,只針對當前連接 | ||
sql_mode | SQL Mode | ||
--ssl | 是否支持SSL連接。如支持SSL,還需指定--ssl-ca、--ssl-cert、--ssl-key | ||
sync_binlog | --sync-binlog= | 二進位日誌緩存刷新規則。0由文件系統控制二進位日誌緩存的刷新,大於0表示每若幹條二進位日誌刷新文件系統緩存 | |
table_open_cache | 打開並緩存的所有表數量 | ||
thread_cache_size | 緩存可重用的線程數量 | ||
tx_isolation | 事務隔離級別 | ||
unique_checks | 是否開啟唯一性檢查 |
狀態變數
關於狀態變數的概要參閱官方文檔:https://dev.mysql.com/doc/refman/5.7/en/server-status-variable-reference.html。
關於狀態變數的詳情參閱官方文檔:https://dev.mysql.com/doc/refman/5.7/en/server-status-variables.html。
狀態變數 | 說明 |
---|---|
Com_commit | 事務提交的次數 |
Com_delete | 執行DELETE的次數,不論提交還是回滾都會累加 |
Com_insert | 執行INSERT的次數,不論提交還是回滾都會累加,對批量插入的操作只累加一 |
Com_rollback | 事務回滾的次數 |
Com_select | 執行SELECT的次數,不論提交還是回滾都會累加 |
Com_update | 執行UPDATE的次數,不論提交還是回滾都會累加 |
Connection_errors_max_connections | 因為超過資料庫最大連接數而被拒絕的連接數 |
Connections | 連接伺服器的歷史總次數 |
Handler_read_key | 使用索引讀取的行數,越高表示索引越經常使用 |
Handler_read_rnd_next | 在數據文件讀下一行的次數,越高表示進行越多表掃描 |
Innodb_buffer_pool_read_requests | 從InnoDB緩存池讀取的次數 |
Innodb_buffer_pool_reads | 從磁碟讀取到InnoDB緩存池的次數 |
Innodb_buffer_pool_wait_free | Innodb的IO線程從數據文件中讀取了數據要寫入緩存池的時候,需要等待空閑頁的次數 |
InnoDB_row_lock_time_avg | InnoDB行鎖平均等待時間 |
InnoDB_row_lock_waits | InnoDB航所等待次數 |
Innodb_rows_deleted | InnoDB執行DELETE刪除的行數 |
Innodb_rows_inserted | InnoDB執行INSERT插入的行數 |
Innodb_rows_read | InnoDB執行SELECT返回的行數 |
Innodb_rows_updated | InnoDB執行UPDATE更新的行數 |
Key_blocks_unused | MyISAM未使用的索引緩存塊數 |
Key_read_requests | 從MyISAM索引緩存區讀取的次數 |
Key_reads | 從磁碟讀取至MyISAM索引緩存區的次數 |
Key_write_requests | 寫入至MyISAM索引緩存區的次數 |
Key_writes | 從MyISAM索引緩存區寫入至磁碟的次數 |
Open_tables | 打開並緩存的表數量 |
Qcache_free_blocks | 查詢緩存的空閑記憶體塊數 |
Qcache_free_memory | 查詢緩存的空閑記憶體總數 |
Qcache_hits | 查詢緩存命中數 |
Qcache_inserts | 被加入到查詢緩存中的查詢數目 |
Qcache_lowmem_prunes | 因缺少記憶體而被從查詢緩存中刪除的查詢數 |
Qcache_not_cached | 沒有被查詢緩存緩存的查詢數 |
Qcache_queries_in_cache | 查詢緩存中已註冊的查詢數目 |
Qcache_total_blocks | 查詢緩存的總記憶體塊數 |
Slow_queries | 慢查詢次數 |
Sort_merge_passes | 排序演算法進行合併的次數 |
Table_locks_immediate | 能夠立即獲得表級鎖的次數 |
Table_locks_waited | 不能立即獲取表級鎖而需要等待的次數,越高表示表級鎖爭用越嚴重 |
Threads_created | 為連接創建的線程數量 |
Uptime | 伺服器工作時長 |