my.cnf_For5.7_註釋版

##introduce
## This my.cnf  for MySQL 5.7
## Server configure is CPU 40C,MEM 256G ,Disk SSD + HHD. U should modify this cnf according to your configure.
## By aijie@jd.com


#適用於全部客戶端程序讀取
[client]
port                    = 3306
socket                  = /ssd_data/mysql/data/mysql.sock


#適用於mysql客戶端程序
[mysql]
no_auto_rehash                                          # 當表多時,自動避免收集不少元數據信息,不能自動補全
prompt                  = "\\R:\\m:\\s\\d>"            #H:M:S:DB
pager                  = "more"            
default-character-set  = utf8mb4          


[mysqld_safe]          
malloc-lib=tcmalloc                                    # 使用tcmalloc的內存管理機制避免表多致使的information_schema庫引發的OOM問題


[mysqldump]        
quick                                                  #備份時逐行讀取表而非一次所有行後緩衝在內存中,大表有效
single-transaction                                      # 一致性備份


#適用於 mysqld 服務器
[mysqld]

##BASE_SETTING##

port                    = 3306
socket                  = /ssd_data/mysql/data/mysql.sock
server-id              = 171109
report_host            = 10.17.1.109                  # show slave status 中主機IP
basedir                = /ssd_data/mysql  
datadir                = /ssd_data/mysql/data  
tmpdir                  = /data/mysql/mysql_tmp 
user                    = mysql                        # 爲避免用戶--user=root向my.cnf文件添加選項
ssl-mode                = disabled
innodb_file_per_table  = 1                            # 獨立表空間
lower_case_table_names  = 1                            # 不區分大小寫,庫名、表名、表別名、變量名將以小寫處理
skip_external_locking  = 1                            # 默認禁用外部(系統)鎖,隻影響MyiSAM表訪問,不然容易死鎖
character_set_server    = utf8mb4                                      
collation_server        = utf8mb4_bin          
transaction-isolation  = READ-COMMITTED                # 設置RC隔離級別
sysdate-is-now                                          # SYSDATE()默認狀況下返回它執行的時間,而不是它開始執行的語句的時間。
sql_mode                = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION"      # 老業務就按之前的配
#sql_mode              = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
#explicit_defaults_for_timestamp = 1                    # 明確timestamp默認值,新業務啓用,老業務繼承
#optimizer_switch      = 'index_merge= off'            


##CONNECTION##
interactive_timeout                = 1800              # 影響 wait_timeout參數
wait_timeout                        = 1800              # 服務器在關閉以前等待非交互式鏈接上的活動的秒數,默認28800
lock_wait_timeout                  = 1800              # 指定嘗試獲取元數據鎖定的超時時間
skip_name_resolve                  = 1                # 不解析客戶端鏈接主機名,,受權表只用IP地址或localhost
max_connections                    = 1500              # 最大鏈接數
max_allowed_packet                  = 64M              # 數據包最大大小
#max_user_connections                = 256              # 同一用戶最大鏈接數,適合於so的多源從庫
max_connect_errors                  = 1000000


##ENGINE##
default_storage_engine              = InnoDB            # 默認存儲引擎,默認innodb
disabled_storage_engines            = ARCHIVE,BLACKHOLE,EXAMPLE,FEDERATED,MEMORY,MERGE,NDB  #禁用其餘存儲引擎
innodb_page_size                    = 16384
innodb_buffer_pool_size            = 160G              # buffer pool大小
innodb_buffer_pool_instances        = 16                # 將緩衝池劃分區域,較少池內爭用
innodb_buffer_pool_load_at_startup  = 1                # MySQL服務器關閉時記錄InnoDB 緩衝池中緩存的頁面 
innodb_buffer_pool_dump_at_shutdown = 1                # MySQL服務器啓動時加載緩存的Innodb頁面
innodb_flush_log_at_trx_commit      = 1                # 默認1,0提交時不寫日誌,每秒寫日誌且刷盤,1提交時寫日誌並刷盤,2提交時寫日誌,每秒刷盤
innodb_max_dirty_pages_pct          = 75                # 髒頁比例
innodb_lru_scan_depth              = 4096              # lru掃描力度
innodb_lock_wait_timeout            = 5                # 行鎖等待時間,默認50s,等待超時當前語句回滾而事務不會滾
innodb_data_file_path              = ibdata1:1G:autoextend # 共享表空間數目和大小
innodb_undo_tablespaces            = 3                # 5.7.21棄用
innodb_undo_logs                    = 128              # undo 段
innodb_undo_log_truncate            = 1                # 開啓undo清理
innodb_max_undo_log_size            = 3G                # undo清理閾值
innodb_purge_rseg_truncate_frequency= 128              # 默認128,清理undo log頻率
innodb_log_files_in_group          = 3                # redo log文件個數
innodb_log_file_size                = 8G                # redo log文件大小
innodb_log_buffer_size              = 64M              # 日誌緩衝區
innodb_io_capacity                  = 4000              # IO性能,SSD raid10在2w 
innodb_io_capacity_max              = 8000              # IO 最大性能
innodb_flush_method                = O_DIRECT          # 默認null,使用O_DIRECT打開數據文件,並fsync刷新數據
innodb_large_prefix                = 1                # InnoDB使用DYNAMIC 或 COMPRESSED 行格式的表 ,索引鍵前綴長度超過767個字節
innodb_print_all_deadlocks          = 1                # 默認1,將死鎖信息打印到error log
innodb_sort_buffer_size            = 32M              # 用於在建立InnoDB索引期間對數據進行排序的排序緩衝區的大小
innodb_thread_concurrency          = 48                # Innodb嘗試保持小於此值得線程數,超過將處於擱置等待狀態
innodb_purge_threads                = 4                # purge線程數目,默認4,減小內部徵用,提升多表DML操做效率
innodb_read_io_threads              = 20                # 讀線程數目
innodb-write-io-threads            = 20                # 寫線程數目
innodb_stats_persistent_sample_pages= 64                # 默認20,統計信息抽樣的索引頁的數量,增大提升explain準確性
innodb_autoinc_lock_mode            = 2                # 自增鎖鎖定模式,默認1對於insert bluk持有讀取執行釋放,2持有讀取釋放執行sql
innodb_online_alter_log_max_size    = 1G                # 默認128M,DDL期間臨時日誌文件大小
innodb_open_files                  = 4096              # 一次能夠保持打開最大ibd文件數量
innodb_stats_on_metadata            = 0                # 默認0,保持禁用提升具備大量數據表或索引的訪問速度
loose_innodb_numa_interleave        = 1                #V5.7.9需在numa開啓的linux編譯MySQL
innodb_buffer_pool_dump_pct        = 40
innodb_page_cleaners                = 20
#innodb_strict_mode                = 1                # 啓用Innodb嚴格模式,返回錯誤而不是警告,新業務開啓


##REPLICATION##
relay_log_info_repository          = TABLE            # 將複製信息存於表中,更安全和容易讀取
master_info_repository              = TABLE    
sync_binlog                        = 1    
relay_log                          = /data/mysql/mysql_relay  # 設置relay log名稱,放在HHD,刷盤不影響SSD性能
relay_log_recovery                  = 1                # 開啓新中繼日誌,從SQL執行位置從新拉取,清理老relay log
sync_relay_log                      = 1                # relay log的刷盤方式,0依賴OS,n,n個事件寫入relay log後刷盤
relay_log_purge                    = 1                # relay log 的清理,否則relay_log_recovery不生效
read_only                          = 0        
skip_slave_start                    = 1                # 避免從庫slave線程自動啓動
slave_net_timeout                  = 3600              # 主從斷開後,從庫從新鏈接主庫等待事件
#slave-rows-search-algorithms      = 'INDEX_SCAN,HASH_SCAN'


##parallel##
slave_parallel_type                = LOGICAL_CLOCK    #基於組提交的並行複製方式
slave_parallel_workers              = 16                # 16個併發線程
#slave_preserve_commit_order        = 1                #和主句的提交順序相同
#slave_transaction_retries          = 128              #並行意味着有鎖的問題,鎖超時以後,事物回滾前,嘗試再次執行128次


##GTID##
#gtid_mode                          = ON                # 開啓GTID
#enforce_gtid_consistency          = 1                # GTID強一致
#binlog_gtid_simple_recovery        = 1                # 5.7.7 以後默認值爲on,只從最新的最老的binlogflie中計算獲得gtid_purged and gtid_executed的值。
#gtid-executed-compression-period  = 1000              #默認1000,gtid_execute壓縮週期


##SEMISYNC##
#plugin_load = "rpl_semi_sync_master= semisync_master.so;rpl_semi_sync_slave= #semisync_slave.so" 
#rpl_semi_sync_master_wait_point    = AFTER_SYNC        #5.7默認模式,5.6AFTER_COMMIT
#rpl_semi_sync_master_enabled      = 1                # 啓用主庫半同步插件
#rpl_semi_sync_slave_enabled        = 0                # 啓用從庫半同步插件
#rpl_semi_sync_master_timeout      = 300000            # 從半同步轉爲異步超時時間,單位ms5min
#rpl_semi_sync_master_wait_no_slave = 1                # 默認1,表示從庫數目低於rpl_semi_sync_master_wait_for_slave_count 主庫不等待
#rpl_semi_sync_master_wait_for_slave_count  = 1        # N個slave接收到relay log 發回ack的個數


##REPLICATION_FILTER##
replicate-do-db                    = so1                      # 複製過濾,只複製哪一個DB,多庫寫多條
replicate-do-db                    = so2
replicate-do-db                    = so3
replicate-do-db                    = so4
replicate-do-db                    = so5
replicate-do-db                    = so6
replicate-ignore-table              = so1.so_item_history_bak  # 複製過濾,複製忽略哪一個表,多表多條
replicate-ignore-table              = so1.so_history_bak
replicate-ignore-table              = so1.so_item_history_bak
replicate-ignore-table              = so1.so_history_bak
replicate-ignore-table              = so1.so_item_history_bak
replicate-ignore-table              = so1.so_history_bak
replicate-ignore-table              = so1.so_item_history_bak
replicate-ignore-table              = so1.so_history_bak
replicate-ignore-table              = so1.so_item_history_bak
replicate-ignore-table              = so1.so_history_bak
replicate-ignore-table              = so1.so_item_history_bak
replicate-ignore-table              = so1.so_history_bak


##新增PS參數##

#配置一個mem計數工具,控制PS庫使用的內存上線以及SQL的顯示寬度#
performance-schema-instrument          ='memory/%=COUNTED'    
performance_schema_digests_size        = 40000
performance_schema_max_table_instances  = 40000
performance_schema_max_sql_text_length  = 4096
performance_schema_max_digest_length    = 4096


##CACHE##
key_buffer_size                    = 1G                # MyiSAM索引塊緩衝,全部線程共享
myisam_sort_buffer_size            = 128M              # MyiSAM表:REPAIR TABLE對索引排序、Create index、Alter index時的緩衝區                  
max_heap_table_size                = 64M              # 新建MEMORY表容許增加的最大大小 


##TABLE_CACHE_PERFORMANCE_SETTINGS##            
open_files_limit                    = 65535            # 操做系統容許mysqld打開的文件數量 
table_open_cache                    = 4096              # 默認2000,全部線程的打開表的數量                                                                    
                                                        # 若是值Opened_tables較大,應增長此值,參考值max_connections*查詢用到表數
table_definition_cache              = 4096              # frm表可被緩存數量。400+(table_open_cache / 2),上限2000
table_open_cache_instances          = 64                # 打開表緩存實例的數量,減小爭用


# session memory settings #            
read_buffer_size                    = 16M                # 線程爲順序掃描的MyiSAM表分配的緩衝區
read_rnd_buffer_size                = 32M                # MyiSAM表讀取數據緩衝區
sort_buffer_size                    = 32M                # 會話級別排序緩衝區
tmp_table_size                      = 64M                # 內存臨時表的大小tmp_table_size和max_heap_table_size中較小決定  
join_buffer_size                    = 128M              # 會話級別錶鏈接的空間
thread_cache_size                  = 64                # 應緩存多少線程複用,當線程數小於此值就會被緩存


# log settings #
##Error log##
log_error                          = error.log
log_error_verbosity                = 2                # 5.7.2 添加優先於log-warnings,記錄錯誤一、警告二、註釋3

##binlog##
log-bin                            = /ssd_data/mysql/arch/mysql-bin
binlog_rows_query_log_events        = 1                # 在binlog中記錄原生SQL
log_bin_trust_function_creators    = 1                # 默認關閉,將function寫入binlog,避免默認狀況下回阻止function的建立
binlog_format                      = row              # 行模式複製
max_binlog_size                    = 1G                # binlog文件大小
binlog_error_action                = ABORT_SERVER      # 默認ABORT_SERVER,當沒法寫入刷新同步二進制日誌時,關閉二進制日誌,建議support_xa開啓
#expire_logs_days                  = 90                # 使用腳本進行刪除
#log_slave_updates                  = 1                # 執行relay log,並生成binlog,用於級聯
    
##log format##
log-output                          = TABLE,FILE        # slow log 和general log 的輸出方式, 須要啓用general_log_file和 slow_query_log_file
general_log_file                    = general.log  
log_timestamps                      = system            # 默認UTC,控制寫入錯誤日誌的消息中的時間戳的時區                                                
    
##Slow log##
slow_query_log                      = 1                # 開啓慢查詢
slow_query_log_file                = slow.log          # 慢查詢日誌名稱
log_throttle_queries_not_using_indexes = 10            # 限制每分鐘10條not_using_indexes
log_queries_not_using_indexes      = 1                # 記錄不使用索引的SQL到慢日誌
long_query_time                    = 2                # 慢查詢時間閾值
log_slow_admin_statements          = 1                # 記錄管理性慢語句
log_slow_slave_statements          = 1                # 在slave記錄超過long_query_time到從庫慢日誌
min_examined_row_limit              = 100              # 檢查少於此行數的查詢不會記錄到慢速查詢日誌中。
    
        
#CLIENT_DEPRECATE_EOF  
session_track_schema                = 1                # 是否跟蹤當前會話中對默認模式(數據庫)名稱的更改,並在發生更改時使此信息可供客戶端使用
session_track_state_change          = 1                # 控制服務器是否跟蹤對當前會話狀態的更改,並在更改時通知客戶端
#session_track_system_variables    = '*'              # 控制服務器是否跟蹤對會話系統變量的更改,並在發生更改時將此信息提供給客戶端



##MGR_Setting##
#plugin-load                            = "group_replication.so;"      # validate_password.so
#loose_group_replication_start_on_boot  = 0                            # 在mysqld啓動時不自動啓動組複製
#group_replication_single_primary_mode  = off                          # 默認單主模式,單主仍是多主模式
#binlog_checksum                        = NONE                          # 默認CRC32,only for group replication,
#transaction-write-set-extraction      = XXHASH64                      # MGR中開啓主鍵信息採集功能
#loose_group_replication                = FORCE_PLUS_PERMANENT
#loose_group_replication_group_name    = "aaaa-aaaa-aaaa-aaaa-aaaa"    # 此服務器實例所屬的組的名稱。必須是有效的UUID
#loose-group_replication_local_address  = 'node2:33061'                # 本地成員的地址,node2+port,節點之間經過這個端口號進行通訊
#loose-group_replication_group_seeds = "127.0.0.1:24901,127.0.0.1:24902,127.0.0.1:24903"  

#loose_group_replication_compression_threshold      = 100
#loose_group_replication_flow_control_mode          = 0
#loose_group_replication_single_primary_mode        = 0
#loose_group_replication_transaction_size_limit    = 10485760
#loose_group_replication_enforce_update_everywhere_checks  = 1        #單主關閉,多主開啓,多主模式限制檢測
#loose_group_replication_unreachable_majority_timeout      = 120


## 棄用##
#innodb_locks_unsafe_for_binlog                        # 5.6.3棄用
#metadata_locks_cache_size                              # 5.7.4 MDL鎖定實現變化棄用
#metadata_locks_hash_instances      = 64                # 5.7.4棄用
#innodb_support_xa                                      # 5.7.10 棄用
#query_cache_size                  = 0                # 查詢緩存大小
#query_cache_type                  = 0                # MySQL 5.7.20棄用。0不緩存結果,關閉查詢緩存,1全開,2部分開


#MyISAM表維護實用程序
[myisamchk]
key_buffer_size                    = 20M
sort_buffer_size                    = 20M
read_buffer                        = 2M
write_buffer                        = 2M

部分選項詳細解釋node

binlog_error_action= ABORT_SERVER  
-- 在MySQL 5.7.7和更高版本中,這個變量默認爲 ABORT_SERVER,這會使服務器中止日誌記錄,並在二進制日誌遇到這樣的錯誤時關閉。在服務器從新啓動時,全部先前準備好的和二進制記錄的事務都被提交,而任何已準備好但沒有因爲錯誤而被二進制記錄的事務被停止。
-- 應該配合xa參數

binlog_rows_query_log_events= 1  --將原生SQL以註釋方式寫入

master-info-repository=TABLE 
relay-log-info-repository=TABLE
    當從庫意外中止後,從新啓動須要一些信息:I/O線程接收到多少事務,SQL線程執行了哪些事務,默認這些信息存儲在file中,但這樣有由於從庫執行事務不一樣階段失去和主機同步的風險,甚至文件損壞等狀況。
    設置 relay_log_info_repository和 master_info_repository到 TABLE。
    服務器將在mysql.slave_master_info表中恢復I / O線程所需的信息以及在mysql.slave_relay_log_info表中恢復SQL線程所需的信息
    
sync_binlog=1

relay_log_recovery=1
--當服務器啓動當即自動恢復中繼日誌,過程是:1建立新中繼日誌,SQL線程位置初始化爲此中繼日誌(Relay_Log_File + Relay_Log_Pos ),2IO線程初始化爲SQL線程位置並開始拉取日誌。
--當revovery啓動,relay_log_purge關閉,可能形成從未清除文件中讀取中繼日誌
相關文章
相關標籤/搜索