[mysqld] html
########basic settings######## mysql
server-id = 11 sql
port = 3306 數據庫
user = mysql windows
bind_address = 10.166.224.32 centos
autocommit = on 緩存
character_set_server=utf8mb4 安全
skip_name_resolve = 1 服務器
max_connections = 800 網絡
max_connect_errors = 1000
datadir = /data/mysql_data
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
join_buffer_size = 134217728
tmp_table_size = 67108864
tmpdir = /tmp
max_allowed_packet = 16777216
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_ZERO_DATE,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER"
interactive_timeout = 1800
wait_timeout = 1800
read_buffer_size = 16777216
read_rnd_buffer_size = 33554432
sort_buffer_size = 33554432
########log settings########
log_error = error.log
slow_query_log = 1
slow_query_log_file = slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 90
long_query_time = 2
min_examined_row_limit = 100
########replication settings########
master_info_repository = TABLE
relay_log_info_repository = TABLE
log_bin = bin.log
sync_binlog = 1
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log = relay.log
relay_log_recovery = 1
binlog_gtid_simple_recovery = 1
slave_skip_errors = ddl_exist_errors
########innodb settings########
innodb_page_size = 8192
innodb_buffer_pool_size = 6G
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_log_group_home_dir = /redolog/
innodb_undo_directory = /undolog/
innodb_undo_logs = 128
innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 4G
innodb_log_buffer_size = 16777216
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864
########semi sync replication settings########
plugin_dir=/usr/local/mysql/lib/plugin
plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
loose_rpl_semi_sync_master_enabled = 1
loose_rpl_semi_sync_slave_enabled = 1
loose_rpl_semi_sync_master_timeout = 5000
[mysqld-5.7]
innodb_buffer_pool_dump_pct = 40
innodb_page_cleaners = 4
innodb_undo_log_truncate = 1
innodb_max_undo_log_size = 2G
innodb_purge_rseg_truncate_frequency = 128
binlog_gtid_simple_recovery=1
log_timestamps=system
transaction_write_set_extraction=MURMUR32
show_compatibility_56=on
如下配置文件針對Dell R710,雙至強E5620、16G內存的硬件配置。CentOS 5.6 64位系統,MySQL 5.5.x 穩定版。適用於日IP 50-100w,PV 100-300w的站點,主要使用InnoDB存儲引擎。其餘應用環境請根據實際狀況來設置優化。
# 如下選項會被MySQL客戶端應用讀取。
# 注意只有MySQL附帶的客戶端應用程序保證能夠讀取這段內容。
# 若是你想你本身的MySQL應用程序獲取這些值。
# 須要在MySQL客戶端庫初始化的時候指定這些選項。
#
[client]
#password = [your_password]
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@
# *** 應用定製選項 ***
#
# MySQL 服務端
#
[mysqld]
# 通常配置選項
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@
# back_log 是操做系統在監聽隊列中所能保持的鏈接數,
# 隊列保存了在MySQL鏈接管理器線程處理以前的鏈接.
# 若是你有很是高的鏈接率而且出現」connection refused」 報錯,
# 你就應該增長此處的值.
# 檢查你的操做系統文檔來獲取這個變量的最大值.
# 若是將back_log設定到比你操做系統限制更高的值,將會沒有效果
back_log = 300
# 不在TCP/IP端口上進行監聽.
# 若是全部的進程都是在同一臺服務器鏈接到本地的mysqld,
# 這樣設置將是加強安全的方法
# 全部mysqld的鏈接都是經過Unix sockets 或者命名管道進行的.
# 注意在windows下若是沒有打開命名管道選項而只是用此項
# (經過 「enable-named-pipe」 選項) 將會致使mysql服務沒有任何做用!
#skip-networking
# MySQL 服務所容許的同時會話數的上限
# 其中一個鏈接將被SUPER權限保留做爲管理員登陸.
# 即使已經達到了鏈接數的上限.
max_connections = 3000
# 每一個客戶端鏈接最大的錯誤容許數量,若是達到了此限制.
# 這個客戶端將會被MySQL服務阻止直到執行了」FLUSH HOSTS」 或者服務重啓
# 非法的密碼以及其餘在連接時的錯誤會增長此值.
# 查看 「Aborted_connects」 狀態來獲取全局計數器.
max_connect_errors = 30
# 全部線程所打開表的數量.
# 增長此值就增長了mysqld所須要的文件描述符的數量
# 這樣你須要確認在[mysqld_safe]中 「open-files-limit」 變量設置打開文件數量容許至少4096
table_cache = 4096
# 容許外部文件級別的鎖. 打開文件鎖會對性能形成負面影響
# 因此只有在你在一樣的文件上運行多個數據庫實例時才使用此選項(注意仍會有其餘約束!)
# 或者你在文件層面上使用了其餘一些軟件依賴來鎖定MyISAM表
#external-locking
# 服務所能處理的請求包的最大大小以及服務所能處理的最大的請求大小(當與大的BLOB字段一塊兒工做時至關必要)
# 每一個鏈接獨立的大小.大小動態增長
max_allowed_packet = 32M
# 在一個事務中binlog爲了記錄SQL狀態所持有的cache大小
# 若是你常用大的,多聲明的事務,你能夠增長此值來獲取更大的性能.
# 全部從事務來的狀態都將被緩衝在binlog緩衝中而後在提交後一次性寫入到binlog中
# 若是事務比此值大, 會使用磁盤上的臨時文件來替代.
# 此緩衝在每一個鏈接的事務第一次更新狀態時被建立
binlog_cache_size = 4M
# 獨立的內存表所容許的最大容量.
# 此選項爲了防止意外建立一個超大的內存表致使永盡全部的內存資源.
max_heap_table_size = 128M
# 排序緩衝被用來處理相似ORDER BY以及GROUP BY隊列所引發的排序
# 若是排序後的數據沒法放入排序緩衝,
# 一個用來替代的基於磁盤的合併分類會被使用
# 查看 「Sort_merge_passes」 狀態變量.
# 在排序發生時由每一個線程分配
sort_buffer_size = 16M
# 此緩衝被使用來優化全聯合(full JOINs 不帶索引的聯合).
# 相似的聯合在極大多數狀況下有很是糟糕的性能表現,
# 可是將此值設大可以減輕性能影響.
# 經過 「Select_full_join」 狀態變量查看全聯合的數量
# 當全聯合發生時,在每一個線程中分配
join_buffer_size = 16M
# 咱們在cache中保留多少線程用於重用
# 當一個客戶端斷開鏈接後,若是cache中的線程還少於thread_cache_size,
# 則客戶端線程被放入cache中.
# 這能夠在你須要大量新鏈接的時候極大的減小線程建立的開銷
# (通常來講若是你有好的線程模型的話,這不會有明顯的性能提高.)
thread_cache_size = 16
# 此容許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量.
# 此值只對於支持 thread_concurrency() 函數的系統有意義( 例如Sun Solaris).
# 你可能夠嘗試使用 [CPU數量]*(2..4) 來做爲thread_concurrency的值
thread_concurrency = 8
# 查詢緩衝常被用來緩衝 SELECT 的結果而且在下一次一樣查詢的時候再也不執行直接返回結果.
# 打開查詢緩衝能夠極大的提升服務器速度, 若是你有大量的相同的查詢而且不多修改表.
# 查看 「Qcache_lowmem_prunes」 狀態變量來檢查是否當前值對於你的負載來講是否足夠高.
# 注意: 在你表常常變化的狀況下或者若是你的查詢原文每次都不一樣,
# 查詢緩衝也許引發性能降低而不是性能提高.
query_cache_size = 128M
# 只有小於此設定值的結果纔會被緩衝
# 此設置用來保護查詢緩衝,防止一個極大的結果集將其餘全部的查詢結果都覆蓋.
query_cache_limit = 4M
# 被全文檢索索引的最小的字長.
# 你也許但願減小它,若是你須要搜索更短字的時候.
# 注意在你修改此值以後,
# 你須要重建你的 FULLTEXT 索引
ft_min_word_len = 8
# 若是你的系統支持 memlock() 函數,你也許但願打開此選項用以讓運行中的mysql在在內存高度緊張的時候,數據在內存中保持鎖定而且防止可能被swapping out
# 此選項對於性能有益
#memlock
# 當建立新表時做爲默認使用的表類型,
# 若是在建立表示沒有特別執行表類型,將會使用此值
default_table_type = MYISAM
# 線程使用的堆大小. 此容量的內存在每次鏈接時被預留.
# MySQL 自己常不會須要超過64K的內存
# 若是你使用你本身的須要大量堆的UDF函數
# 或者你的操做系統對於某些操做須要更多的堆,
# 你也許須要將其設置的更高一點.
thread_stack = 512K
# 設定默認的事務隔離級別.可用的級別以下:
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE
transaction_isolation = REPEATABLE-READ
# 內部(內存中)臨時表的最大大小
# 若是一個表增加到比此值更大,將會自動轉換爲基於磁盤的表.
# 此限制是針對單個表的,而不是總和.
tmp_table_size = 128M
# 打開二進制日誌功能.
# 在複製(replication)配置中,做爲MASTER主服務器必須打開此項
# 若是你須要從你最後的備份中作基於時間點的恢復,你也一樣須要二進制日誌.
log-bin=mysql-bin
# 若是你在使用鏈式從服務器結構的複製模式 (A->B->C),
# 你須要在服務器B上打開此項.
# 此選項打開在從線程上重作過的更新的日誌,
# 並將其寫入從服務器的二進制日誌.
#log_slave_updates
# 打開全查詢日誌. 全部的由服務器接收到的查詢 (甚至對於一個錯誤語法的查詢)
# 都會被記錄下來. 這對於調試很是有用, 在生產環境中經常關閉此項.
#log
# 將警告打印輸出到錯誤log文件. 若是你對於MySQL有任何問題
# 你應該打開警告log而且仔細審查錯誤日誌,查出可能的緣由.
#log_warnings
# 記錄慢速查詢. 慢速查詢是指消耗了比 「long_query_time」 定義的更多時間的查詢.
# 若是 log_long_format 被打開,那些沒有使用索引的查詢也會被記錄.
# 若是你常常增長新查詢到已有的系統內的話. 通常來講這是一個好主意,
log_slow_queries
# 全部的使用了比這個時間(以秒爲單位)更多的查詢會被認爲是慢速查詢.
# 不要在這裏使用」1″, 不然會致使全部的查詢,甚至很是快的查詢頁被記錄下來(因爲MySQL 目前時間的精確度只能達到秒的級別).
long_query_time = 6
# 在慢速日誌中記錄更多的信息.
# 通常此項最好打開.
# 打開此項會記錄使得那些沒有使用索引的查詢也被做爲到慢速查詢附加到慢速日誌裏
log_long_format
# 此目錄被MySQL用來保存臨時文件.例如,
# 它被用來處理基於磁盤的大型排序,和內部排序同樣.
# 以及簡單的臨時表.
# 若是你不建立很是大的臨時文件,將其放置到 swapfs/tmpfs 文件系統上也許比較好
# 另外一種選擇是你也能夠將其放置在獨立的磁盤上.
# 你可使用」;」來放置多個路徑
# 他們會按照roud-robin方法被輪詢使用.
#tmpdir = /tmp
# *** 主從複製相關的設置
# 惟一的服務辨識號,數值位於 1 到 2^32-1之間.
# 此值在master和slave上都須要設置.
# 若是 「master-host」 沒有被設置,則默認爲1, 可是若是忽略此選項,MySQL不會做爲master生效.
server-id = 1
# 複製的Slave (去掉master段的註釋來使其生效)
#
# 爲了配置此主機做爲複製的slave服務器,你能夠選擇兩種方法:
#
# 1) 使用 CHANGE MASTER TO 命令 (在咱們的手冊中有完整描述) –
# 語法以下:
#
# CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,
# MASTER_USER=, MASTER_PASSWORD= ;
#
# 你須要替換掉 , , 等被尖括號包圍的字段以及使用master的端口號替換 (默認3306).
#
# 例子:
#
# CHANGE MASTER TO MASTER_HOST=’125.564.12.1′, MASTER_PORT=3306,
# MASTER_USER=’joe’, MASTER_PASSWORD=’secret’;
#
# 或者
#
# 2) 設置如下的變量. 不論如何, 在你選擇這種方法的狀況下, 而後第一次啓動複製(甚至不成功的狀況下,
# 例如若是你輸入錯密碼在master-password字段而且slave沒法鏈接),
# slave會建立一個 master.info 文件,而且以後任何對於包含在此文件內的參數的變化都會被忽略
# 而且由 master.info 文件內的內容覆蓋, 除非你關閉slave服務, 刪除 master.info 而且重啓slave 服務.
# 因爲這個緣由,你也許不想碰一下的配置(註釋掉的) 而且使用 CHANGE MASTER TO (查看上面) 來代替
#
# 所須要的惟一id號位於 2 和 2^32 – 1之間
# (而且和master不一樣)
# 若是master-host被設置了.則默認值是2
# 可是若是省略,則不會生效
#server-id = 2
#
# 複製結構中的master – 必須
#master-host =
#
# 當鏈接到master上時slave所用來認證的用戶名 – 必須
#master-user =
#
# 當鏈接到master上時slave所用來認證的密碼 – 必須
#master-password =
#
# master監聽的端口.
# 可選 – 默認是3306
#master-port =
# 使得slave只讀.只有用戶擁有SUPER權限和在上面的slave線程可以修改數據.
# 你可使用此項去保證沒有應用程序會意外的修改slave而不是master上的數據
#read_only
#*** MyISAM 相關選項
# 關鍵詞緩衝的大小, 通常用來緩衝MyISAM表的索引塊.
# 不要將其設置大於你可用內存的30%,
# 由於一部份內存一樣被OS用來緩衝行數據
# 甚至在你並不使用MyISAM 表的狀況下, 你也須要仍舊設置起 8-64M 內存因爲它一樣會被內部臨時磁盤表使用.
key_buffer_size = 128M
# 用來作MyISAM表全表掃描的緩衝大小.
# 當全表掃描須要時,在對應線程中分配.
read_buffer_size = 8M
# 當在排序以後,從一個已經排序好的序列中讀取行時,行數據將從這個緩衝中讀取來防止磁盤尋道.
# 若是你增高此值,能夠提升不少ORDER BY的性能.
# 當須要時由每一個線程分配
read_rnd_buffer_size = 64M
# MyISAM 使用特殊的相似樹的cache來使得突發插入
# (這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA
# INFILE) 更快. 此變量限制每一個進程中緩衝樹的字節數.
# 設置爲 0 會關閉此優化.
# 爲了最優化不要將此值設置大於 「key_buffer_size」.
# 當突發插入被檢測到時此緩衝將被分配.
bulk_insert_buffer_size = 256M
# 此緩衝當MySQL須要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一個空表中引發重建索引時被分配.
# 這在每一個線程中被分配.因此在設置大值時須要當心.
myisam_sort_buffer_size = 256M
# MySQL重建索引時所容許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).
# 若是文件大小比此值更大,索引會經過鍵值緩衝建立(更慢)
myisam_max_sort_file_size = 10G
# 若是被用來更快的索引建立索引所使用臨時文件大於制定的值,那就使用鍵值緩衝方法.
# 這主要用來強制在大表中長字串鍵去使用慢速的鍵值緩衝方法來建立索引.
myisam_max_extra_sort_file_size = 10G
# 若是一個表擁有超過一個索引, MyISAM 能夠經過並行排序使用超過一個線程去修復他們.
# 這對於擁有多個CPU以及大量內存狀況的用戶,是一個很好的選擇.
myisam_repair_threads = 1
# 自動檢查和修復沒有適當關閉的 MyISAM 表.
myisam_recover
# 默認關閉 Federated
skip-federated
# *** BDB 相關選項 ***
# 若是你運行的MySQL服務有BDB支持可是你不許備使用的時候使用此選項. 這會節省內存而且可能加速一些事.
skip-bdb
# *** INNODB 相關選項 ***
# 若是你的MySQL服務包含InnoDB支持可是並不打算使用的話,
# 使用此選項會節省內存以及磁盤空間,而且加速某些部分
#skip-innodb
# 附加的內存池被InnoDB用來保存 metadata 信息
# 若是InnoDB爲此目的須要更多的內存,它會開始從OS這裏申請內存.
# 因爲這個操做在大多數現代操做系統上已經足夠快, 你通常不須要修改此值.
# SHOW INNODB STATUS 命令會顯示當先使用的數量.
innodb_additional_mem_pool_size = 64M
# InnoDB使用一個緩衝池來保存索引和原始數據, 不像 MyISAM.
# 這裏你設置越大,你在存取表裏面數據時所須要的磁盤I/O越少.
# 在一個獨立使用的數據庫服務器上,你能夠設置這個變量到服務器物理內存大小的80%
# 不要設置過大,不然,因爲物理內存的競爭可能致使操做系統的換頁顛簸.
# 注意在32位系統上你每一個進程可能被限制在 2-3.5G 用戶層面內存限制,
# 因此不要設置的過高.
innodb_buffer_pool_size = 6G
# InnoDB 將數據保存在一個或者多個數據文件中成爲表空間.
# 若是你只有單個邏輯驅動保存你的數據,一個單個的自增文件就足夠好了.
# 其餘狀況下.每一個設備一個文件通常都是個好的選擇.
# 你也能夠配置InnoDB來使用裸盤分區 – 請參考手冊來獲取更多相關內容
innodb_data_file_path = ibdata1:10M:autoextend
# 設置此選項若是你但願InnoDB表空間文件被保存在其餘分區.
# 默認保存在MySQL的datadir中.
#innodb_data_home_dir =
# 用來同步IO操做的IO線程的數量. This value is
# 此值在Unix下被硬編碼爲4,可是在Windows磁盤I/O可能在一個大數值下表現的更好.
innodb_file_io_threads = 4
# 若是你發現InnoDB表空間損壞, 設置此值爲一個非零值可能幫助你導出你的表.
# 從1開始而且增長此值知道你可以成功的導出表.
#innodb_force_recovery=1
# 在InnoDb核心內的容許線程數量.
# 最優值依賴於應用程序,硬件以及操做系統的調度方式.
# 太高的值可能致使線程的互斥顛簸.
innodb_thread_concurrency = 16
# 若是設置爲1 ,InnoDB會在每次提交後刷新(fsync)事務日誌到磁盤上,
# 這提供了完整的ACID行爲.
# 若是你願意對事務安全折衷, 而且你正在運行一個小的食物, 你能夠設置此值到0或者2來減小由事務日誌引發的磁盤I/O
# 0表明日誌只大約每秒寫入日誌文件而且日誌文件刷新到磁盤.
# 2表明日誌寫入日誌文件在每次提交後,可是日誌文件只有大約每秒纔會刷新到磁盤上.
innodb_flush_log_at_trx_commit = 2
(說明:若是是遊戲服務器,建議此值設置爲2;若是是對數據安全要求極高的應用,建議設置爲1;設置爲0性能最高,但若是發生故障,數據可能會有丟失的危險!默認值1的意思是每一次事務提交或事務外的指令都須要把日誌寫入(flush)硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設成2對於不少運用,特別是從MyISAM錶轉過來的是能夠的,它的意思是不寫入硬盤而是寫入系統緩存。日誌仍然會每秒flush到硬盤,因此你通常不會丟失超過1-2秒的更新。設成0會更快一點,但安全方面比較差,即便MySQL掛了也可能會丟失事務的數據。而值2只會在整個操做系統掛了時纔可能丟數據。)
# 加速InnoDB的關閉. 這會阻止InnoDB在關閉時作全清除以及插入緩衝合併.
# 這可能極大增長關機時間, 可是取而代之的是InnoDB可能在下次啓動時作這些操做.
#innodb_fast_shutdown
# 用來緩衝日誌數據的緩衝區的大小.
# 當此值快滿時, InnoDB將必須刷新數據到磁盤上.
# 因爲基本上每秒都會刷新一次,因此沒有必要將此值設置的太大(甚至對於長事務而言)
innodb_log_buffer_size = 16M
# 在日誌組中每一個日誌文件的大小.
# 你應該設置日誌文件總合大小到你緩衝池大小的25%~100%
# 來避免在日誌文件覆寫上沒必要要的緩衝池刷新行爲.
# 不論如何, 請注意一個大的日誌文件大小會增長恢復進程所須要的時間.
innodb_log_file_size = 512M
# 在日誌組中的文件總數.
# 一般來講2~3是比較好的.
innodb_log_files_in_group = 3
# InnoDB的日誌文件所在位置. 默認是MySQL的datadir.
# 你能夠將其指定到一個獨立的硬盤上或者一個RAID1捲上來提升其性能
#innodb_log_group_home_dir
# 在InnoDB緩衝池中最大容許的髒頁面的比例.
# 若是達到限額, InnoDB會開始刷新他們防止他們妨礙到乾淨數據頁面.
# 這是一個軟限制,不被保證絕對執行.
innodb_max_dirty_pages_pct = 90
# InnoDB用來刷新日誌的方法.
# 表空間老是使用雙重寫入刷新方法
# 默認值是 「fdatasync」, 另外一個是 「O_DSYNC」.
#innodb_flush_method=O_DSYNC
# 在被回滾前,一個InnoDB的事務應該等待一個鎖被批准多久.
# InnoDB在其擁有的鎖表中自動檢測事務死鎖而且回滾事務.
# 若是你使用 LOCK TABLES 指令, 或者在一樣事務中使用除了InnoDB之外的其餘事務安全的存儲引擎
# 那麼一個死鎖可能發生而InnoDB沒法注意到.
# 這種狀況下這個timeout值對於解決這種問題就很是有幫助.
innodb_lock_wait_timeout = 120
[mysqldump]
# 不要在將內存中的整個結果寫入磁盤以前緩存. 在導出很是巨大的表時須要此項
quick
max_allowed_packet = 32M
[mysql]
no-auto-rehash
# 僅僅容許使用鍵值的 UPDATEs 和 DELETEs .
#safe-updates
[isamchk]
key_buffer = 2048M
sort_buffer_size = 2048M
read_buffer = 32M
write_buffer = 32M
[myisamchk]
key_buffer = 2048M
sort_buffer_size = 2048M
read_buffer = 32M
write_buffer = 32M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
# 增長每一個進程的可打開文件數量.
# 警告: 確認你已經將全系統限制設定的足夠高!
# 打開大量表須要將此值設大
open-files-limit = 8192
我本身使用的 在 mmm 結構裏面使用的 一些配置.(2主2從,每臺機器是8G內存,2個cpu的centos 7 64位操做系統,mysql 5.6.31)。
若是不能正常啓動 mysql 。 查看 /opt/mysql/log/mysqld.log 日誌來定位錯誤 . 這裏的 undolog 和 redolog 目錄,須要手工創建,不然mysql 沒法啓動
1.mysql-master-001
[mysqld]
########基本設置########
datadir = /opt/mysql/data
socket = /opt/mysql/mysql.sock
default-storage-engine = Innodb
autocommit = on
character_set_server = utf8
skip_name_resolve = 1
max_connections = 800
max_connect_errors = 1000
transaction_isolation = READ-COMMITTED
explicit_defaults_for_timestamp = 1
tmp_table_size = 2G
tmpdir = /tmp
max_allowed_packet = 16M
sql_mode = "STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER"
interactive_timeout = 1800
wait_timeout = 1800
read_buffer_size = 1M
read_rnd_buffer_size = 1M
sort_buffer_size = 1M
join_buffer_size = 2M
table_open_cache = 2048
########log settings########
log_error = /opt/mysql/log/error.log
slow_query_log = 1
slow_query_log_file = /opt/mysql/log/slow.log
log_queries_not_using_indexes = 1
log_slow_admin_statements = 1
log_slow_slave_statements = 1
log_throttle_queries_not_using_indexes = 10
expire_logs_days = 90
long_query_time = 2
min_examined_row_limit = 100
########replication settings########
read_only=1
slave_skip_errors = ddl_exist_errors
master_info_repository = TABLE
relay_log_info_repository = TABLE
#如下這三個參數必定要同時在my.cnf中配置。不然在mysql.err中會出現以下的報錯
gtid_mode = on
log_slave_updates = 1 #當一個主故障,另外一個當即接管
enforce_gtid_consistency = 1
#設置結束
replicate-ignore-db = mysql,information_schema #不一樣步的數據庫,多個寫多行
replicate-do-db = meerkat #同步的數據庫,多個寫多行
binlog-ignore-db = mysql,information_schema #不須要記錄二進制日誌的數據庫,多個用逗號隔開
binlog-do-db = meerkat #須要記錄二進制日誌的數據庫,多個用逗號隔開
innodb_flush_log_at_trx_commit = 2 #指定了 InnoDB 在事務提交後的日誌寫入頻率。可設置0,1,2。 0:MySQL性能最好 . 1:最安全的配置,但因爲每次事務都須要進行磁盤I/O,因此也最慢. 2:每次事務提交會寫入日誌文件,但並不會當即刷寫到磁盤,日誌文件會每秒刷寫一次到磁盤。
sync_binlog = 0 #設置爲1的時候,每條自動更新,安全性高.默認是0
binlog_format = row
server-id = 1 #server-id在每臺服務器上的值都是不同,在這裏依次爲一、二、三、4。
log-bin = /opt/mysql/log/mysql-master-001-bin.log
log_bin_index = /opt/mysql/log/mysql-master-001-bin.log.index
relay_log = /opt/mysql/log/mysql-master-001-bin.relay
relay_log_index = /opt/mysql/log/mysql-master-001-bin.relay.index
relay_log_recovery = 1
binlog_gtid_simple_recovery = 1
expire_logs_days = 10
max_binlog_size = 100M
binlog_cache_size = 16M
########innodb settings########
#innodb_page_size = 8192
innodb_additional_mem_pool_size = 128M
innodb_buffer_pool_size = 5G
innodb_buffer_pool_instances = 5
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_lru_scan_depth = 2000
innodb_lock_wait_timeout = 5
innodb_io_capacity = 4000
innodb_io_capacity_max = 8000
innodb_flush_method = O_DIRECT
innodb_file_format = Barracuda
innodb_file_format_max = Barracuda
innodb_log_group_home_dir = /opt/mysql/redolog/
innodb_undo_directory = /opt/mysql/undolog/
#innodb_undo_logs = 128
#innodb_undo_tablespaces = 3
innodb_flush_neighbors = 1
innodb_log_file_size = 4G
innodb_log_buffer_size = 16777216
innodb_purge_threads = 4
innodb_large_prefix = 1
innodb_thread_concurrency = 64
innodb_print_all_deadlocks = 1
innodb_strict_mode = 1
innodb_sort_buffer_size = 67108864
# Disabling symbolic-links is recommended to prevent assorted security risks
# symbolic-links=0
[mysqld_safe]
log-error = /opt/mysql/log/mysqld.log
pid-file = /var/run/mysqld/mysqld.pid
[mysql]
socket = /opt/mysql/mysql.sock
另外一個配置
4核 16G Centos6.5 x64
[client] port = 3306 socket = /var/lib/mysql/mysql.sock [mysql]#這個配置段設置啓動MySQL服務的條件;在這種狀況下,no-auto-rehash確保這個服務啓動得比較快。no-auto-rehash [mysqld] user = mysql port = 3306 socket = /var/lib/mysql/mysql.sock basedir = /usr/local/mysql datadir = /data/mysql/data/ open_files_limit = 10240 back_log = 600 #在MYSQL暫時中止響應新請求以前,短期內的多少個請求能夠被存在堆棧中。若是系統在短期內有不少鏈接,則須要增大該參數的值,該參數值指定到來的TCP/IP鏈接的監聽隊列的大小。默認值80。max_connections = 3000 #MySQL容許最大的進程鏈接數,若是常常出現Too Many Connections的錯誤提示,則須要增大此值。默認151max_connect_errors = 6000 #設置每一個主機的鏈接請求異常中斷的最大次數,當超過該次數,MYSQL服務器將禁止host的鏈接請求,直到mysql服務器重啓或經過flush hosts命令清空此host的相關信息。默認100external-locking = FALSE #使用–skip-external-locking MySQL選項以免外部鎖定。該選項默認開啓max_allowed_packet = 32M #設置在網絡傳輸中一次消息傳輸量的最大值。系統默認值 爲4MB,最大值是1GB,必須設置1024的倍數。#sort_buffer_size = 2M # Sort_Buffer_Size 是一個connection級參數,在每一個connection(session)第一次須要使用這個buffer的時候,一次性分配設置的內存。#Sort_Buffer_Size 並非越大越好,因爲是connection級的參數,過大的設置+高併發可能會耗盡系統內存資源。例如:500個鏈接將會消耗 500*sort_buffer_size(8M)=4G內存#Sort_Buffer_Size 超過2KB的時候,就會使用mmap() 而不是 malloc() 來進行內存分配,致使效率下降。 系統默認2M,使用默認值便可#join_buffer_size = 2M #用於表間關聯緩存的大小,和sort_buffer_size同樣,該參數對應的分配內存也是每一個鏈接獨享。系統默認2M,使用默認值便可thread_cache_size = 300 #默認38# 服務器線程緩存這個值表示能夠從新利用保存在緩存中線程的數量,當斷開鏈接時若是緩存中還有空間,那麼客戶端的線程將被放到緩存中,若是線程從新被請求,那麼請求將從緩存中讀取,若是緩存中是空的或者是新的請求,那麼這個線程將被從新建立,若是有不少新的線程,增長這個值能夠改善系統性能.經過比較 Connections 和 Threads_created 狀態的變量,能夠看到這個變量的做用。設置規則以下:1GB 內存配置爲8,2GB配置爲16,3GB配置爲32,4GB或更高內存,可配置更大。#thread_concurrency = 8 #系統默認爲10,使用10先觀察# 設置thread_concurrency的值的正確與否, 對mysql的性能影響很大, 在多個cpu(或多核)的狀況下,錯誤設置了thread_concurrency的值, 會致使mysql不能充分利用多cpu(或多核), 出現同一時刻只能一個cpu(或核)在工做的狀況。thread_concurrency應設爲CPU核數的2倍. 好比有一個雙核的CPU, 那麼thread_concurrency的應該爲4; 2個雙核的cpu, thread_concurrency的值應爲8query_cache_size = 64M #在MyISAM引擎優化中,這個參數也是一個重要的優化參數。但也爆露出來一些問題。機器的內存愈來愈大,習慣性把參數分配的值愈來愈大。這個參數加大後也引起了一系列問題。咱們首先分析一下 query_cache_size的工做原理:一個SELECT查詢在DB中工做後,DB會把該語句緩存下來,當一樣的一個SQL再次來到DB裏調用時,DB在該表沒發生變化的狀況下把結果從緩存中返回給Client。這裏有一個關建點,就是DB在利用Query_cache工做時,要求該語句涉及的表在這段時間內沒有發生變動。那若是該表在發生變動時,Query_cache裏的數據又怎麼處理呢?首先要把Query_cache和該表相關的語句所有置爲失效,而後在寫入更新。那麼若是Query_cache很是大,該表的查詢結構又比較多,查詢語句失效也慢,一個更新或是Insert就會很慢,這樣看到的就是Update或是Insert怎麼這麼慢了。因此在數據庫寫入量或是更新量也比較大的系統,該參數不適合分配過大。並且在高併發,寫入量大的系統,建議把該功能禁掉。query_cache_limit = 4M #指定單個查詢可以使用的緩衝區大小,缺省爲1Mquery_cache_min_res_unit = 2k #默認是4KB,設置值大對大數據查詢有好處,但若是你的查詢都是小數據查詢,就容易形成內存碎片和浪費#查詢緩存碎片率 = Qcache_free_blocks / Qcache_total_blocks * 100%#若是查詢緩存碎片率超過20%,能夠用FLUSH QUERY CACHE整理緩存碎片,或者試試減少query_cache_min_res_unit,若是你的查詢都是小數據量的話。#查詢緩存利用率 = (query_cache_size – Qcache_free_memory) / query_cache_size * 100%#查詢緩存利用率在25%如下的話說明query_cache_size設置的過大,可適當減少;查詢緩存利用率在80%以上並且Qcache_lowmem_prunes > 50的話說明query_cache_size可能有點小,要不就是碎片太多。#查詢緩存命中率 = (Qcache_hits – Qcache_inserts) / Qcache_hits * 100%#default-storage-engine = MyISAM#default_table_type = InnoDB #開啓失敗#thread_stack = 192K #設置MYSQL每一個線程的堆棧大小,默認值足夠大,可知足普通操做。可設置範圍爲128K至4GB,默認爲256KB,使用默認觀察transaction_isolation = READ-COMMITTED # 設定默認的事務隔離級別.可用的級別以下:READ UNCOMMITTED-讀未提交 READ COMMITTE-讀已提交 REPEATABLE READ -可重複讀 SERIALIZABLE -串行tmp_table_size = 256M # tmp_table_size 的默認大小是 32M。若是一張臨時表超出該大小,MySQL產生一個 The table tbl_name is full 形式的錯誤,若是你作不少高級 GROUP BY 查詢,增長 tmp_table_size 值。若是超過該值,則會將臨時表寫入磁盤。max_heap_table_size = 256M expire_logs_days = 7 key_buffer_size = 2048M #批定用於索引的緩衝區大小,增長它能夠獲得更好的索引處理性能,對於內存在4GB左右的服務器來講,該參數可設置爲256MB或384MB。read_buffer_size = 1M #默認128K# MySql讀入緩衝區大小。對錶進行順序掃描的請求將分配一個讀入緩衝區,MySql會爲它分配一段內存緩衝區。read_buffer_size變量控制這一緩衝區的大小。若是對錶的順序掃描請求很是頻繁,而且你認爲頻繁掃描進行得太慢,能夠經過增長該變量值以及內存緩衝區大小提升其性能。和sort_buffer_size同樣,該參數對應的分配內存也是每一個鏈接獨享。read_rnd_buffer_size = 16M # MySql的隨機讀(查詢操做)緩衝區大小。當按任意順序讀取行時(例如,按照排序順序),將分配一個隨機讀緩存區。進行排序查詢時,MySql會首先掃描一遍該緩衝,以免磁盤搜索,提升查詢速度,若是須要排序大量數據,可適當調高該值。但MySql會爲每一個客戶鏈接發放該緩衝空間,因此應儘可能適當設置該值,以免內存開銷過大。bulk_insert_buffer_size = 64M #批量插入數據緩存大小,能夠有效提升插入效率,默認爲8Mmyisam_sort_buffer_size = 128M # MyISAM表發生變化時從新排序所需的緩衝 默認8Mmyisam_max_sort_file_size = 10G # MySQL重建索引時所容許的最大臨時文件的大小 (當 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).# 若是文件大小比此值更大,索引會經過鍵值緩衝建立(更慢)#myisam_max_extra_sort_file_size = 10G 5.6無此值設置#myisam_repair_threads = 1 默認爲1# 若是一個表擁有超過一個索引, MyISAM 能夠經過並行排序使用超過一個線程去修復他們.# 這對於擁有多個CPU以及大量內存狀況的用戶,是一個很好的選擇.myisam_recover #自動檢查和修復沒有適當關閉的 MyISAM 表skip-name-resolve lower_case_table_names = 1 server-id = 1 innodb_additional_mem_pool_size = 16M #這個參數用來設置 InnoDB 存儲的數據目錄信息和其它內部數據結構的內存池大小,相似於Oracle的library cache。這不是一個強制參數,能夠被突破。innodb_buffer_pool_size = 2048M # 這對Innodb表來講很是重要。Innodb相比MyISAM表對緩衝更爲敏感。MyISAM能夠在默認的 key_buffer_size 設置下運行的能夠,然而Innodb在默認的 innodb_buffer_pool_size 設置下卻跟蝸牛似的。因爲Innodb把數據和索引都緩存起來,無需留給操做系統太多的內存,所以若是隻須要用Innodb的話則能夠設置它高達 70-80% 的可用內存。一些應用於 key_buffer 的規則有 — 若是你的數據量不大,而且不會暴增,那麼無需把 innodb_buffer_pool_size 設置的太大了#innodb_data_file_path = ibdata1:1024M:autoextend 設置過大致使報錯,默認12M觀察#表空間文件 重要數據#innodb_file_io_threads = 4 不明確,使用默認值#文件IO的線程數,通常爲 4,可是在 Windows 下,能夠設置得較大。innodb_thread_concurrency = 8 #服務器有幾個CPU就設置爲幾,建議用默認設置,通常爲8.innodb_flush_log_at_trx_commit = 2 # 若是將此參數設置爲1,將在每次提交事務後將日誌寫入磁盤。爲×××能,能夠設置爲0或2,但要承擔在發生故障時丟失數據的風險。設置爲0表示事務日誌寫入日誌文件,而日誌文件每秒刷新到磁盤一次。設置爲2表示事務日誌將在提交時寫入日誌,但日誌文件每次刷新到磁盤一次。#innodb_log_buffer_size = 16M 使用默認8M#此參數肯定些日誌文件所用的內存大小,以M爲單位。緩衝區更大能提升性能,但意外的故障將會丟失數據.MySQL開發人員建議設置爲1-8M之間#innodb_log_file_size = 128M 使用默認48M#此參數肯定數據日誌文件的大小,以M爲單位,更大的設置能夠提升性能,但也會增長恢復故障數據庫所需的時間#innodb_log_files_in_group = 3 使用默認2#爲提升性能,MySQL能夠以循環方式將日誌文件寫到多個文件。推薦設置爲3M#innodb_max_dirty_pages_pct = 90 使用默認75觀察#推薦閱讀 http://www.taobaodba.com/html/221_innodb_max_dirty_pages_pct_checkpoint.html# Buffer_Pool中Dirty_Page所佔的數量,直接影響InnoDB的關閉時間。參數innodb_max_dirty_pages_pct 能夠直接控制了Dirty_Page在Buffer_Pool中所佔的比率,並且幸運的是innodb_max_dirty_pages_pct是能夠動態改變的。因此,在關閉InnoDB以前先將innodb_max_dirty_pages_pct調小,強制數據塊Flush一段時間,則可以大大縮短 MySQL關閉的時間。innodb_lock_wait_timeout = 120 #默認爲50秒 # InnoDB 有其內置的死鎖檢測機制,能致使未完成的事務回滾。可是,若是結合InnoDB使用MyISAM的lock tables 語句或第三方事務引擎,則InnoDB沒法識別死鎖。爲消除這種可能性,能夠將innodb_lock_wait_timeout設置爲一個整數值,指示 MySQL在容許其餘事務修改那些最終受事務回滾的數據以前要等待多長時間(秒數)innodb_file_per_table = 0 #默認爲No#獨享表空間(關閉)[mysqldump] quick # max_allowed_packet = 32M[mysqld_safe] log-error=/data/mysql/mysql_oldboy.err pid-file=/data/mysql/mysqld.pid sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES