前言:本文將介紹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