mysql my.cnf配置

[client]
#########################################################################
#                                                                       #
#                         MySQL客戶端配置                               #
#                                                                       #
#########################################################################
port = 3306 
# MySQL客戶端默認端口號

socket = /data/mysql/my3306/mysql.sock
# 用於本地連接的Unix套接字文件存放路徑

default-character-set = utf8mb4
# MySQL客戶端默認字符集

[mysql]
#########################################################################
#                                                                       #
#                         MySQL命令行配置                               #
#                                                                       #
#########################################################################
auto-rehash
# 開啓tab補齊功能

socket = /data/mysql/my3306/mysql.sock
# 用於本地連接的Unix套接字文件存放路徑

default-character-set = utf8mb4
# MySQL客戶端默認字符集

max_allowed_packet = 256M
# 指定在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。

[mysqld]
#########################################################################
#                                                                       #
#                         MySQL服務端配置                               #
#                                                                       #
#########################################################################

########################################
#                                      #
#               General                #
#                                      #
########################################
port = 3306
# MySQL服務端默認監聽的TCP/IP端口

socket = /data/mysql/my3306/mysql.sock
# 用於本地連接的Unix套接字文件存放路徑

pid_file = /data/mysql/my3306/mysql.pid
# 進程ID文件存放路徑

basedir = /app/mysql
# MySQL軟件安裝路徑

datadir = /data/mysql/my3306
# MySQL數據文件存放路徑

tmpdir = /data/mysql/my3306
# MySQL臨時文件存放路徑

character_set_server = utf8mb4
# MySQL服務端字符集

collation_server = utf8mb4_general_ci
# MySQL服務端校對規則

default-storage-engine = InnoDB
# 設置默認存儲引擎爲InnoDB

autocommit = OFF
# 默認爲ON,設置爲OFF,關閉事務自動提交

transaction_isolation = READ-COMMITTED
# MySQL支持4種事務隔離級別,他們分別是:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE.
# 如沒有指定,MySQL默認採用的是REPEATABLE-READ,ORACLE默認的是READ-COMMITTED

event_scheduler = ON 
# 開啓事件調度器event_scheduler

#explicit_defaults_for_timestamp = ON
# 控制TIMESTAMP數據類型的特性,默認OFF,設置爲ON,update 時timestamp列關閉自動更新。(將來會被廢棄)

lower_case_table_names = 1
# 庫名、表名是否區分大小寫。默認爲0,設置1,不區分大小寫,創建的表、數據庫都以小寫形式存放磁盤。

########################################
#                                      #
#       Network & Connection           #
#                                      #
########################################
max_connections = 1000
# MySQL允許的最大併發連接數,默認值151,如果經常出現Too Many Connections的錯誤提示,則需要增大此值。

max_user_connections = 1000
# 每個數據庫用戶的最大連接,(同一個賬號能夠同時連接到mysql服務的最大連接數),默認爲0,表示不限制。

back_log = 500
# MySQL監聽TCP端口時設置的積壓請求棧大小,默認50+(max_connections/5),最大不超過900

max_connect_errors = 10000
# 每個主機的連接請求異常中斷的最大次數。對於同一主機,如果有超出該參數值個數的中斷錯誤連接,則該主機將被禁止連接。如需對該主機進行解禁,執行:FLUSH HOST。

interactive_timeout = 28800
# 服務器關閉交互式連接前等待活動的秒數。交互式客戶端定義爲在mysql_real_connect()中使用CLIENT_INTERACTIVE選項的客戶端。默認值:28800秒(8小時)

wait_timeout = 28800
# 服務器關閉非交互連接之前等待活動的秒數。默認值:28800秒(8小時)
# 指定一個請求的最大連接時間,當MySQL連接閒置超過一定時間後將會被強行關閉。對於4GB左右內存的服務器來說,可以將其設置爲5~10。
# 如果經常出現Too Many Connections的錯誤提示,或者show processlist命令發現有大量sleep進程,則需要同時減小interactive_timeout和wait_timeout值。

connect_timeout = 28800
# 在獲取連接時,等待握手的超時秒數,只在登錄時生效。主要是爲了防止網絡不佳時應用重連導致連接數漲太快,一般默認即可。

open_files_limit = 5000
# mysqld能打開文件的最大個數,默認最小1024,如果出現too mant open files之類的就需要增大該值。

max_allowed_packet = 256M
# 指定在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲1MB,最大值是1GB,必須設置1024的倍數。

########################################
#                                      #
#          Thread & Buffer             #
#                                      #
########################################
sort_buffer_size = 2M
# 排序緩衝區大小,connection級參數,默認大小爲2MB。如果想要增加ORDER BY的速度,首先看是否可以讓MySQL使用索引,其次可以嘗試增大該值。

read_buffer_size = 160M
# 順序讀緩衝區大小,connection級參數,該參數對應的分配內存是每連接獨享。對錶進行順序掃描的請求將分配一個讀入緩衝區。

read_rnd_buffer_size = 160M
# 隨機讀緩衝區大小,connection級參數,該參數對應的分配內存是每連接獨享。默認值256KB,最大值4GB。當按任意順序讀取行時,將分配一個隨機讀緩存區。

join_buffer_size = 320M
# 聯合查詢緩衝區大小,connection級參數,該參數對應的分配內存是每連接獨享。

bulk_insert_buffer_size = 64M   
# 批量插入數據緩存大小,可以有效提高插入效率,默認爲8M

thread_cache_size = 8
# 服務器線程緩衝池中存放的最大連接線程數。默認值是8,斷開連接時如果緩存中還有空間,客戶端的線程將被放到緩存中,當線程重新被請求,將先從緩存中讀取。
# 根據物理內存設置規則如下:1G  —> 8,2G  —> 16,3G  —> 32,大於3G  —> 64

thread_stack = 256K
# 每個連接被創建時,mysql分配給它的內存。默認192KB,已滿足大部分場景,除非必要否則不要動它,可設置範圍128KB~4GB。

query_cache_type = 0
# 關閉查詢緩存

query_cache_size = 0
# 查詢緩存大小,在高併發,寫入量大的系統,建議把該功能禁掉。

query_cache_limit = 4M    
# 指定單個查詢能夠使用的緩衝區大小,缺省爲1M

tmp_table_size = 1024M
# MySQL的heap(堆積)表緩衝大小,也即內存臨時表,默認大小是 32M。如果超過該值,則會將臨時表寫入磁盤。在頻繁做很多高級 GROUP BY 查詢的DW環境,增大該值。
# 實際起限制作用的是tmp_table_size和max_heap_table_size的最小值。

max_heap_table_size = 1024M
# 用戶可以創建的內存表(memory table)的大小,這個值用來計算內存表的最大行數值。

table_definition_cache = 400
# 表定義緩存區,緩存frm文件。表定義(global)是全局的,可以被所有連接有效的共享。

table_open_cache = 1000
# 所有SQL線程可以打開表緩存的數量,緩存ibd/MYI/MYD文件。 打開的表(session級別)是每個線程,每個表使用。

table_open_cache_instances = 4
# 對table cache 能拆成的分區數,用於減少鎖競爭,最大值64.

########################################
#                                      #
#               Safety                 #
#                                      #
########################################
#sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,ONLY_FULL_GROUP_BY
sql_mode = NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER
# MySQL支持的SQL語法模式,與其他異構數據庫之間進行數據遷移時,SQL Mode組合模式會有幫助。

local_infile = OFF
# 禁用LOAD DATA LOCAL命令

plugin-load = validate_password.so
# 加密認證插件,強制mysql設置複雜密碼

skip-external-locking
#skip-locking 
# 避免MySQL的外部鎖定,減少出錯機率,增強穩定性。

skip-name-resolve 
# 禁止MySQL對外部連接進行DNS解析,消除MySQL進行DNS解析。如果開啓該選項,所有遠程主機連接授權都要使用IP地址方式,否則MySQL將無法正常處理連接請求!

#skip-networking 
# 不允許CP/IP連接,只能通過命名管道(Named Pipes)、共享內存(Shared Memory)或Unix套接字(Socket)文件連接。
# 如果Web服務器以遠程連接方式訪問MySQL數據庫服務器,則不要開啓該選項,否則無法正常連接!
# 適合應用和數據庫共用一臺服務器的情況,其他客戶端無法通過網絡遠程訪問數據庫

########################################
#                                      #
#                 Logs                 #
#                                      #
########################################
###################   General Log  ######################
general_log = OFF
# 關閉通用查詢日誌

general_log_file = /data/mysql/my3306/general.log
# 通用查詢日誌存放路徑

###################     Slow Log   ######################
slow_query_log = ON
# 開啓慢查詢日誌

slow_query_log_file = /data/mysql/my3306/slow.log
# 慢查詢日誌存放路徑

long_query_time = 10
# 超過10秒的查詢,記錄到慢查詢日誌,默認值10

log_queries_not_using_indexes = ON
# 沒有使用索引的查詢,記錄到慢查詢日誌,可能引起慢查詢日誌快速增長

log_slow_admin_statements = ON
# 執行緩慢的管理語句,記錄到慢查詢日誌
# 例如 ALTER TABLE, ANALYZE TABLE, CHECK TABLE, CREATE INDEX, DROP INDEX, OPTIMIZE TABLE, and REPAIR TABLE.

###################     Error Log   ####################
log_error = /data/mysql/my3306/error.log
# 錯誤日誌存放路徑

log_error_verbosity = 2
# 全局動態變量,默認3,範圍:1~3
# 表示錯誤日誌記錄的信息,1:只記錄error信息;2:記錄error和warnings信息;3:記錄error、warnings和普通的notes信息

########################################
#                                      #
#           Replication                #
#                                      #
########################################

###################     Bin Log    ######################
server_id = 6
# 數據庫服務器ID

log_bin = /data/mysql/my3306/binlog
# 二進制日誌存放路徑

log_bin_index = /data/mysql/my3306/binlog.index
# 同binlog,定義binlog的位置和名稱

binlog_format = row
# binlog格式,複製有3種模式STATEMENT,ROW,MIXED

expire_logs_days = 10
# 只保留最近10天的binlog日誌

max_binlog_size = 50M
# 每個binlog日誌文件的最大容量

binlog_cache_size = 2M
# 每個session分配的binlog緩存大小
# 事務提交前產生的日誌,記錄到Cache中;事務提交後,則把日誌持久化到磁盤

log_slave_updates = ON
# 開啓log_slave_updates,從庫的更新操作記錄進binlog日誌

sync_binlog = 1
# sync_binlog=0(默認),事務提交後MySQL不刷新binlog_cache到磁盤,而讓Filesystem自行決定,或者cache滿了才同步。
# sync_binlog=n,每進行n次事務提交之後,MySQL將binlog_cache中的數據強制寫入磁盤。

binlog_rows_query_log_events = ON
# 將row模式下的sql語句,記錄到binlog日誌,默認是0(off)

###################     Relay Log  ######################
relay_log = /data/mysql/my3306/relaylog
# 中繼日誌存放路徑

relay_log_index = /data/mysql/my3306/relaylog.index
# 同relay_log,定義relay_log的位置和名稱

#binlog_checksum = CRC32
# Session-Thread把Event寫到Binlog時,生成checksum。默認爲(NONE),兼容舊版本mysql。

master_verify_checksum = ON
# Dump-Thread讀Binlog中的Event時,驗證checksum

slave_sql_verify_checksum = ON
# 從庫的I/O-Thread把Event寫入Relaylog時,生成checksum;從庫的SQL-Thread從Relaylog讀Event時,驗證checksum

master_info_repository = TABLE
relay_log_info_repository = TABLE
# 將master.info和relay.info保存在表中,默認是Myisam引擎,官方建議改爲Innodb引擎,防止表損壞後自行修復。 

relay_log_purge = ON 
relay_log_recovery = ON
# 啓用relaylog的自動修復功能,避免由於網絡之類的外因造成日誌損壞,主從停止。

skip_slave_start = OFF
# 重啓數據庫,複製進程默認不啓動

slave_net_timeout = 5
# 當master和slave之間的網絡中斷,slave的I/O-Thread等待5秒,重連master

sync_master_info = 10000
# slave更新mysql.slave_master_info表的時間間隔

sync_relay_log = 10000
sync_relay_log_info = 10000
# slave更新mysql.slave_relay_log_info表的時間間隔

gtid_mode = ON
enforce_gtid_consistency = ON
# GTID即全局事務ID(global transaction identifier),GTID由UUID+TID組成的。
# UUID是一個MySQL實例的唯一標識,TID代表了該實例上已經提交的事務數量,並且隨着事務提交單調遞增。
# GTID能夠保證每個MySQL實例事務的執行(不會重複執行同一個事務,並且會補全沒有執行的事務)。下面是一個GTID的具體形式:
# 4e659069-3cd8-11e5-9a49-001c4270714e:1-77

auto_increment_offset  = 1
# 雙主複製中,2臺服務器的自增長字段初值分別配置爲1和2,取值範圍是1 .. 65535

auto_increment_increment = 2
# 雙主複製中,2臺服務器的自增長字段的每次遞增值都配置爲2,其默認值是1,取值範圍是1 .. 65535

########################################
#                                      #
#                InnoDB                #
#                                      #
########################################

innodb_data_home_dir = /data/mysql/my3306
# innodb表的數據文件目錄

innodb_file_per_table = ON
# 使用獨立表空間管理

innodb_data_file_path = ibdata1:1G:autoextend
# InnoDB共享表空間磁盤文件,存放數據字典、和在線重做日誌

innodb_log_group_home_dir = /data/mysql/my3306
# 在事務被提交併寫入到表空間磁盤文件上之前,事務數據存儲在InnoDB的redo日誌文件裏。這些日誌位於innodb_log_group_home_dir變量定義的目錄中

innodb_buffer_pool_size = 2G
# InnoDB用於緩存數據、索引、鎖、插入緩衝、數據字典的緩衝池。該值越大,緩存命中率越高,但是過大會導致頁交換。

innodb_buffer_pool_instances = 8
# 開啓8個內存緩衝池,把需要緩衝的數據hash到不同的緩衝池中,這樣可以並行的內存讀寫,降低併發導致的內部緩存訪問衝突。
# InnoDB緩存系統會把參數innodb_buffer_pool_size指定大小的緩存,平分爲innodb_buffer_pool_instances個buffer_pool

#innodb_additional_mem_pool_size = 16M
# InnoDB存儲數據字典、內部數據結構的緩衝池大小,類似於Oracle的library cache

innodb_log_file_size = 256M
# InnoDB redo log大小,對應於ib_logfile0文件。
# ib_logfile* 是Innodb多版本緩衝的一個保證,該日誌記錄redo、undo信息,即commit之前的數據,用於rollback操作。
# 官方文檔的建議設置是innodb_log_file_size = innodb_buffer_pool_size/innodb_log_files_in_group

innodb_log_buffer_size = 64M
# redo日誌所用的內存緩衝區大小

innodb_log_files_in_group = 4
# redo日誌文件數,默認值爲2,日誌是以順序的方式寫入。

innodb_max_dirty_pages_pct = 90
# 緩存池中髒頁的最大比例,默認值是75%,如果髒頁的數量達到或超過該值,InnoDB的後臺線程將開始緩存刷新。
# “緩存刷新”是指InnoDB在找不到乾淨的可用緩存頁或檢查點被觸發等情況下,InnoDB的後臺線程就開始把“髒的緩存頁”回寫到磁盤文件中。

innodb_flush_log_at_trx_commit = 1
#設置爲0 ,每秒 write cache & flush disk
#設置爲1 ,每次commit都 write cache & flush disk
#設置爲2 ,每次commit都 write cache,然後根據innodb_flush_log_at_timeout(默認爲1s)時間 flush disk

innodb_lock_wait_timeout = 10
# InnoDB 有其內置的死鎖檢測機制,能導致未完成的事務回滾。但是,如果結合InnoDB使用MyISAM的lock tables語句或第三方事務引擎,則InnoDB無法識別死鎖。
# 爲消除這種可能性,可以將innodb_lock_wait_timeout設置爲一個整數值,指示MySQL在允許其他事務修改那些最終受事務回滾的數據之前要等待多長時間(秒數)。

innodb_sync_spin_loops = 40
# 自旋鎖的輪轉數,可以通過show engine innodb status來查看。
# 如果看到大量的自旋等待和自旋輪轉,則它浪費了很多cpu資源。浪費cpu時間和無謂的上下文切換之間可以通過該值來平衡。

innodb_support_xa = ON
# 第一,支持多實例分佈式事務(外部xa事務),這個一般在分佈式數據庫環境中用得較多。
# 第二,支持內部xa事務,即支持binlog與innodb redo log之間數據一致性。

#innodb_file_format = barracuda
# InnoDB文件格式,Antelope是innodb-base的文件格式,Barracude是innodb-plugin後引入的文件格式,同時Barracude也支持Antelope文件格式。

innodb_flush_method = O_DIRECT
# 設置innodb數據文件及redo log的打開、刷寫模式,fdatasync(默認),O_DSYNC,O_DIRECT
# 默認是fdatasync,調用fsync()去刷數據文件與redo log的buffer
# 設置爲爲O_DSYNC時,innodb會使用O_SYNC方式打開和刷寫redo log,使用fsync()刷寫數據文件
# 設置爲O_DIRECT時,innodb使用O_DIRECT打開數據文件,使用fsync()刷寫數據文件跟redo log

innodb_strict_mode = ON
# 開啓InnoDB嚴格檢查模式,在某些情況下返回errors而不是warnings,默認值是OFF

innodb_checksum_algorithm = strict_crc32
# checksum函數的算法,默認爲crc32。可以設置的值有:innodb、crc32、none、strict_innodb、strict_crc32、strict_none

innodb_status_file = 1
# 啓用InnoDB的status file,便於管理員查看以及監控

innodb_open_files = 3000
# 限制Innodb能打開的表的數據,默認爲300,數據庫裏的表特別多的情況,可以適當增大爲1000。  

innodb_thread_concurrency = 8
# 同時在Innodb內核中處理的線程數量。服務器有幾個CPU就設置爲幾,建議默認值。

innodb_thread_sleep_delay = 500

#innodb_file_io_threads = 16
# 文件讀寫I/O數,這個參數只在Windows上起作用。在LINUX上只會等於4,默認即可。

innodb_read_io_threads = 16
# 設置read thread(讀線程個數,默認是4個)

innodb_write_io_threads = 16
# 設置write thread(寫線程個數,默認是4個)

innodb_io_capacity = 2000
# 磁盤io的吞吐量,默認值是200.對於刷新到磁盤頁的數量,會按照inodb_io_capacity的百分比來進行控制。

log_bin_trust_function_creators = 1                   
# 開啓log-bin後可以隨意創建function,存在潛在的數據安全問題。

innodb_purge_threads = 1
# 使用獨立線程進行purge操作。
# 每次DML操作都會生成Undo頁,系統需要定期對這些undo頁進行清理,這稱爲purge操作。

innodb_purge_batch_size = 32
# 在進行full purge時,回收Undo頁的個數,默認是20,可以適當加大。

innodb_old_blocks_pct = 75
# LRU算法,默認值是37,插入到LRU列表端的37%,差不多3/8的位置。
# innodb把midpoint之後的列表稱爲old列表,之前的列表稱爲new列表,可以理解爲new列表中的頁都是最爲活躍的熱點數據。

innodb_change_buffering = all
# 用來開啓各種Buffer的選項。該參數可選的值爲:inserts、deletes、purges、changes、all、none。
# changes表示啓用inserts和deletes,all表示啓用所有,none表示都不啓用。該參數默認值爲all。

[mysqldump]                        
max_allowed_packet = 256M

quick
# mysqldump導出大表時很有用,強制從服務器查詢取得記錄直接輸出,而不是取得所有記錄後將它們緩存到內存中。

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
#ledir = /app/mysql/bin
# 包含mysqld程序的軟件安裝路徑,用該選項來顯式表示服務器位置。

查詢innodb分配資源

mysql> show engine innodb status;

----------------------

BUFFER POOL AND MEMORY

----------------------

Total memory allocated 137363456; in additional pool allocated 0

Dictionary memory allocated 59957

Buffer pool size   8191

Free buffers       8028

Database pages     163

Old database pages 0

Modified db pages  0

Pending reads 0

Pending writes: LRU 0, flush list 0, single page 0

Pages made young 0, not young 0

0.00 youngs/s, 0.00 non-youngs/s

Pages read 163, created 0, written 1

0.00 reads/s, 0.00 creates/s, 0.00 writes/s

No buffer pool page gets since the last printout

Pages read ahead 0.00/s, evicted without access 0.00/s, Random read ahead 0.00/s

LRU len: 163, unzip_LRU len: 0

I/O sum[0]:cur[0], unzip sum[0]:cur[0]

 

 

 

我們使用的是專用於MySQL的(5.5 Percona的)上運行CentOS的(不同口味),主要128GB的服務器。我們innodb_buffer_pool_size設置爲104GB這些和他們也有/ tmp目錄8GB的內存磁盤。他們被大量使用,但從未使用過任何的交換。當然vm.swappiness設置爲1,

下面就是我們用較低層的服務器(包括128GB爲簡潔起見),他們又從來沒有使用過任何掉期和運行大型數據庫(2-3TB):

128GB RAM:innodb_buffer_pool_size = 104GB

64GB RAM:innodb_buffer_pool_size = 56G

32GB RAM:innodb_buffer_pool_size = 28G

 

在大多數情況下,我們分配(N - 7G)* 0.9。所以對於一個64G的節點,我們最終分配給緩衝池內存〜51G

64GB RAM:innodb_buffer_pool_size = 51G

 

https://www.percona.com/blog/2015/06/02/80-ram-tune-innodb_buffer_pool_size/ 

http://osxr.org:8080/mysql/ident?_i=back_log&_remember=1 

 

 

MySQL優化

log_error = localhost3306.err

sync_binlog=1

innodb_old_blocks_time =1000

innodb_flush_method = O_DIRECT

back_log=1000

max_connections = 2000

max_user_connections=2000

min_examined_row_limit =5

skip-slave-start

skip-name-resolve

max_connect_errors = 100000

character-set-server=utf8

collation-server=utf8_bin

binlog_cache_size=32M

query_cache_limit = 2M

tmp_table_size=256M

max_heap_table_size=256M

interactive_timeout=360

wait_timeout=360

log_slave_updates=1

expire_logs_days=60

binlog_format=mixed

tmpdir=/dev/shm

innodb_autoextend_increment = 256

innodb_buffer_pool_instances=8

innodb_additional_mem_pool_size=128M

innodb_max_dirty_pages_pct=80

innodb_read_io_threads = 8

innodb_write_io_threads = 8

innodb_log_file_size = 1G

innodb_log_files_in_group = 2

innodb_flush_log_at_trx_commit = 2

innodb_file_per_table=1

轉自:https://blog.csdn.net/liberty12345678/article/details/81974664

https://www.cnblogs.com/sunmmi/articles/6809765.html

希望此文能夠幫助到您!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章