# [client] port = 3306 socket = /tmp/mysql.sock default-character-set = utf8 [mysql] no-auto-rehash #僅允許使用鍵值的updates和deletes [mysqld] port = 3306 #msyql服務器端口號 basedir = /usr/local/mysql #mysql安裝目錄 datadir = /usr/local/mysql/data #mysql數據存放目錄 #datadir = /data/mysql/data #同上 socket = /usr/local/mysql/data/mysql.sock #sock文件 #字符集與校對規則 character-set-server = utf8 #默認字符集 collation-server = utf8_general_ci #設置校對規則 external-locking = FALSE #避免外部鎖定(減少出錯幾率,增加穩定性) skip-name-resolv #禁止外部連接進行DNS解析 skip-slave-start # 復制進程就不會隨着數據庫的啟動而啟動 http://blog.csdn.net/aeolus_pu/article/details/9419965 #master庫binlog參數相關 server-id = 1 #主從復制時,ID不能相同 #binlog_format = mixed #二進制日志格式(mixed、row、statement) binlog-cache-size = 32M #設置二進制日志緩存大小 sync-binlog = 1 #每隔N秒將緩存中的二進制日志記錄寫回硬盤 max_binlog_cache_size = 8M #最大的二進制Cache日志緩沖尺寸 max_binlog_size = 1G #單個二進制日志文件的最大值,默認1G,最大1G log-bin-index = /usr/local/mysql/data/mysql-bin.index #binlog索引文件位置 log-bin = /usr/local/mysql/data/mysql-bin #binlog日志存放目錄 expire_logs_days = 90 #二進制日志文件過期時間 #slave數據庫binlog參數 server-id = 10 #各數據庫id不能相同 log_slave_updates = 1 #級聯也使用 relay-log = /usr/lcoal/mysql/data/relay-bin #relady目錄 relay-log-info-file = /usr/local/mysql/data/relay-log.info #info目錄 slave-skip-errors = 1007,1008,1032,1062 #跳過主從復制時的錯誤 read-only = 1 #從服務器只讀,SQL線程不影響,具有super,root用戶不限制 master-connect-retry = 60 #主從復制丟失,重連間隔時間,默認60s #replicate-ignore-db = mysql #忽略mysql庫不同步 replicate-wild-do-table=testdb1.% replicate-wild-do-table=testdb2.% replicate-wild-do-table=testdb3.% #master半同步開啟參數 rpl_semi_sync_master_enabled = ON rpl_semi_sync_master_timeout = 10000 #rpl_semi_sync_master_wait_no_slave = ON #rpl_semi_sync_master_trace_level = 32 #slave半同步開啟參數 rpl_semi_sync_slave_enabled = ON #rpl_semi_sync_slave_trace_level = 32 back_log = 1000 #指出在MySQL暫時停止響應新請求之前,短時間內的多少個請求 open_files_limit = 1024 #打開文件的最大個數,如果出現too mantopen files之類的就需要調整該值了 #連接相關 max_connections = 2000 #指定MySQL允許的最大連接進程數,show global variables like '%connections%'; http://elf8848.iteye.com/blog/1847445 max_user_connections = 2000 #單用戶最大的連接數,max_user_connections < 實例 max_user_connections < max_connections max_connect_errors = 100000 #默認為10,設置每個主機的連接請求異常中斷的最大次數,超過后會blocked,連接成功后初始0,出現錯誤后需要flush hosts max_allowed_packet = 8M #服務器一次能處理的最大的查詢包的值 wait_timeout = 360 #指定一個請求的最大連接時間 interactive_timeout = 360 #連接保持活動的時間 #訪問日志 #general_log = on #general_log_file = /usr/local/mysql/data/mysql_access.log #錯誤日志 log_error = /data/mysql/data/mysql_error.log #慢查詢相關參數 slow_query_log = on #開啟慢查詢 log-queries-not-using-indexes #記錄所有沒有使用到索引的查詢語句 long_query_time = 2 #指定多少秒未返回結果的查詢屬於慢查詢 min_examined_row_limit = 5 #記錄那些由於查找了多余5次而引發的慢查詢 log-slow-admin-statements #記錄那些慢的OPTIMIZE TABLE,ANALYZE TABLE和ALTER TABLE語句 log-slow-slave-statements #記錄由slave所產生的慢查詢 slow_query_log_file = /usr/local/mysql/data/slow.log #指定慢查詢日志文件路徑 table_cache = 614 #表分配的內存,物理內存越大,設置就越大 table_open_cache = 512 #設置高速緩存表的數目 thread_cache_size = 64 #服務器線程緩存數,與內存大小有關(建議大於3G設置為64) thread_concurrency = 32 #CPU核數的兩倍 query_cache_size = 32M #指定MySQL查詢緩沖區的大小 query_cache_limit = 2M #只有小於此設置值的結果才會被緩存 query_cache_min_res_unit = 2k #設置查詢緩存分配內存的最小單位 key_buffer_size = 512M #指定用於索引的緩沖區大小,增加它可得到更好的索引處理性能 sort_buffer_size = 2M #設置查詢排序時所能使用的緩沖區大小,系統默認大小為2MB join_buffer_size = 1M #聯合查詢操作所能使用的緩沖區大小 read_buffer_size = 4M #讀查詢操作所能使用的緩沖區大小 read_rnd_buffer_size = 16M #設置進行隨機讀的時候所使用的緩沖區 thread_stack = 192K #設置Mysql每個線程的堆棧大小,默認值足夠大,可滿足普通操作 bulk_insert_buffer_size = 8M #可以適當調整參數至16MB~32MB,建議8MB #myisam參數引擎相關 myisam_sort_buffer_size = 128M myisam_max_sort_file_size = 10G myisam_repair_threads = 1 myisam_recover #自動檢查和修復沒有適當關閉的MyISAM表 key_buffer_size = 16M #myisam索引buffer,只有key沒有data transaction_isolation = READ-COMMITTED #事務隔離級別 tmp_table_size = 64M #設置內存臨時表最大值 max_heap_table_size = 64M #獨立的內存表所允許的最大容量 #innodb引擎參數相關 default-storage-engine=InnoDB #默認表的類型為InnoDB innodb_old_blocks_time =1000 #減小單次的大批量數據查詢,默認為0,調整后性能提升80% http://www.cnblogs.com/cenalulu/archive/2012/10/10/2718585.html innodb_flush_method = O_DIRECT #從innode刷新到磁盤,不經過系統write,fdatasync(默認),O_DSYNC,O_DIRECT http://blog.csdn.net/jiao_fuyou/article/details/16113403 innodb_additional_mem_pool_size = 16M #設置InnoDB存儲的數據目錄信息和其他內部數據結構的內存池大小 innodb_buffer_pool_size = 51G #InnoDB使用一個緩沖池來保存索引和原始數據,官方建議物理內存的80% innodb_data_file_path = ibdata1:128M:autoextend #表空間 innodb_file_io_threads = 4 #InnoDB中的文件I/O線程,通常設置為4,innodb除master線程外,還有insert buffer, log, read, write這4種線程,默認各有一個 innodb_read_io_threads = 8 innodb_write_io_threads = 8 innodb_thread_concurrency = 8 #服務器有幾個CPU就設置為幾,建議用默認設置,一般設為8 innodb_flush_log_at_trx_commit = 2 #設置為0就等於innodb_log_buffer_size隊列滿后再統一存儲,默認為1 innodb_log_buffer_size = 16M #默認為1MB,通常設置為6-8MB就足夠 innodb_log_file_size = 512M #確定日志文件的大小,更大的設置可以提高性能,但也會增加恢復數據庫的時間 innodb_log_files_in_group = 3 #為提高性能,MySQL可以以循環方式將日志文件寫到多個文件。推薦設置為3 innodb_max_dirty_pages_pct = 90 #InnoDB主線程刷新緩存池中的數據 innodb_lock_wait_timeout = 120 #InnoDB事務被回滾之前可以等待一個鎖定的超時秒數 innodb_file_per_table = 1 #InnoDB為獨立表空間模式,每個數據庫的每個表都會生成一個數據空間,0關閉,1開啟 innodb_autoextend_increment = 256 #這個參數的作用是控制innodb 共享表空間文件自動擴展的大小 [mysqldump] quick max_allowed_packet = 64M [mysqld_safe] log-error = /usr/local/mysql/data/mysql.err pid-file = /usr/local/mysql/data/mysqld.pid 查詢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 王導DBA 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