第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

全部開(kāi)發(fā)者教程
首頁(yè) 慕課教程 MySQL 進(jìn)階教程 MySQL 進(jìn)階教程 MySQL 物理組成-日志文件和數(shù)據(jù)文件

MySQL 物理組成-日志文件和數(shù)據(jù)文件

上一小節(jié),我們以一條查詢語(yǔ)句的執(zhí)行流程,系統(tǒng)了解了 MySQL 的邏輯架構(gòu)。那么,MySQL 的物理組成是咋樣的呢?本文繼續(xù)從物理組成這個(gè)角度來(lái)介紹 MySQL,希望大家對(duì) MySQL 的整體架構(gòu)組成能有更全面的了解。

1.物理組成

圖片描述上方是 MySQL 物理組成的簡(jiǎn)單示意圖,MySQL 大致上可以分為日志文件和數(shù)據(jù)文件兩大部分。

日志文件包括二進(jìn)制日志、InnoDB 在線 redo 日志、錯(cuò)誤日志、慢查詢?nèi)罩?、一般查詢?nèi)罩镜取?/p>

數(shù)據(jù)文件主要指不同存儲(chǔ)引擎的物理文件,不同數(shù)據(jù)文件的擴(kuò)展名是不一樣的,如 InnoDB 用 .ibd、MyISAM 用 .MYD。

除日志文件和數(shù)據(jù)文件外,還有配置文件 my.cnf、pid 文件 mysql.pid、socket 文件 mysql.sock。

1.1 日志文件

重要日志模塊:二進(jìn)制日志-binlog

二進(jìn)制日志,其實(shí)就是我們平常所說(shuō)的 binlog,它是 MySQL 重要的日志模塊,在 Server 層實(shí)現(xiàn)。

binlog 以二進(jìn)制形式,將所有修改數(shù)據(jù)的 query 記錄到日志文件中,包括 query 語(yǔ)句、執(zhí)行時(shí)間、相關(guān)事務(wù)信息等。

binlog 的開(kāi)啟,通過(guò)在配置文件 my.cnf 中,顯式指定參數(shù) log-bin=file_name。如果未指定 file_name,則會(huì)記錄為 mysql-bin.******(* 代表 0~9 之間的某個(gè)數(shù)字,表示日志的序號(hào))

log-bin = /mysql/log/mysql-bin # binlog的存儲(chǔ)路徑

下面為一條insert語(yǔ)句所生成的binlog內(nèi)容:

root@localhost [tempdb]>insert into a values(1);
Query OK, 1 row affected (0.00 sec)
[root@mysql-test-1 log]# mysqlbinlog --base64-output=decode-rows -vv mysql-bin.000017
#200413  0:18:17 server id 1873306  end_log_pos 556 	Write_rows: table id 280 flags: STMT_END_F
### INSERT INTO `tempdb`.`a`
### SET
###   @1=1 /* INT meta=0 nullable=1 is_null=0 */
# at 556
#200413  0:18:17 server id 1873306  end_log_pos 583 	Xid = 4713735
COMMIT/*!*/;

重要日志模塊:InnoDB redo log

redo log,是存儲(chǔ)引擎 InnoDB 生成的日志,主要為了保證數(shù)據(jù)的可靠性。redo log 記錄了 InnoDB 所做的所有物理變更和事務(wù)信息。

redo log 默認(rèn)存放在數(shù)據(jù)目錄下面,可以通過(guò)修改 innodb_log_file_size 和 innodb_log_files_in_group 來(lái)配置 redo log 的文件數(shù)量和每個(gè)日志文件的大小。

innodb_log_file_size = 1000M # 每個(gè)redo log文件的大小
innodb_log_files_in_group = 3 # redo log文件數(shù)量

錯(cuò)誤日志:error log

錯(cuò)誤日志,記錄 MySQL 每次啟動(dòng)關(guān)閉的詳細(xì)信息,以及運(yùn)行過(guò)程中比較嚴(yán)重的警告和錯(cuò)誤信息。

錯(cuò)誤日志默認(rèn)是關(guān)閉的,可以通過(guò)配置參數(shù) log-error 進(jìn)行開(kāi)啟,以及指定存儲(chǔ)路徑。

log-error = /mysql/log/mysql-error.log # 錯(cuò)誤日志的存儲(chǔ)路徑

1.1.4 慢查詢?nèi)罩荆簊low query log

慢查詢?nèi)罩?,記?MySQL 中執(zhí)行時(shí)間較長(zhǎng)的 query,包括執(zhí)行時(shí)間、執(zhí)行時(shí)長(zhǎng)、執(zhí)行用戶、主機(jī)等信息。

慢查詢?nèi)罩灸J(rèn)是關(guān)閉的,可以通過(guò)配置 slow_query_log 進(jìn)行開(kāi)啟。慢查詢的閾值和存儲(chǔ)路徑,通過(guò)配置參數(shù) long_query_time 和 slow_query_log_file 實(shí)現(xiàn)。

slow_query_log = 1 #開(kāi)啟慢查詢
long_query_time = 1 #設(shè)置慢查詢閾值為1s
slow_query_log_file = /mysql/log/mysql-slow.log #設(shè)置慢查詢?nèi)罩敬鎯?chǔ)路徑

1.1.5 一般查詢?nèi)罩荆篻eneral query log

一般查詢?nèi)罩?,記?MySQL 中所有的 query。慢查詢記錄的是超過(guò)閾值的 query,而一般查詢?nèi)罩居涗浀氖撬械?query。一般查詢?nèi)罩镜拈_(kāi)啟需要慎重,因?yàn)殚_(kāi)啟后對(duì) MySQL 的性能有比較大的影響。

一般查詢?nèi)罩灸J(rèn)是關(guān)閉的,可以通過(guò)配置參數(shù) general_log 進(jìn)行開(kāi)啟。存儲(chǔ)路徑可以通過(guò)配置參數(shù) general_log_file 來(lái)實(shí)現(xiàn)

general_log = OFF #默認(rèn)是關(guān)閉的
general_log_file = /mysql/data/mysql-general.log #設(shè)置查詢?nèi)罩敬鎯?chǔ)路徑

1.2 數(shù)據(jù)文件

.frm文件

.frm 文件存放表相關(guān)的元數(shù)據(jù),包括表結(jié)構(gòu)信息等。

每張表都有一個(gè)對(duì)應(yīng)的 .frm 文件,不管這張表使用哪種存儲(chǔ)引擎。

[root@mysql-test-1 tempdb]# ls -lrt *.frm
-rw-r----- 1 mysql mysql 8556 Apr 13 00:18 a.frm

InnoDB 引擎

.ibd 文件和 ibdata 文件都是 InnoDB 引擎的數(shù)據(jù)文件

  • 如果是獨(dú)享表空間的存儲(chǔ)方式,則使用.idb文件來(lái)存放數(shù)據(jù),每張表都會(huì)有一個(gè)單獨(dú)的 .ibd 文件。
  • 如果是共享表空間的存儲(chǔ)方式,則使用ibdata文件來(lái)存放數(shù)據(jù),所有表共用一個(gè) ibdata 文件。

是否開(kāi)啟獨(dú)享表空間,可以通過(guò)配置參數(shù) innodb_file_per_table 來(lái)實(shí)現(xiàn)。

innodb_file_per_table = 1  #1 為開(kāi)啟獨(dú)享表空間

下面為InnoDB表的創(chuàng)建語(yǔ)句,及相應(yīng)的數(shù)據(jù)文件:

root@localhost [tempdb]>create table a (id int) ENGINE = InnoDB;
Query OK, 0 rows affected (0.11 sec)

[root@mysql-test-1 tempdb]# ls -lrt a.*
-rw-r----- 1 mysql mysql  8556 Apr 13 01:57 a.frm
-rw-r----- 1 mysql mysql 98304 Apr 13 01:57 a.ibd

MyISAM引擎

MyISAM 引擎的數(shù)據(jù)文件包含 .MYD 文件和 .MYI 文件。

  • .MYD 文件,存放 MyISAM 的數(shù)據(jù),每張表都有一個(gè)單獨(dú)的 .MYD 文件。
  • .MYI 文件,存放 MyISAM 的索引相關(guān)信息,每張表都有一個(gè)單獨(dú)的 .MYI 文件,與 .MYD 文件的存儲(chǔ)路徑一致。

下面為 MyISAM 表的創(chuàng)建語(yǔ)句,及相應(yīng)的數(shù)據(jù)文件:

root@localhost [tempdb]>create table a (id int) ENGINE = MyISAM;
Query OK, 0 rows affected (0.01 sec)

[root@mysql-test-1 tempdb]# ls -lrt a.*
-rw-r----- 1 mysql mysql 8556 Apr 13 02:01 a.frm
-rw-r----- 1 mysql mysql 1024 Apr 13 02:01 a.MYI
-rw-r----- 1 mysql mysql    0 Apr 13 02:01 a.MYD

2. 小結(jié)

本文,我們主要介紹了 MySQL 的物理組成:日志文件和數(shù)據(jù)文件。其中 binlog 和 redo log 是最為重要的日志模塊,大家可能會(huì)有疑問(wèn),這兩份日志,到底有啥區(qū)別?更新語(yǔ)句跟這兩份日志,又有啥關(guān)系呢?我們?cè)谙乱还?jié),一起來(lái)尋找答案……