Mysql-同Nginx等一樣具備多實例的特點,簡單的講就是在一臺服務器上同時開啟多個不同的服務端口(3306,3307)同時運行多個Mysql服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。這些Mysql多實例公用一套Mysql安裝程序,使用不同的my.conf配置文件、啟動程序和數據文件。
以下是主配文件以及單實例配置文件的注解
cat my-innodb-heavy-4G.cnf
#BEGIN CONFIG INFO #開始配置信息
#DESCR: 4GB RAM, InnoDB only, ACID, few connections, heavy queries #描述:4GB內存, InnoDB, ACID, 幾個連接數, heavy查詢
#TYPE: SYSTEM #類型:系統
#END CONFIG INFO #結束配置信息#
# This is a MySQL example config file for systems with 4GB of memory
#這是4GB內存系統-主要運行只有 InnoDB 表的 MySQL 并使用幾個連接數執行復雜的查詢-的一個MySQL實例配置文件
# running mostly MySQL using InnoDB only tables and performing complex
#主要運行MySQL,僅使用InnoDB表和執行復雜操作
# queries with few connections.
#查詢連接很少
#
# MySQL programs look for option files in a set of
#MySQL程序在一組中查找選項文件
# locations which depend on the deployment platform.
#位置取決于部署平臺
# You can copy this option file to one of those
#你可以將這個選項文件復制到其中之一
# locations. For information about these locations, see:
#有關這些位置的信息,請參閱:
# http://dev.mysql.com/doc/mysql/en/option-files.html
#
# In this file, you can use all long options that a program supports.
#在這個文件中,您可以使用程序支持的所有長選項。
# If you want to know which options a program supports, run the program
#如果您想知道程序支持哪些選項,請運行該程序
# with the "--help" option.
#用“--help”選項。
#
# More detailed information about the individual options can also be
# found in the manual. #有關各個選項的更多詳細信息也可以在手冊中找到。
###下面的選項將被MySQL客戶端應用程序讀取。請注意,只保證MySQL發布的客戶端應用程序。
如果你想要自己的MySQL客戶端程序 遵守這些值,則需要將其指定為在一個選項
#MySQL客戶端庫初始化。[client] #客戶端
#password = [your_password]
port = 3306 #客戶端服務端口
socket = /application/mysql-5.5.32/tmp/mysql.sock # *** Application-specific options follow here ***#
# The MySQL server #server 端
#
[mysqld]# generic configuration options #通用配置選項
port = 3306 #Mysql服務運行時端口
socket = /application/mysql-5.5.32/tmp/mysql.sock#sock文件是在Linux、Unix環境下特有的,用戶在Linux/Unix環境下客戶端連接可以不通過TCP/IP網絡而直接使用unix. socket連接mysql#back_log是操作系統可以保持的連接數偵聽隊列,在MySQL連接管理器線程之前處理它們。如果你有非常高的連接速度和經驗“連接被拒絕”錯誤,您可能需要增加此值。檢查您的OS文檔以獲取此參數的最大值。試圖設置back_log高于您的操作系統限制。將不起作用back_log = 50 #back_log參數的值,在Mysql暫時停止響應新請求之前,短時間內的多個請求可以被存在堆棧中,如果系統在短時間內有很多連接,則需要增加該參數的值,該參數值指定到來的TCP/IP連接的監聽隊列的大小。不同的操作系統在這個隊列的大小上有自己的限制。如果試圖將back_log設置高于操作系統的限制將是無效,其默認值為50.對于Linux系統而言,推薦設置小于512的整數值#不要在TCP/IP端口上監聽。這可以是一種安全的機制。如果所有進程都需要連接到mysqld運行,則增強。在同一個主機上。所有與mysqld的交互都必須通過Unix進行。套接字或命名管道,注意,在Windows上不啟用命名管道,使用此選項。(通過“啟用-命名管道”選項)將使mysqld無效!
#skip-networking#MySQL服務器的并發會話的最大數量。允許的。其中一個連接將為用戶保留。超級特權,允許管理員登錄,即使。連接限制已經達到極限。
max_connections = 100# 每個主機允許的最大錯誤數量。 如果達到這個限制,主機將被阻止連接到MySQL服務器,直到“FLUSH HOSTS”已運行或服務器已重新啟動。 無效在連接階段輸入密碼和其他錯誤。增加這個值。請參見“aborted_connect”狀態變量,全局計數器。max_connect_errors = 10#max_connect_errors設置每個主機的連接請求異常中斷的最大次數,當超過該次數,MySQL服務器將禁止host的連接請求,直到MySQL服務器重啟或通過flush hosts命令清空此host的相關信息table_open_cache = 2048#table_open_cache設置表告訴緩存的數目。每個連接進行,都會至少打開一個表緩存。因此,table_cache的大小英語max_connections的設置有關。例如,對于200個并行運行的連接,應該讓表的緩存至少有200xN,這里N是應用可以執行的查詢的一個聯接種表的最大數量,此外還需要為臨時表和文件保留一些額外的文件描述符max_allowed_packet = 16Mbinlog_cache_size = 1M#binlog_cache_size在一個事務中binlog為了記錄sql狀態所持有的cache大小,如果你經常使用大的,多聲明的事務,可以增加此值來獲取更大的性能,所有從事務來的狀態都被緩沖在binlog緩沖中,然后再提交后一次性寫入到binlog中,如果事務比此值大,會使用磁盤上的臨時文件來替代,此緩沖在每個鏈接的事務第一次更新狀態時被創建max_heap_table_size = 64M#獨立的內存表所允許的最大容量read_buffer_size = 2M#read_buffer_size讀查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個鏈接獨享 read_rnd_buffer_size = 16M#read_rnd_buffer_size設置進行隨機讀的時候使用的緩沖區。此參數和read_buffer_size所設置的Buffer相反,一個是順序讀的時候使用,一個是隨機讀的時候使用。但是兩者都是針對線程的設置,每個線程都可以產生兩種Buffer中的任何一個。默認值是256KB,最大值4GBsort_buffer_size = 8M#設置查詢排序時所能使用的緩沖區大小,系統默認大小為8MB注意:該參數對應的分配內存是每個連接獨占的,如果有100個鏈接,那么實際分配的總排序緩沖區大小為100*6=600MB,所以對于在4GB左右的服務器來說,推薦將其設置為6MB~8MBjoin_buffer_size = 8M#聯合查詢操作所能使用的緩沖區大小,和sort_buffer_size一樣,該參數對應的分配內存也是每個連接獨享thread_cache_size = 8#設置Thread Cache池中可以緩存的連接線程最大數量,可設置0~16384,默認為8,這個值表示可以重新利用保存在緩存中線程的數量,當斷開連接時如果緩存中還有空間,那么客戶端的線程江北放到緩存中;如果線程重新被請求,那么請從緩存中讀取,如果緩存中是空的或者是新的請求,那么這個線程將被重新創建,如果有很多線程,增加這個值可以改善系統性能。通過比較Connections和Threads_created狀態的變量,可以看到這個變量的作用。1GB內存我們配置為8,2GB內存我們配置為16,3GB內存我們配置32,4GB或4GB以上我們給此值為64或更大的值thread_concurrency = 8#該參數取值為服務器邏輯CPU數量x2,在本例中,服務器有兩個物理CPU,而每個物理CPU又支持H.T超線程,所以實際取值為4 x 2 = 8.這也是雙核主流服務器的配置query_cache_size = 64M#指定MySQL查詢緩沖區的大小,可以通過MySQL控制臺觀察,如果Qcache_lowmem_prunes的值非常大,則表明經常出現緩沖區不夠的情況,如果Qcache_hits的值非常大,則表明查詢緩沖區使用得非常頻繁。另外如果改值較小反而會影響效率,那么可以考慮不用查詢緩沖,對于Qcache_free_blocks,如果該值非常大,則表明緩沖區中碎片很多。query_cache_limit = 2M#只有小于此設置值的結果才會被緩存ft_min_word_len = 4#如果果是英文默認值是比較合理的,但是中文絕大部分都是2個字符,這就導致小于4個字的詞不能被索引,全文索引功能就形同虛設了default-storage-engine = MYISAM#如果在創建表的語句中沒有指定,當創建一個新表時所使用的默認表類型thread_stack = 192K#設置MySQL每個線程的堆棧大小,默認值足夠大,可滿足普通操作。可設置范圍為128KB至4GB,默認為192kbtransaction_isolation = REPEATABLE-READ#數據庫隔離級別READ UNCOMMITTED=讀取未提交內容READ COMMITTED=讀取提交內容REPEATABLE READ=可重讀SERIALIZABLE=可串行化tmp_table_size = 64M#設置內存臨時表最大字號,如果超過該值,則會將臨時表寫入磁盤,其范圍1kb指4GBlog-bin=mysql-bin
binlog_format=mixed#表示開啟binlog日志 slow_query_log#記錄慢查詢,慢查詢是指消耗超過“long_query_time”中定義的總時間的查詢,如果“ log_short_format”沒有啟用,不使用索引的查詢。long_query_time = 2#記錄慢查詢的時間,所有超過該時間的查詢都將被視為緩慢的。# *** Replication related settings server-id = 1#1到32之間的唯一服務器標識號,如果是主從或多實例ID號不能相同key_buffer_size = 32M#指定用于索引的緩沖區大小,增加它可以得到更好的索引處理性能。對于內存在4GB左右的服務器來說,此參數可以設置256MGB或384MBbulk_insert_buffer_size = 64M#如果經常性的需要使用批量插入的特殊語語句來插入數據,可以適當調整參數至16MB~32MB,建議8M,設置0則禁用該優化myisam_sort_buffer_size = 128M#當MySQL需要REPAIR、OPTIMEIZE、ALTER表語句重建索引,以及LOAD DATA INFILE到一個空表時,該緩沖區被分配。可設置范圍48tytes至4GBmyisam_max_sort_file_size = 10G#當重新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)時,MySQL被允許使用臨時文件的最大值。myisam_repair_threads = 1#如果一個表擁有超過一個索引,MyISAM可以通過并行排序使用超過一個線程去修復myisam_recover#自動檢查和修復沒有正確關閉的MyISAM表innodb_file_io_threads = 4#InnoDB中的文件I/O線程,通常設置為4。如果是windows可以設置更大的值以提高磁盤I/O
innodb_additional_mem_pool_size = 16M#用來設置InnoDB存儲的數據目錄信息和其他內部數據結構的內存池大小,應用程序里的表越多,你需要在這里分配越多的內存。對于一個相對穩定的應用,這個參數的大小也是相對應的。如果InnoDB用光了這個池內的內存,InnoDB開始從操作系統分配內存,并且往MySQL錯誤日志寫警告信息。當發現錯誤日志中已經有相關的警告信息時,就應該適當的增加該參數的大小。innodb_buffer_pool_size = 2G#InnoDB使用一個緩沖池來保存索引和原始數據,設置越大,在存取里面數據時需要的磁盤I/O越少。強烈建議不要講InnoDB的buffer pool值配置為物理內存的50%-80%,應根據具體環境而定。innodb_data_file_path = ibdata1:10M:autoextend#設置配置一個可擴展大小的尺寸為10M的單獨未見,名為ibdata1沒有給出文件的位置,所以默認是在MySQL的數據目錄內,還可以自己制定數量,autoextend代表自增innodb_write_io_threads = 8#此處代表MySQL Innodb對I/O讀寫線程的支持,配太多也沒用,因為IO能力有限,需要配合特殊機型
innodb_read_io_threads = 8#在MySQL5.1.x版本中使用參數:innodb_file_io_threads:作用后臺線程處理數據頁上的讀寫IO請求數量;而在MySQL5.5.x中用innodb_read_io_threads和Innodb_write_io_threads取代此版本之前參數,該參數值之和=2*cpu個數*cpu核數;如果你的系統讀>寫,可以設置innodb_read_io_threads值相對大點;反之,也可以.#innodb_force_recovery=1innodb_thread_concurrency = 16#innoDB內核里面允許線程數量,最佳的高度取決于應用程序、硬件以及操作系統的調讀屬性。太高的值可能導致線程顛簸innodb_flush_log_at_trx_commit = 1#如果設置為1,InnoDB在每次提交(提供完整的 ACID行為)時刷新事務到磁盤。如果你想安全地進行折中,并且你正在運行小事務,你可以為0或者2來減少日志的磁盤I/O。值0代表只被寫入到日志文件,并且日志文件大約每1秒刷新到磁盤值2代表日志在每次提交時被寫入到日志,但是日志文件知識大約每秒一次刷新到磁盤innodb_log_buffer_size = 8M#InnoDB緩沖日志數據所使用的緩沖區大小,一旦它滿了,InnoDB將它刷新到磁盤。innodb_log_file_size = 256M#一個日志組中每個日志文件的大小,你可以設置日志的聯合大小為你緩沖池大小的25%-100%,以避免對日志文件不必要的緩沖池動態刷新重寫innodb_log_files_in_group = 3#日志組中文件的總數,通常值為2-3就已經足夠innodb_max_dirty_pages_pct = 90#InnoDB緩沖池中允許的臟頁面的最大百分比,如果它達到了,InnoDB將開始積極清理,以免消耗完所有的干凈頁面,這是一個軟限制,不保證能夠一直保持innodb_lock_wait_timeout = 120##InnoDB事務被回滾之前可以等待一個鎖定的超時描述,InnoDB在它自己的鎖定表中自動檢測事務死鎖并且回滾事務。InnoDB用local tables語句注意到鎖表設置[mysqldump]quickmax_allowed_packet = 16M#設定在網絡傳輸中一次消息量的最大值,最大值是1GB,必須設置為1024的倍數,單位為字節。
[mysql]
no-auto-rehash# Only allow UPDATEs and DELETEs that use keys.#只允許使用鍵值的updates和delete
#safe-updates[myisamchk]
key_buffer_size = 512M#指定用于索引的緩沖區大小,增加它可以更好的索引處理性能,對于內存4GB左右的服務器來說,該參數可以設置為256MB或384MB
sort_buffer_size = 512M#設置查詢排序時所能使用的緩沖區大小。注意:該參數對應的分配內存是每個連接獨占的,如果有100個鏈接,那么實際上分配的總排序緩沖區大小為100x6=600MB,所以對于在4GB左右的服務器來說推薦將其設置6MB~8MB
read_buffer = 8Mwrite_buffer = 8M[mysqlhotcopy]
interactive-timeout[mysqld_safe]
#Increase the amount of open files allowed per process. Warning: Make
#sure you have set the global system limit high enough! The high value
#is required for a large number of opened tables
open-files-limit = 8192#增加每次處理所允許打開的文件數量,確保你已經設置全局系統限制足夠高。對于一個大數量的打開表,高值是必須的
【my.cnf】-配置文件注解
[client] ####客戶端
port = 3306 ####mysql客戶端連接時的默認端口號
socket = /application/mysql-5.5.32/tmp/mysql.sock
[mysqld]
port = 3306 ####mysql服務器監聽的默認端口
socket = /application/mysql-5.5.32/tmp/mysql.sock
back_log = 50 ####是指保持在操作系統監聽隊列的連接數量,即在MySQL連接管理器線程處理他們之前的連接數量
max_connections = 100 ####MySQL允許的并發會話的最大數量
max_connect_errors = 10 ####每個主機允許的最大錯誤數量
table_open_cache = 2048 ####所有線程打開表的數字,文件描述符的大小
max_allowed_packet = 16M ####服務器一次能處理的最大的查詢包的值,也是服務器程序能夠處理的最大查詢
binlog_cache_size = 1M ####在一個事務中,二進制日志能夠處理SQL語句的緩存的最大數字,如果你經常使用復雜語句的事務,你可以增大這個值獲得更好的性能,事務中所有的語句都會被緩存到binlog中并且一次性的提交后立刻寫入二進制日志中。如果處理的事務大于這個值,磁盤上的臨時文件被代替使用,這個緩沖會在在事務中第一次有更改狀態時,被分配的每個鏈接上。
max_heap_table_size = 64M ####獨立的內存表所允許的最大容量
read_buffer_size = 2M ####MySql讀入緩沖區大小。
read_rnd_buffer_size = 16M ####是MySql的隨機讀緩沖區大小。
sort_buffer_size = 8M #### 排序緩沖被用來處理類似ORDER BY以及GROUP BY隊列所引起的排序
join_buffer_size = 8M ####此緩沖被使用來優化全聯合(full JOINs 不帶索引的聯合).
thread_cache_size = 8 ####我們在cache中保留多少線程用于重用
thread_concurrency = 8 ####此允許應用程序給予線程系統一個提示在同一時間給予渴望被運行的線程的數量.
query_cache_size = 64M ####查詢緩沖的大小。查詢緩沖常被用來緩沖 SELECT 的結果并且在下一次同樣查詢的時候不再執行直接返回結果.
query_cache_limit = 2M ####只有小于此設定值的結果才會被緩沖
ft_min_word_len = 4 #### 被全文檢索索引的最小的字長.
default-storage-engine = MYISAM ####當創建新表時作為默認使用的表類型
thread_stack = 192K ####線程使用的堆大小. 此容量的內存在每次連接時被預留
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M ####內部(內存中)臨時表的最大大小
log-bin=mysql-bin ####打開二進制日志功能.
binlog_format=mixed ####設定記錄二進制日志的格式,有三種格式,基于語句 statement、 基于行 row、 混合方式 mixed
slow_query_log ####記錄慢查詢,
long_query_time = 2 ####所有的超過這個參數時間的請求將被作為慢查詢
server-id = 1 ####唯一的服務標識號,它的取值在1到 2^32-1之間,這個值在主服務器和從服務器是被要求設置的。他的默認參數是1,如果是主機不需要設置,但是如果忽略此選項,MySQL不會作為master生效.
key_buffer_size = 32M ####關鍵詞緩沖的大小, 一般用來緩沖MyISAM表的索引塊.
bulk_insert_buffer_size = 64M ####MyISAM 使用特殊的類似樹的cache來使得突發插入,(這些插入是,INSERT … SELECT, INSERT … VALUES (…), (…), …, 以及 LOAD DATA INFILE) 更快. 此變量限制每個進程中緩沖樹的字節數.
myisam_sort_buffer_size = 128M ####當需要對于執行REPAIR, OPTIMIZE, ALTER 語句重建索引時,MySQL會分配這個緩存,以及LOAD DATA INFILE會加載到一個新表,它會根據最大的配置認真的分配的每個線程。
myisam_max_sort_file_size = 10G ####當重新建索引(REPAIR,ALTER,TABLE,或者LOAD,DATA,TNFILE)時,MySQL被允許使用臨時文件的最大值。
myisam_repair_threads = 1 ####如果一個表擁有超過一個索引, MyISAM 可以通過并行排序使用超過一個線程去修復他們.
myisam_recover ####自動檢查和修復沒有適當關閉的 MyISAM 表.
innodb_additional_mem_pool_size = 16M ####附加的內存池被InnoDB用來保存 metadata 信息
innodb_buffer_pool_size = 2G ####InnoDB使用一個緩沖池來保存索引和原始數據,
innodb_data_file_path = ibdata1:10M:autoextend ####InnoDB 將數據保存在一個或者多個數據文件中成為表空間.
innodb_write_io_threads = 8
innodb_read_io_threads = 8 ####用來同步IO操作的IO線程的數量.
innodb_thread_concurrency = 16 ####使用InnoDB引擎,內核被允許的線程數,這個最佳值取決于應用程序,硬件還有操作系統的調度程序。太高的值肯定會導致線程抖動。
innodb_flush_log_at_trx_commit = 1 ####如果設置為1 ,InnoDB會在每次提交后刷新(fsync)事務日志到磁盤上,
innodb_log_buffer_size = 8M ####用來緩沖日志數據的緩沖區的大小.
innodb_log_file_size = 256M ####在日志組中每個日志文件的大小,
innodb_log_files_in_group = 3 ####在日志組中文件的總量,通常2-3就足夠了
innodb_max_dirty_pages_pct = 90 ####在InnoDB緩沖池中最大允許的臟頁面的比例.
innodb_lock_wait_timeout = 120 ####在被回滾前,一個InnoDB的事務應該等待一個鎖被批準多久.
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192 ####每個程序允許打開文件的數量
轉載于:https://blog.51cto.com/jungiewolf/2113216