MySQL文件類型

前言:本文將介紹Mysql的各種類型的文件。

 

Mysql數據庫有以下幾種文件:

1.參數文件。

2.日誌文件。

3.套接字文件。

4.Pid文件。

5.表結構定義文件。

6.存儲引擎文件。

 

1.什麼是參數文件?

在Mysql的運行過程中,有許多規則是可以配置的,如使用哪個引擎,某種內存結構有多大等等?這些規則都記錄在了參數文件中,形如Key/Value的格式,可以人爲的去配置。

Mysql啓動時可以不需要參數文件,若沒有參數文件,則都使用默認配置。

linux下可以通過

mysql --help|grep my.cnf命令來查詢配置文件的位置。

下面是一份完整的配置文件:

[client]    
port = 3309   
socket = /home/mysql/mysql/tmp/mysql.sock    
[mysqld]    
!include /home/mysql/mysql/etc/mysqld.cnf #包含的配置文件 ,把用戶名,密碼文件單獨存放    
port = 3309   
socket = /home/mysql/mysql/tmp/mysql.sock    
pid-file = /longxibendi/mysql/mysql/var/mysql.pid    
basedir = /home/mysql/mysql/    
datadir = /longxibendi/mysql/mysql/var/    
# tmp dir settings    
tmpdir = /home/mysql/mysql/tmp/    
slave-load-tmpdir = /home/mysql/mysql/tmp/    
#當slave 執行 load data infile 時用    
#language = /home/mysql/mysql/share/mysql/english/    
character-sets-dir = /home/mysql/mysql/share/mysql/charsets/    
# skip options    
skip-name-resolve #grant 時,必須使用ip不能使用主機名    
skip-symbolic-links #不能使用連接文件    
skip-external-locking #不使用系統鎖定,要使用myisamchk,必須關閉服務器    
skip-slave-start #啓動mysql,不啓動複製    
#sysdate-is-now    
# res settings    
back_log = 50 #接受隊列,對於沒建立tcp連接的請求隊列放入緩存中,隊列大小爲back_log,受限制與OS參數    
max_connections = 1000 #最大併發連接數 ,增大該值需要相應增加允許打開的文件描述符數    
max_connect_errors = 10000 #如果某個用戶發起的連接error超過該數值,則該用戶的下次連接將被阻塞,直到管理員執行flush hosts ; 命令;防止黑客    
#open_files_limit = 10240   
connect-timeout = 10 #連接超時之前的最大秒數,在Linux平臺上,該超時也用作等待服務器首次迴應的時間    
wait-timeout = 28800 #等待關閉連接的時間    
interactive-timeout = 28800 #關閉連接之前,允許interactive_timeout(取代了wait_timeout)秒的不活動時間。客戶端的會話wait_timeout變量被設爲會話interactive_timeout變量的值。    
slave-net-timeout = 600 #從服務器也能夠處理網絡連接中斷。但是,只有從服務器超過slave_net_timeout秒沒有從主服務器收到數據才通知網絡中斷    
net_read_timeout = 30 #從服務器讀取信息的超時    
net_write_timeout = 60 #從服務器寫入信息的超時    
net_retry_count = 10 #如果某個通信端口的讀操作中斷了,在放棄前重試多次    
net_buffer_length = 16384 #包消息緩衝區初始化爲net_buffer_length字節,但需要時可以增長到max_allowed_packet字節    
max_allowed_packet = 64M #    
#table_cache = 512 #所有線程打開的表的數目。增大該值可以增加mysqld需要的文件描述符的數量    
thread_stack = 192K #每個線程的堆棧大小    
thread_cache_size = 20 #線程緩存    
thread_concurrency = 8 #同時運行的線程的數據 此處最好爲CPU個數兩倍。本機配置爲CPU的個數    
# qcache settings    
query_cache_size = 256M #查詢緩存大小    
query_cache_limit = 2M #不緩存查詢大於該值的結果    
query_cache_min_res_unit = 2K #查詢緩存分配的最小塊大小    
# default settings    
# time zone    
default-time-zone = system #服務器時區    
character-set-server = utf8 #server級別字符集    
default-storage-engine = InnoDB #默認存儲    
# tmp & heap    
tmp_table_size = 512M #臨時表大小,如果超過該值,則結果放到磁盤中    
max_heap_table_size = 512M #該變量設置MEMORY (HEAP)表可以增長到的最大空間大小    
log-bin = mysql-bin #這些路徑相對於datadir    
log-bin-index = mysql-bin.index    
relayrelay-log = relay-log    
relayrelay_log_index = relay-log.index    
# warning & error log    
log-warnings = 1   
log-error = /home/mysql/mysql/log/mysql.err    
log_output = FILE #參數log_output指定了慢查詢輸出的格式,默認爲FILE,你可以將它設爲TABLE,然後就可以查詢mysql架構下的slow_log表了    
# slow query log    
slow_query_log = 1   
long-query-time = 1 #慢查詢時間 超過1秒則爲慢查詢    
slow_query_log_file = /home/mysql/mysql/log/slow.log    
#log-queries-not-using-indexes    
#log-slow-slave-statements    
general_log = 1   
general_log_file = /home/mysql/mysql/log/mysql.log    
max_binlog_size = 1G   
max_relay_log_size = 1G   
# if use auto-ex, set to 0    
relay-log-purge = 1 #當不用中繼日誌時,刪除他們。這個操作有SQL線程完成    
# max binlog keeps days    
expire_logs_days = 30 #超過30天的binlog刪除    
binlog_cache_size = 1M #session級別    
# replication    
replicate-wild-ignore-table = mysql.% #複製時忽略數據庫及表    
replicate-wild-ignore-table = test.% #複製時忽略數據庫及表    
# slave_skip_errors=all   
key_buffer_size = 256M #myisam索引buffer,只有key沒有data    
sort_buffer_size = 2M #排序buffer大小;線程級別    
read_buffer_size = 2M #以全表掃描(Sequential Scan)方式掃描數據的buffer大小 ;線程級別    
join_buffer_size = 8M # join buffer 大小;線程級別    
read_rnd_buffer_size = 8M #MyISAM以索引掃描(Random Scan)方式掃描數據的buffer大小 ;線程級別    
bulk_insert_buffer_size = 64M #MyISAM 用在塊插入優化中的樹緩衝區的大小。註釋:這是一個per thread的限制    
myisam_sort_buffer_size = 64M #MyISAM 設置恢復表之時使用的緩衝區的尺寸,當在REPAIR TABLE或用CREATE INDEX創建索引或ALTER TABLE過程中排序 MyISAM索引分配的緩衝區    
myisam_max_sort_file_size = 10G #MyISAM 如果臨時文件會變得超過索引,不要使用快速排序索引方法來創建一個索引。註釋:這個參數以字節的形式給出.重建MyISAM索引(在REPAIR TABLE、ALTER TABLE或LOAD DATA INFILE過程中)時,允許MySQL使用的臨時文件的最大空間大小。如果文件的大小超過該值,則使用鍵值緩存創建索引,要慢得多。該值的單位爲字節    
myisam_repair_threads = 1 #如果該值大於1,在Repair by sorting過程中並行創建MyISAM表索引(每個索引在自己的線程內)    
myisam_recover = 64K#允許的GROUP_CONCAT()函數結果的最大長度    
transaction_isolation = REPEATABLE-READ    
innodb_file_per_table    
#innodb_status_file = 1   
#innodb_open_files = 2048   
innodb_additional_mem_pool_size = 100M #幀緩存的控制對象需要從此處申請緩存,所以該值與innodb_buffer_pool對應    
innodb_buffer_pool_size = 2G #包括數據頁、索引頁、插入緩存、鎖信息、自適應哈希所以、數據字典信息    
innodb_data_home_dir = /longxibendi/mysql/mysql/var/    
#innodb_data_file_path = ibdata1:1G:autoextend    
innodb_data_file_path = ibdata1:500M;ibdata2:2210M:autoextend #表空間    
innodb_file_io_threads = 4 #io線程數    
innodb_thread_concurrency = 16 #InnoDB試着在InnoDB內保持操作系統線程的數量少於或等於這個參數給出的限制    
innodb_flush_log_at_trx_commit = 1 #每次commit 日誌緩存中的數據刷到磁盤中    
innodb_log_buffer_size = 8M #事物日誌緩存    
innodb_log_file_size = 500M #事物日誌大小    
#innodb_log_file_size =100M   
innodb_log_files_in_group = 2 #兩組事物日誌    
innodb_log_group_home_dir = /longxibendi/mysql/mysql/var/#日誌組    
innodb_max_dirty_pages_pct = 90 #innodb主線程刷新緩存池中的數據,使髒數據比例小於90%    
innodb_lock_wait_timeout = 50 #InnoDB事務在被回滾之前可以等待一個鎖定的超時秒數。InnoDB在它自己的 鎖定表中自動檢測事務死鎖並且回滾事務。InnoDB用LOCK TABLES語句注意到鎖定設置。默認值是50秒    
#innodb_flush_method = O_DSYNC   
[mysqldump]    
quick    
max_allowed_packet = 64M   
[mysql]    
disable-auto-rehash #允許通過TAB鍵提示    
default-character-set = utf8   
connect-timeout = 3   
 

2.日誌文件

日誌文件是Mysql中很重要的文件,它記錄了Mysql對數據的操作,Mysql運行的情況等等。Mysql也需要日誌文件來保證事務的正常運行。

Mysql主要包括以下幾種日誌:錯誤日誌、查詢日誌、慢查詢日誌、事務日誌、二進制日誌;

錯誤日誌

在mysql數據庫中,錯誤日誌功能是默認開啓的。並且,錯誤日誌無法被禁止。默認情況下,錯誤日誌存儲在mysql數據庫的數據文件中。錯誤日誌文件通常的名稱爲hostname.err。其中,hostname表示服務器主機名。錯誤日誌信息可以自己進行配置的,錯誤日誌所記錄的信息是可以通過log-error和log-warnings來定義的,其中log-err是定義是否啓用錯誤日誌的功能和錯誤日誌的存儲位置,log-warnings是定義是否將警告信息也定義至錯誤日誌中。默認情況下錯誤日誌大概記錄以下幾個方面的信息:服務器啓動和關閉過程中的信息(未必是錯誤信息,如mysql如何啓動InnoDB的表空間文件的、如何初始化自己的存儲引擎的等等)、服務器運行過程中的錯誤信息、事件調度器運行一個事件時產生的信息、在從服務器上啓動服務器進程時產生的信息。

查詢日誌:

MySQL的查詢日誌記錄了所有MySQL數據庫請求的信息。無論這些請求是否得到了正確的執行。默認文件名爲hostname.log。默認情況下MySQL查詢日誌是關閉的。生產環境,如果開啓MySQL查詢日誌,對性能還是有蠻大的影響的。另外很多時候,MySQL慢查詢日誌基本可以定位那些出現性能問題的SQL,所以MySQL查詢日誌應用的場景其實不多,有點雞肋的感覺,它跟SQL Server中的profiler有點類似,但是這個不能跟蹤某個會話、用戶、客戶端。它只能對整個數據庫進行跟蹤。默認情況下查詢日誌是關閉的。由於查詢日誌會記錄用戶的所有操作,其中還包含增刪查改等信息,在併發操作大的環境下會產生大量的信息從而導致不必要的磁盤IO,會影響mysql的性能的。如若不是爲了調試數據庫的目的建議不要開啓查詢日誌。

慢查詢日誌:

慢查詢日誌是用來記錄執行時間超過指定時間的查詢語句。通過慢查詢日誌,可以查找出哪些查詢語句的執行效率很低,以便進行優化。一般建議開啓,它對服務器性能的影響微乎其微,但是可以記錄mysql服務器上執行了很長時間的查詢語句。可以幫助我們定位性能問題的。

事務日誌:

事務日誌(InnoDB特有的日誌)可以幫助提高事務的效率。使用事務日誌,存儲引擎在修改表的數據時只需要修改其內存拷貝,再把改修改行爲記錄到持久在硬盤上的事務日誌中,而不用每次都將修改的數據本身持久到磁盤。事務日誌採用追加的方式,因此寫日誌的操作是磁盤上一小塊區域內的順序I/O,而不像隨機I/O需要在磁盤的多個地方移動磁頭,所以採用事務日誌的方式相對來說要快得多。事務日誌持久以後,內存中被修改的數據在後臺可以慢慢的刷回到磁盤。目前大多數的存儲引擎都是這樣實現的,我們通常稱之爲預寫式日誌,修改數據需要寫兩次磁盤。如果數據的修改已經記錄到事務日誌並持久化,但數據本身還沒有寫回磁盤,此時系統崩潰,存儲引擎在重啓時能夠自動恢復這部分修改的數據。具有的恢復方式則視存儲引擎而定。

二進制日誌:

MySQL的二進制日誌(binary log)是一個二進制文件,主要用於記錄修改數據或有可能引起數據變更的MySQL語句。二進制日誌(binary log)中記錄了對MySQL數據庫執行更改的所有操作,並且記錄了語句發生時間、執行時長、操作數據等其它額外信息,但是它不記錄SELECT、SHOW等那些不修改數據的SQL語句。二進制日誌(binary log)主要用於數據庫恢復和主從複製,以及審計(audit)操作。

 

3.套接字文件

Unix系統下本地連接MySQL可以採用Unix域套接字方式,這種方式需要一個套接字(socket)文件。套接字文件可由參數socket控制。一般在/tmp目錄下,名爲mysql.sock

 

4.Pid文件

當MySQL實例啓動時,會將自己的進程ID寫入一個文件中——該文件即爲pid文件。該文件可由參數pid_file控制。默認路徑位於數據庫目錄下,文件名爲主機名.pid。

 

5.表結構文件

因爲MySQL插件式存儲引擎的體系結構的關係,MySQL對於數據的存儲是按照表的,所以每個表都會有與之對應的文件(對比SQL Server是按照每個數據庫下的所有表或索引都存在mdf文件中)。不論採用何種存儲引擎,MySQL都有一個以frm爲後綴名的文件,這個文件記錄了該表的表結構定義。二進制文件。frm還用來存放視圖的定義,如我們創建了一個v_a視圖,那麼對應地會產生一個v_a.frm文件,用來記錄視圖的定義,該文件是文本文件,可以直接使用cat命令進行查看

 

6.存儲引擎文件

前面介紹的五種文件都是Mysql數據庫自身的文件,和存儲引擎無關。除了這些文件外,每個存儲引擎還有自己獨有的文件。下面介紹InnoDB存儲引擎的相關文件。

 

6.1表空間文件。

InnoDB將存儲的數據按照表空間來存放,默認會有一個10M,名爲ibdata1的文件,該文件就是默認的表空間文件。InnoDB裏所有的數據都會存儲到該表空間文件中,可以人爲指定表空間文件,表空間文件可以有多個,也可以爲每一個表都生成一個表空間文件。

6.2重做日誌文件

默認情況下,InnoDB的數據目錄下回有倆個名爲ib_logfile0,ib_logfile1的文件,這就是重做日誌文件(redo file)。當Mysql當機或者異常時,重做日誌可以保證Mysql的數據不丟失。每個InnoDB至少有1個重做日誌文件組每個組下至少有2個重做日誌文件。

原文:https://blog.csdn.net/u012000209/article/details/84992013 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章