mysql linux文件_MySQL在Linux系统下配置文件详解
在日常的的開發(fā)過程中接觸到了SQLServer和MySQL數(shù)據(jù)庫的操作性問題,可能是以前接觸的都是SQL Server,才開始接觸MySQL,總感覺使用MySQL沒有使用SQLserver那么順手,一些關(guān)鍵的系統(tǒng)函數(shù),比如說開窗、行轉(zhuǎn)列、列轉(zhuǎn)行、自增字段等一系列的問題,雖然最后都找到了替代的方案,但是解決性能問題還是頗費了一些功夫的。對比了一下SQL Server、MySQL在Windows環(huán)境下、MySQL在linux環(huán)境下的性能,同樣的一個存儲過程,在存儲過程中建立了八個臨時表,并循環(huán)向每個臨時表里插入了十萬條數(shù)據(jù),字段大概有十二個左右,最后查詢出數(shù)據(jù),在SQL Server下用了6秒時間,在Linux下的MySQL中用了3秒多的時間,而在Windows環(huán)境下的MySQL改為了一千條數(shù)據(jù)耗費了六十多秒的時間。總的來說性能上的差別還是很大的,下面就來談?wù)凩inux下的MySQL的配置文件。
設(shè)置慢查詢時間的長度,以及慢查詢?nèi)罩敬娣诺奈恢?
long_query_time=1
slow_query_log_file = /var/log/mysql/mysql-slow.log
避免Mysql的外部鎖定,減少出錯幾率,增強穩(wěn)定性:
skip-external-locking
禁止MySql對外部連接進行DNS解析,使用這一選項可以消除MySQL進行NDS解析的時間。但##需要注意的是:如果開啟該選項,則所有遠程主機連接授權(quán)都要使用IP地址方式了,否則MYSQL將無法正常處理連接請求。
skip-name-resolve
back_log參數(shù)的值指出在MySQL暫時停止響應(yīng)新請求之前,短時間內(nèi)的多少個請求可以被存,在對堆棧中,如果系統(tǒng)短時間內(nèi)有很多連接,則需>要增大該參數(shù)的值,該參數(shù)值指定到來的TCP/IP連接的監(jiān)聽隊列的大小。不同的操作系統(tǒng)在這個隊列的大小有自己的限制,將back_log設(shè)定得高于操作系統(tǒng)的限制將是無效的,其默認(rèn)值為50,對于LINUX系統(tǒng)而言,推薦設(shè)置為小于512的整數(shù):
back_log=1200 binlog_cache_size=64M
索引緩沖區(qū)大小,增加它可得到更好的索引處理性能,對于內(nèi)存在4GB左右的服務(wù)器,該參數(shù)可設(shè)置為256M或384M。如果該參數(shù)值設(shè)置的過大>反而會使服務(wù)器的整體效率降低:
key_buffer_size=512M
設(shè)定在網(wǎng)絡(luò)傳輸中一次消息傳輸量的最大值,系統(tǒng)默認(rèn)值為1MB,最大值是1GB,必須設(shè)定為1024的倍數(shù),單位為字節(jié):
max_allowed_packet=64M
設(shè)置MySQL每個線程的堆棧大小,默認(rèn)值足夠大,可滿足普通操作。可設(shè)置范圍為128KB至4GB,默認(rèn)192K:
thread_stack=64M sort_buffer_size=64M
max_connect_errors = 6000 open_files_limit = 65535
table_open_cache=256 max_heap_table_size=16M
設(shè)置Thread Cache池中可以緩存的連接池線程最大數(shù)量,可設(shè)置為0-16384,默認(rèn)為0。1GB內(nèi)存我們配置為8,2GB內(nèi)存我們配置為16,4GB或4GB以上內(nèi)在我們配置為64:
thread_cache_size=128
指定Mysql查詢緩沖區(qū)的大小,可以通過在Mysql控制臺觀察,如果Qcache_lowmem_prunes的值非常大,則表明經(jīng)常出現(xiàn)緩沖不夠的情況,如果 Qcache_hits的值非常大,則表明查詢緩沖使用的非常頻繁 :
query_cache_size=64M
query_cache_limit=64M
設(shè)置內(nèi)在臨時表最大值,如果超過該值,則會將臨時表寫入磁盤,其范圍為1KB至4GB:
tmp_table_size=64M
指定MYSQL允許的最大連接進程數(shù),如果在訪問程序時經(jīng)常出現(xiàn)TOO MANY CONNECTIONS的錯誤提示,則需要增大該參數(shù)值:
max_connections=1500
max_user_connections=1500
指定一個請求的最大連接時間,對于4GB左右內(nèi)在的服務(wù)器來說,可以將其設(shè)置為5-10:
wait_timeout=100
該參數(shù)取值為服務(wù)器邏輯CPU數(shù)量*2,比如,服務(wù)器有兩個物理CPU,每個物理CPU支持HT超線程,所以實際取值4*2=8,這也是目前雙四核主流 服務(wù)器的配置:
join_buffer_size = 64M
開啟該選項可以徹底關(guān)閉MYSQL的TCP/IP連接方式,如果WEB服務(wù)器是以遠程連接的方式訪問MYSQL的數(shù)據(jù)庫服務(wù)器,則不要開啟該選項,否則>將無法正常連接。 skip-networking?? 抱怨Innodb比MyISAM慢 100倍?那么你大概是忘了調(diào)整這個值。默認(rèn)值1的意思是每一次事務(wù)提交或事務(wù)外的指令都需要把日志寫入(flush) 硬盤,這是很費時的。特別是使用電池供電緩存(Battery backed up cache)時。設(shè)成2對于很多運用,特別是從MyISAM表轉(zhuǎn)過來的是可以的>,它的意思是不寫入硬盤而是寫入系統(tǒng)緩存。日志仍然會每秒flush到硬 盤,所以你一般不會丟失超過1-2秒的更新。設(shè)成0會更快一點,但安>全方面比較差,即使MySQL掛了也可能會丟失事務(wù)的數(shù)據(jù)。而值2只會在整個操作系#統(tǒng) 掛了時才可能丟數(shù)據(jù):
innodb_flush_log_at_trx_commit=2
這是 InnoDB 存儲引擎的事務(wù)日志所使用的緩沖區(qū)。類似于 Binlog Buffer,InnoDB 在寫事務(wù)日志的時候,為了提高性能,也是先將信息寫>入 Innofb Log Buffer 中,當(dāng)滿足 innodb_flush_log_trx_commit 參數(shù)所設(shè)置的相應(yīng)條件(或者日志緩沖區(qū)寫滿)之后,才會將日志寫到文>件(或者同步到磁盤)中。可以通過 innodb_log_buffer_size 參數(shù)設(shè)置其可以使用的最大內(nèi)存空間:
innodb_log_buffer_size=64M
innodb_buffer_pool_size=64M
innodb_log_file_size=1G
innodb_file_per_table=1
innodb_read_io_threads=10
innodb_write_io_threads=10
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_io_capacity_max=1000
innodb_lru_scan_depth=500
innodb_thread_concurrency=0
innodb_autoinc_lock_mode=2
innodb_log_files_in_group=3
innodb_max_dirty_pages_pct=90
innodb_lock_wait_timeout=100
bulk_insert_buffer_size = 16M
innodb_thread_concurrency = 8
innodb_purge_threads = 1
tmp_table_size 的默認(rèn)大小是 32M。如果一張臨時表超出該大小,MySQL產(chǎn)生一個 The table tbl_name is full 形式的錯誤,如果你做很多 #高級 GROUP BY 查詢,增加 tmp_table_size 值:
tmp_table_size=512M
隨機讀取數(shù)據(jù)緩沖區(qū)使用內(nèi)存(read_rnd_buffer_size):和順序讀取相對應(yīng),當(dāng) MySQL 進行非順序讀取(隨機讀取)數(shù)據(jù)塊的時候,會利用>這個緩沖區(qū)暫存讀取的數(shù)據(jù)。如根據(jù)索引信息讀取表數(shù)據(jù),根據(jù)排序后的結(jié)果集與表進行Join等等。總的來說,就是當(dāng)數(shù)據(jù)塊的讀取需要滿足>一定的順序的情況下,MySQL 就需要產(chǎn)生隨機讀取,進而使用到 read_rnd_buffer_size 參數(shù)所設(shè)置的內(nèi)存緩沖區(qū):
read_rnd_buffer_size=128M
你最好在定義數(shù)據(jù)庫命名規(guī)則的時候就全部采用小寫字母加下劃線的組合,而不使用任何的大寫字母:
lower_case_table_names=1
設(shè)置校驗?zāi)J?:
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
默認(rèn)配置沒開查詢緩存:
explicit_defaults_for_timestamp
需要記錄進制日志的數(shù)據(jù)庫.如果有多個數(shù)據(jù)庫可用逗號分隔,或者使用多個binlog-do-db選項:
binlog-do-db=showeedb
不需要記錄進制日志的數(shù)據(jù)庫.如果有多個數(shù)據(jù)庫可用逗號分隔,或者使用多個binlog-do-db選項? :
binlog-ignore-db=mysql
需要進行同步的數(shù)據(jù)庫.如果有多個數(shù)據(jù)庫可用逗號分隔,或者使用多個replicate-do-db選項:
replicate-do-db=showeedb
不需要同步的數(shù)據(jù)庫.如果有多個數(shù)據(jù)庫可用逗號分隔,或者使用多個replicate-ignore-db選項:
replicate-ignore-db=mysql,test
同步參數(shù):
server-id=1
log_bin=/var/log/mysql/mysql-bin
保證slave掛在任何一臺master上都會接收到另一個master的寫入信息:
log-slave-updates
sync_binlog=1
auto_increment_offset=1
auto_increment_increment=2
過濾掉一些沒什么大問題的錯誤:
slave-skip-errors=all
總結(jié)
以上是生活随笔為你收集整理的mysql linux文件_MySQL在Linux系统下配置文件详解的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ASP.NET MVC 5 入门教程 (
- 下一篇: mysql group by 别名_[转