1. 程式人生 > >mysql-5.7 配置文件 參數優化

mysql-5.7 配置文件 參數優化

sub 根據 大表 ati 外部連接 mode events 更新mysql info

2017-12-25

### AUTHOR: cenliang
### DATE: 2017/12/25
### REV: 2.0

[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,範圍:13 # 表示錯誤日誌記錄的信息,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程序的軟件安裝路徑,用該選項來顯式表示服務器位置。

mysql-5.7 配置文件 參數優化