溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL my.cnf配置文件詳情

發(fā)布時(shí)間:2020-04-27 11:59:51 來(lái)源:億速云 閱讀:269 作者:三月 欄目:MySQL數(shù)據(jù)庫(kù)

下文內(nèi)容主要給大家?guī)?lái)MySQL my.cnf配置文件詳情,這里所講到的知識(shí),與書籍略有不同,都是億速云專業(yè)技術(shù)人員在與用戶接觸過(guò)程中,總結(jié)出來(lái)的,具有一定的經(jīng)驗(yàn)分享價(jià)值,希望給廣大讀者帶來(lái)幫助。                                                   

官網(wǎng)說(shuō):從5.7.18開始不在二進(jìn)制包中提供my-default.cnf文件。參考:https://dev.mysql.com/doc/refman/5.7/en/binary-installation.html

經(jīng)過(guò)測(cè)試,在5.7.18版本中,使用tar.gz安裝時(shí),也就是壓縮包解壓出來(lái)安裝這種,已經(jīng)不再需要my.cnf文件也能正常運(yùn)行。

my.cnf文件就是把在命令行上啟動(dòng)MySQL時(shí)后面的參數(shù)用cnf文件配置好,那么下載啟動(dòng)時(shí)就不再需要在命令上加如參數(shù)。

這個(gè)my.cnf文件可以是自定義位置,也可以使用如下默認(rèn)的位置,只要放在默認(rèn)位置,MySQL自動(dòng)識(shí)別(通過(guò)deb或者APT源安裝的,初始位置在下方列表):
在Unix和類Unix系統(tǒng)上讀取選項(xiàng)文件
文件名                    目的
/etc/my.cnf              全局選項(xiàng)    
/etc/mysql/my.cnf        全局選項(xiàng)    
SYSCONFDIR/my.cnf        全局選項(xiàng)    
$MYSQL_HOME/my.cnf       云服務(wù)器特定選項(xiàng)(僅限服務(wù)器)    
defaults-extra-file      指定的文件 --defaults-extra-file(如果有的話)    
~/.my.cnf                用戶特定的選項(xiàng)    
~/.mylogin.cnf           用戶特定的登錄路徑選項(xiàng)(僅限客戶端)    MySQL my.cnf配置文件詳情


在上表中,~表示當(dāng)前用戶的主目錄(的值 $HOME)。

首先它會(huì)找/etc/my.cnf 這個(gè)文件, 如果這個(gè)文件不存在,那么它接下來(lái)去找/etc/mysql/my.cnf這個(gè)文件,依此類推 以上的詳細(xì)說(shuō)明可以參考官方解釋: 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 總之,無(wú)論是使用APT源安裝還是deb包安裝,或者二進(jìn)制(壓縮包tar.gz)包安裝的,都可以通過(guò)my.cnf文件進(jìn)行配置來(lái)達(dá)到MySQL的啟動(dòng)配置及調(diào)優(yōu)。 由于在5.7.18開始,二進(jìn)制包不再包含示例文件my-default.cnf,所以我從5.7.17版本中提取了樣例,但是發(fā)現(xiàn)里面也沒(méi)有太多項(xiàng)配置,my-default.cnf內(nèi)容如下: # 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  其實(shí),這些項(xiàng)都是命令行的參數(shù),在官網(wǎng)上可以從這個(gè)頁(yè)面  Mysql參數(shù)優(yōu)化對(duì)于新手來(lái)講,是比較難懂的東西,其實(shí)這個(gè)參數(shù)優(yōu)化,是個(gè)很復(fù)雜的東西,對(duì)于不同的網(wǎng)站,及其在線量,訪問(wèn)量,帖子數(shù)量,網(wǎng)絡(luò)情況,以及機(jī)器硬件配置都有關(guān)系,優(yōu)化不可能一次性完成,需要不斷的觀察以及調(diào)試,才有可能得到最佳效果。 下面這個(gè)是my.cnf示例: ******************************************************* [client] default-character-set = utf8mb4 [mysql] #開啟 tab 補(bǔ)全 #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 # 禁用主機(jī)名解析 skip-name-resolve # 默認(rèn)的數(shù)據(jù)庫(kù)引擎 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 復(fù)制的穩(wěn)定, 行級(jí)日志 binlog_format = row # 開啟 gtid 功能 gtid_mode = on # 保障 GTID 事務(wù)安全 # 當(dāng)啟用enforce_gtid_consistency功能的時(shí)候, # MySQL只允許能夠保障事務(wù)安全, 并且能夠被日志記錄的SQL語(yǔ)句被執(zhí)行, # 像create table ... select 和 create temporarytable語(yǔ)句,  # 以及同時(shí)更新事務(wù)表和非事務(wù)表的SQL語(yǔ)句或事務(wù)都不允許執(zhí)行 enforce-gtid-consistency = true# 以下兩條配置為主從切換, 數(shù)據(jù)庫(kù)高可用的必須配置 # 開啟 binlog 日志功能 log_bin = mysql57-bin  # 開啟從庫(kù)更新 binlog 日志 log-slave-updates = on #slave復(fù)制進(jìn)程不隨mysql啟動(dòng)而啟動(dòng) skip_slave_start=1### 慢查詢?nèi)罩? # 打開慢查詢?nèi)罩竟δ? slow_query_log = 1# 超過(guò)2秒的查詢記錄下來(lái) long_query_time = 2# 記錄下沒(méi)有使用索引的查詢 log_queries_not_using_indexes = 0slow_query_log_file =/data/logs/mysql57/slow.log #log=/data/logs/mysql57/all.log ### 自動(dòng)修復(fù) # 記錄 relay.info 到數(shù)據(jù)表中 relay_log_info_repository = TABLE # 記錄 master.info 到數(shù)據(jù)表中  master_info_repository = TABLE # 啟用 relaylog 的自動(dòng)修復(fù)功能 relay_log_recovery = on # 在 SQL 線程執(zhí)行完一個(gè) relaylog 后自動(dòng)刪除 relay_log_purge = 1### 數(shù)據(jù)安全性配置 # wei關(guān)閉 master 創(chuàng)建 function 的功能 log_bin_trust_function_creators = on # 每執(zhí)行一個(gè)事務(wù)都強(qiáng)制寫入磁盤 sync_binlog = 1# timestamp 列如果沒(méi)有顯式定義為 not null, 則支持null屬性 # 設(shè)置 timestamp 的列值為 null, 不會(huì)被設(shè)置為 current timestamp explicit_defaults_for_timestamp=true### 優(yōu)化配置 # 優(yōu)化中文全文模糊索引 ft_min_word_len = 1# 默認(rèn)庫(kù)名表名保存為小寫, 不區(qū)分大小寫 lower_case_table_names = 1# 單條記錄寫入最大的大小限制 # 過(guò)小可能會(huì)導(dǎo)致寫入(導(dǎo)入)數(shù)據(jù)失敗 max_allowed_packet = 256M # 半同步復(fù)制開啟 #rpl_semi_sync_master_enabled = 1#rpl_semi_sync_slave_enabled = 1# 半同步復(fù)制超時(shí)時(shí)間設(shè)置 #rpl_semi_sync_master_timeout = 1000# 復(fù)制模式(保持系統(tǒng)默認(rèn)) #rpl_semi_sync_master_wait_point = AFTER_SYNC # 后端只要有一臺(tái)收到日志并寫入 relaylog 就算成功 #rpl_semi_sync_master_wait_slave_count = 1# 多線程復(fù)制 # 基于組提交的并行復(fù)制方式 slave_parallel_type = logical_clock #并行的SQL線程數(shù)量,此參數(shù)只有設(shè)置   1<N的情況下才會(huì)才起N個(gè)線程進(jìn)行SQL重做。 #經(jīng)過(guò)測(cè)試對(duì)比發(fā)現(xiàn), 如果主庫(kù)的連接線程為M, 只有M < N的情況下, 備庫(kù)的延遲才可以完全避免。 slave_parallel_workers = 4### 連接數(shù)限制 max_connections = 1500# 驗(yàn)證密碼超過(guò)20次拒絕連接 max_connect_errors = 200# back_log值指出在mysql暫時(shí)停止回答新請(qǐng)求之前的短時(shí)間內(nèi)多少個(gè)請(qǐng)求可以被存在堆棧中 # 也就是說(shuō),如果MySql的連接數(shù)達(dá)到max_connections時(shí),新來(lái)的請(qǐng)求將會(huì)被存在堆棧中 # 以等待某一連接釋放資源,該堆棧的數(shù)量即back_log,如果等待連接的數(shù)量超過(guò)back_log # 將不被授予連接資源 back_log = 500open_files_limit = 65535# 服務(wù)器關(guān)閉交互式連接前等待活動(dòng)的秒數(shù) interactive_timeout = 3600# 服務(wù)器關(guān)閉非交互連接之前等待活動(dòng)的秒數(shù) wait_timeout = 3600### 內(nèi)存分配 # 指定表高速緩存的大小。每當(dāng)MySQL訪問(wèn)一個(gè)表時(shí),如果在表緩沖區(qū)中還有空間 # 該表就被打開并放入其中,這樣可以更快地訪問(wèn)表內(nèi)容 table_open_cache = 1024# 為每個(gè)session 分配的內(nèi)存, 在事務(wù)過(guò)程中用來(lái)存儲(chǔ)二進(jìn)制日志的緩存 binlog_cache_size = 4M # 在內(nèi)存的臨時(shí)表最大大小 tmp_table_size = 128M # 創(chuàng)建內(nèi)存表的最大大小(保持系統(tǒng)默認(rèn), 不允許創(chuàng)建過(guò)大的內(nèi)存表) # 如果有需求當(dāng)做緩存來(lái)用, 可以適當(dāng)調(diào)大此值 max_heap_table_size = 16M # 順序讀, 讀入緩沖區(qū)大小設(shè)置 # 全表掃描次數(shù)多的話, 可以調(diào)大此值 read_buffer_size = 1M # 隨機(jī)讀, 讀入緩沖區(qū)大小設(shè)置 read_rnd_buffer_size = 8M # 高并發(fā)的情況下, 需要減小此值到64K-128K sort_buffer_size = 1M # 每個(gè)查詢最大的緩存大小是1M, 最大緩存64M 數(shù)據(jù) query_cache_size = 64M query_cache_limit = 1M # 提到 join 的效率 join_buffer_size = 16M # 線程連接重復(fù)利用 thread_cache_size = 64### InnoDB 優(yōu)化 ## 內(nèi)存利用方面的設(shè)置 # 數(shù)據(jù)緩沖區(qū) innodb_buffer_pool_size=2G ## 日志方面設(shè)置 # 事務(wù)日志大小 innodb_log_file_size = 256M # 日志緩沖區(qū)大小 innodb_log_buffer_size = 4M # 事務(wù)在內(nèi)存中的緩沖 innodb_log_buffer_size = 3M # 主庫(kù)保持系統(tǒng)默認(rèn), 事務(wù)立即寫入磁盤, 不會(huì)丟失任何一個(gè)事務(wù) innodb_flush_log_at_trx_commit = 1# mysql 的數(shù)據(jù)文件設(shè)置, 初始100, 以10M 自動(dòng)擴(kuò)展 #innodb_data_file_path = ibdata1:100M:autoextend # 為提高性能, MySQL可以以循環(huán)方式將日志文件寫到多個(gè)文件 innodb_log_files_in_group = 3##其他設(shè)置 # 如果庫(kù)里的表特別多的情況,請(qǐng)?jiān)黾哟酥? #innodb_open_files = 800# 為每個(gè) InnoDB 表分配單獨(dú)的表空間 innodb_file_per_table = 1# InnoDB 使用后臺(tái)線程處理數(shù)據(jù)頁(yè)上寫 I/O(輸入)請(qǐng)求的數(shù)量 innodb_write_io_threads = 8# InnoDB 使用后臺(tái)線程處理數(shù)據(jù)頁(yè)上讀 I/O(輸出)請(qǐng)求的數(shù)量 innodb_read_io_threads = 8# 啟用單獨(dú)的線程來(lái)回收無(wú)用的數(shù)據(jù) innodb_purge_threads = 1# 臟數(shù)據(jù)刷入磁盤(先保持系統(tǒng)默認(rèn), swap 過(guò)多使用時(shí), 調(diào)小此值, 調(diào)小后, 與磁盤交互增多, 性能降低)  innodb_max_dirty_pages_pct = 90# 事務(wù)等待獲取資源等待的最長(zhǎng)時(shí)間 innodb_lock_wait_timeout = 120# 開啟 InnoDB 嚴(yán)格檢查模式, 不警告, 直接報(bào)錯(cuò) 1開啟 0關(guān)閉 innodb_strict_mode=1# 允許列索引最大達(dá)到3072  innodb_large_prefix = on [mysqldump] # 開啟快速導(dǎo)出 quick default-character-set = utf8mb4

max_allowed_packet = 256M

對(duì)于以上關(guān)于MySQL my.cnf配置文件詳情,如果大家還有更多需要了解的可以持續(xù)關(guān)注我們億速云的行業(yè)推新,如需獲取專業(yè)解答,可在官網(wǎng)聯(lián)系售前售后的,希望該文章可給大家?guī)?lái)一定的知識(shí)更新。


向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI