下文內容主要給大家帶來MySQL my.cnf配置文件詳情,這里所講到的知識,與書籍略有不同,都是億速云專業技術人員在與用戶接觸過程中,總結出來的,具有一定的經驗分享價值,希望給廣大讀者帶來幫助。
官網說:從5.7.18開始不在二進制包中提供my-default.cnf文件。參考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html 經過測試,在5.7.18版本中,使用tar.gz安裝時,也就是壓縮包解壓出來安裝這種,已經不再需要my.cnf文件也能正常運行。 my.cnf文件就是把在命令行上啟動MySQL時后面的參數用cnf文件配置好,那么下載啟動時就不再需要在命令上加如參數。 這個my.cnf文件可以是自定義位置,也可以使用如下默認的位置,只要放在默認位置,MySQL自動識別(通過deb或者APT源安裝的,初始位置在下方列表): 在Unix和類Unix系統上讀取選項文件 文件名 目的 /etc/my.cnf 全局選項 /etc/mysql/my.cnf 全局選項 SYSCONFDIR/my.cnf 全局選項 $MYSQL_HOME/my.cnf 云服務器特定選項(僅限服務器) defaults-extra-file 指定的文件 --defaults-extra-file(如果有的話) ~/.my.cnf 用戶特定的選項 ~/.mylogin.cnf 用戶特定的登錄路徑選項(僅限客戶端)
在上表中,~表示當前用戶的主目錄(的值 $HOME)。
首先它會找/etc/my.cnf 這個文件, 如果這個文件不存在,那么它接下來去找/etc/mysql/my.cnf這個文件,依此類推 以上的詳細說明可以參考官方解釋: https://dev.mysql.com/doc/refman/5.7/en/option-files.html https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html?spm=5176.7920929.0.0.42e941d6WvwfAQ#sysvar_block_encryption_modehttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#ngram_token_sizehttps://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#innodb_monitor_enablehttps://github.com/xpchild/SQL/wiki/Changes-in-AliSQL-5.6.32-(2016-09-15)#10-sql-filter 總之,無論是使用APT源安裝還是deb包安裝,或者二進制(壓縮包tar.gz)包安裝的,都可以通過my.cnf文件進行配置來達到MySQL的啟動配置及調優。 由于在5.7.18開始,二進制包不再包含示例文件my-default.cnf,所以我從5.7.17版本中提取了樣例,但是發現里面也沒有太多項配置,my-default.cnf內容如下: # For advice on how to change settings please see # # *** DO NOT EDIT THIS FILE. It‘s a template which will be copied to the # *** default location during install, and will be replaced if you # *** upgrade to a newer version of MySQL. [mysqld] # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # Remove leading # to turn on a very important data integrity option: logging # changes to the binary log between backups. # log_bin # These are commonly set, remove the # and set as required. # basedir = ..... # datadir = ..... # port = ..... # server_id = ..... # socket = ..... # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 其實,這些項都是命令行的參數,在官網上可以從這個頁面 Mysql參數優化對于新手來講,是比較難懂的東西,其實這個參數優化,是個很復雜的東西,對于不同的網站,及其在線量,訪問量,帖子數量,網絡情況,以及機器硬件配置都有關系,優化不可能一次性完成,需要不斷的觀察以及調試,才有可能得到最佳效果。 下面這個是my.cnf示例: ******************************************************* [client] default-character-set = utf8mb4 [mysql] #開啟 tab 補全 #auto-rehash default-character-set = utf8mb4 [mysqld] port=3306 basedir=/data/server/mysql57/ datadir=/data/server/mysql57/data/ socket=/data/server/mysql57/data/mysql.sock symbolic-links=0 log-error=/data/logs/mysql57/mysqld.log pid-file=/data/server/mysql57/data/mysqld57.pid # 禁用主機名解析 skip-name-resolve # 默認的數據庫引擎 default-storage-engine = InnoDB innodb-file-per-table=1innodb_force_recovery = 1#一些坑 group_concat_max_len = 10240sql_mode=expire_logs_days = 7memlock ### 字符集配置 character-set-client-handshake = FALSE character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4'### GTID server_id = 330759# 為保證 GTID 復制的穩定, 行級日志 binlog_format = row # 開啟 gtid 功能 gtid_mode = on # 保障 GTID 事務安全 # 當啟用enforce_gtid_consistency功能的時候, # MySQL只允許能夠保障事務安全, 并且能夠被日志記錄的SQL語句被執行, # 像create table ... select 和 create temporarytable語句, # 以及同時更新事務表和非事務表的SQL語句或事務都不允許執行 enforce-gtid-consistency = true# 以下兩條配置為主從切換, 數據庫高可用的必須配置 # 開啟 binlog 日志功能 log_bin = mysql57-bin # 開啟從庫更新 binlog 日志 log-slave-updates = on #slave復制進程不隨mysql啟動而啟動 skip_slave_start=1### 慢查詢日志 # 打開慢查詢日志功能 slow_query_log = 1# 超過2秒的查詢記錄下來 long_query_time = 2# 記錄下沒有使用索引的查詢 log_queries_not_using_indexes = 0slow_query_log_file =/data/logs/mysql57/slow.log #log=/data/logs/mysql57/all.log ### 自動修復 # 記錄 relay.info 到數據表中 relay_log_info_repository = TABLE # 記錄 master.info 到數據表中 master_info_repository = TABLE # 啟用 relaylog 的自動修復功能 relay_log_recovery = on # 在 SQL 線程執行完一個 relaylog 后自動刪除 relay_log_purge = 1### 數據安全性配置 # wei關閉 master 創建 function 的功能 log_bin_trust_function_creators = on # 每執行一個事務都強制寫入磁盤 sync_binlog = 1# timestamp 列如果沒有顯式定義為 not null, 則支持null屬性 # 設置 timestamp 的列值為 null, 不會被設置為 current timestamp explicit_defaults_for_timestamp=true### 優化配置 # 優化中文全文模糊索引 ft_min_word_len = 1# 默認庫名表名保存為小寫, 不區分大小寫 lower_case_table_names = 1# 單條記錄寫入最大的大小限制 # 過小可能會導致寫入(導入)數據失敗 max_allowed_packet = 256M # 半同步復制開啟 #rpl_semi_sync_master_enabled = 1#rpl_semi_sync_slave_enabled = 1# 半同步復制超時時間設置 #rpl_semi_sync_master_timeout = 1000# 復制模式(保持系統默認) #rpl_semi_sync_master_wait_point = AFTER_SYNC # 后端只要有一臺收到日志并寫入 relaylog 就算成功 #rpl_semi_sync_master_wait_slave_count = 1# 多線程復制 # 基于組提交的并行復制方式 slave_parallel_type = logical_clock #并行的SQL線程數量,此參數只有設置 1<N的情況下才會才起N個線程進行SQL重做。 #經過測試對比發現, 如果主庫的連接線程為M, 只有M < N的情況下, 備庫的延遲才可以完全避免。 slave_parallel_workers = 4### 連接數限制 max_connections = 1500# 驗證密碼超過20次拒絕連接 max_connect_errors = 200# back_log值指出在mysql暫時停止回答新請求之前的短時間內多少個請求可以被存在堆棧中 # 也就是說,如果MySql的連接數達到max_connections時,新來的請求將會被存在堆棧中 # 以等待某一連接釋放資源,該堆棧的數量即back_log,如果等待連接的數量超過back_log # 將不被授予連接資源 back_log = 500open_files_limit = 65535# 服務器關閉交互式連接前等待活動的秒數 interactive_timeout = 3600# 服務器關閉非交互連接之前等待活動的秒數 wait_timeout = 3600### 內存分配 # 指定表高速緩存的大小。每當MySQL訪問一個表時,如果在表緩沖區中還有空間 # 該表就被打開并放入其中,這樣可以更快地訪問表內容 table_open_cache = 1024# 為每個session 分配的內存, 在事務過程中用來存儲二進制日志的緩存 binlog_cache_size = 4M # 在內存的臨時表最大大小 tmp_table_size = 128M # 創建內存表的最大大小(保持系統默認, 不允許創建過大的內存表) # 如果有需求當做緩存來用, 可以適當調大此值 max_heap_table_size = 16M # 順序讀, 讀入緩沖區大小設置 # 全表掃描次數多的話, 可以調大此值 read_buffer_size = 1M # 隨機讀, 讀入緩沖區大小設置 read_rnd_buffer_size = 8M # 高并發的情況下, 需要減小此值到64K-128K sort_buffer_size = 1M # 每個查詢最大的緩存大小是1M, 最大緩存64M 數據 query_cache_size = 64M query_cache_limit = 1M # 提到 join 的效率 join_buffer_size = 16M # 線程連接重復利用 thread_cache_size = 64### InnoDB 優化 ## 內存利用方面的設置 # 數據緩沖區 innodb_buffer_pool_size=2G ## 日志方面設置 # 事務日志大小 innodb_log_file_size = 256M # 日志緩沖區大小 innodb_log_buffer_size = 4M # 事務在內存中的緩沖 innodb_log_buffer_size = 3M # 主庫保持系統默認, 事務立即寫入磁盤, 不會丟失任何一個事務 innodb_flush_log_at_trx_commit = 1# mysql 的數據文件設置, 初始100, 以10M 自動擴展 #innodb_data_file_path = ibdata1:100M:autoextend # 為提高性能, MySQL可以以循環方式將日志文件寫到多個文件 innodb_log_files_in_group = 3##其他設置 # 如果庫里的表特別多的情況,請增加此值 #innodb_open_files = 800# 為每個 InnoDB 表分配單獨的表空間 innodb_file_per_table = 1# InnoDB 使用后臺線程處理數據頁上寫 I/O(輸入)請求的數量 innodb_write_io_threads = 8# InnoDB 使用后臺線程處理數據頁上讀 I/O(輸出)請求的數量 innodb_read_io_threads = 8# 啟用單獨的線程來回收無用的數據 innodb_purge_threads = 1# 臟數據刷入磁盤(先保持系統默認, swap 過多使用時, 調小此值, 調小后, 與磁盤交互增多, 性能降低) innodb_max_dirty_pages_pct = 90# 事務等待獲取資源等待的最長時間 innodb_lock_wait_timeout = 120# 開啟 InnoDB 嚴格檢查模式, 不警告, 直接報錯 1開啟 0關閉 innodb_strict_mode=1# 允許列索引最大達到3072 innodb_large_prefix = on [mysqldump] # 開啟快速導出 quick default-character-set = utf8mb4max_allowed_packet = 256M
對于以上關于MySQL my.cnf配置文件詳情,如果大家還有更多需要了解的可以持續關注我們億速云的行業推新,如需獲取專業解答,可在官網聯系售前售后的,希望該文章可給大家帶來一定的知識更新。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。