MySQL的文件系統(Linux環境)

来源:https://www.cnblogs.com/herecwh/archive/2022/05/07/16242893.html
-Advertisement-
Play Games

Linux環境下,MySQL的主要目錄及其作用、資料庫和數據表在文件系統上的存儲結構。 ...


目錄

資料庫文件目錄

/var/lib/mysql/

可通過以下sql命令查看:

mysql> show variables like 'datadir';
+---------------+-----------------+
| Variable_name | Value           |
+---------------+-----------------+
| datadir       | /var/lib/mysql/ |
+---------------+-----------------+
1 row in set (0.00 sec)

相關命令目錄

/usr/bin/

mysqladmin、mysqlbinlog、mysqldump等命令

[root@shanghai01 bin]# cd /usr/bin
[root@shanghai01 bin]# find . -name "*mysql*"
./mysql_secure_installation
./mysql_upgrade
./mysql_migrate_keyring
./mysql_config_editor
./mysqlimport
./mysqlpump
./mysql
./mysqlslap
./mysqld_pre_systemd
./mysqlshow
./mysqlbinlog
./mysqldumpslow
./mysql_ssl_rsa_setup
./mysqlcheck
./mysqladmin
./mysqldump
./mysql_tzinfo_to_sql

/usr/sbin/

[root@shanghai01 bin]# cd /usr/sbin
[root@shanghai01 sbin]# find . -name "*mysql*"
./mysqld
./mysqld-debug

配置文件目錄

/usr/share/mysql-8.0/

錯誤消息,字元集、安裝文件和配置文件等

[root@shanghai01 mysql-8.0]# cd /usr/share/mysql-8.0
[root@shanghai01 mysql-8.0]# ll
total 1100
drwxr-xr-x 2 root root   4096 Apr 25 00:25 bulgarian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 charsets
drwxr-xr-x 2 root root   4096 Apr 25 00:25 czech
drwxr-xr-x 2 root root   4096 Apr 25 00:25 danish
-rw-r--r-- 1 root root  25575 Dec 18 00:07 dictionary.txt
drwxr-xr-x 2 root root   4096 Apr 25 00:25 dutch
drwxr-xr-x 2 root root   4096 Apr 25 00:25 english
drwxr-xr-x 2 root root   4096 Apr 25 00:25 estonian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 french
drwxr-xr-x 2 root root   4096 Apr 25 00:25 german
drwxr-xr-x 2 root root   4096 Apr 25 00:25 greek
drwxr-xr-x 2 root root   4096 Apr 25 00:25 hungarian
-rw-r--r-- 1 root root   3999 Dec 18 00:07 innodb_memcached_config.sql
-rw-r--r-- 1 root root   2216 Dec 18 00:58 install_rewriter.sql
drwxr-xr-x 2 root root   4096 Apr 25 00:25 italian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 japanese
drwxr-xr-x 2 root root   4096 Apr 25 00:25 korean
-rw-r--r-- 1 root root 616528 Dec 18 00:07 messages_to_clients.txt
-rw-r--r-- 1 root root 359072 Dec 18 00:07 messages_to_error_log.txt
-rw-r--r-- 1 root root   1977 Dec 18 00:58 mysql-log-rotate
drwxr-xr-x 2 root root   4096 Apr 25 00:25 norwegian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 norwegian-ny
drwxr-xr-x 2 root root   4096 Apr 25 00:25 polish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 portuguese
drwxr-xr-x 2 root root   4096 Apr 25 00:25 romanian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 russian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 serbian
drwxr-xr-x 2 root root   4096 Apr 25 00:25 slovak
drwxr-xr-x 2 root root   4096 Apr 25 00:25 spanish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 swedish
drwxr-xr-x 2 root root   4096 Apr 25 00:25 ukrainian
-rw-r--r-- 1 root root   1248 Dec 18 00:58 uninstall_rewriter.sql

/etc/my.cnf

[root@shanghai01 /]# cat /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

文件

資料庫在文件系統中的表示

除了information_schema這個系統資料庫外,其他的資料庫在數據目錄下都有對應的子目錄。

[root@shanghai01 ~]# cd /var/lib/mysql/
[root@shanghai01 mysql]# ll
total 188876
-rw-r----- 1 mysql mysql       56 Apr 25 00:43 auto.cnf
-rw-r----- 1 mysql mysql     1433 Apr 25 11:26 binlog.000001
-rw-r----- 1 mysql mysql       16 Apr 25 00:48 binlog.index
-rw------- 1 mysql mysql     1676 Apr 25 00:43 ca-key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 ca.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 client-cert.pem
-rw------- 1 mysql mysql     1676 Apr 25 00:43 client-key.pem
-rw-r----- 1 mysql mysql   196608 Apr 25 12:11 #ib_16384_0.dblwr
-rw-r----- 1 mysql mysql  8585216 Apr 25 00:43 #ib_16384_1.dblwr
-rw-r----- 1 mysql mysql     5517 Apr 25 00:43 ib_buffer_pool
-rw-r----- 1 mysql mysql 12582912 Apr 25 12:11 ibdata1
-rw-r----- 1 mysql mysql 50331648 Apr 25 12:11 ib_logfile0
-rw-r----- 1 mysql mysql 50331648 Apr 25 00:43 ib_logfile1
-rw-r----- 1 mysql mysql 12582912 Apr 25 00:48 ibtmp1
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:48 #innodb_temp
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 mysql
-rw-r----- 1 mysql mysql 25165824 Apr 25 11:25 mysql.ibd
srwxrwxrwx 1 mysql mysql        0 Apr 25 00:48 mysql.sock
-rw------- 1 mysql mysql        6 Apr 25 00:48 mysql.sock.lock
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 performance_schema
-rw------- 1 mysql mysql     1680 Apr 25 00:43 private_key.pem
-rw-r--r-- 1 mysql mysql      452 Apr 25 00:43 public_key.pem
-rw-r--r-- 1 mysql mysql     1112 Apr 25 00:43 server-cert.pem
-rw------- 1 mysql mysql     1676 Apr 25 00:43 server-key.pem
drwxr-x--- 2 mysql mysql     4096 Apr 25 00:43 sys
-rw-r----- 1 mysql mysql 16777216 Apr 25 11:27 undo_001
-rw-r----- 1 mysql mysql 16777216 Apr 25 00:55 undo_002

MySQL5.7中會在資料庫子目錄下生成db.opt文件,用於保存資料庫的相關配置。比如:字元集、比較規則。而MySQL8.0不再提供db.opt文件。

表在文件系統中的表示

創建測試資料庫和表

CREATE DATABASE db_innodb_myisam;

USE db_innodb_myisam;

CREATE TABLE tb_innodb
(
    id INT PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL
)
    ENGINE = innodb;

SHOW CREATE TABLE tb_innodb;

CREATE TABLE tb_myisam
(
    id INT PRIMARY KEY,
    NAME VARCHAR(20) NOT NULL
)
    ENGINE = myisam;

SHOW CREATE TABLE tb_myisam;

查看資料庫目錄下的文件

[root@shanghai01 mysql]# cd /var/lib/mysql/db_innodb_myisam/
[root@shanghai01 db_innodb_myisam]# ll
total 120
-rw-r----- 1 mysql mysql 114688 May  7 14:50 tb_innodb.ibd
-rw-r----- 1 mysql mysql   2901 May  7 14:51 tb_myisam_363.sdi
-rw-r----- 1 mysql mysql      0 May  7 14:51 tb_myisam.MYD
-rw-r----- 1 mysql mysql   1024 May  7 14:51 tb_myisam.MYI

InnoDB存儲引擎模式

表結構:

在mysql8以前,為了保存表結構,InnoDB會在數據目錄下對應的資料庫子目錄下創建一個專門用於描述表結構的文件,文件名是表名.frm,這個尾碼名為.frm是以二進位格式存儲的。在mysql8中,表結構和表數據一起存在尾碼名為.ibd的文件中。

表中數據和索引:

系統表空間

預設情況下,InnoDB會在數據目錄下創建一個名為ibdata1、大小為12M的文件,這個文件就是系統表空間在文件系統上的表示。這個文件是自擴展文件,當不夠用的時候它會自己增加文件大小。

當然,如果想讓系統表空間對應文件系統上多個實際文件,或者想要修改ibdata1這個文件名,那可以在MySQL啟動時,配置對應的文件路徑以及它們的大小,比如這樣修改一下my.cnf配置文件:

[server]
innodb_data_file_path=data1:512M;data2:512M:autoextend

獨立表空間

在MySQL5.6.6以及之後的版本中,InnoDB並不會預設的把各個表的數據存儲到系統表空間中,而是為每一個表建立一個獨立表空間,也就是說我們創建了多少個表,就有多少個獨立表空間。

使用獨立表空間來存儲表數據的話,會在該表所屬資料庫對應的子目錄下創建一個表示該獨立表空間的文件,文件名和表名相同,只不過添加了一個.ibd的擴展名而已,所以完整的文件名稱長這樣:表名.ibd

例如tb_innodb.ibd中存儲了測試表tb_innodb的結構、數據、索引。

可以用ibd2sdi工具解析ibd文件。

系統表空間與獨立表空間的設置

可以自己指定使用系統表空間還是獨立表空間來存儲數據,這個功能由啟動參數innodb_file_per_table控制,比如說我們想刻意將表數據都存儲到系統表空間時,可以在啟動MySQL伺服器的時候這樣配置:

[server]
innodb_file_per_table=0 # 0:代表使用系統表空間; 1:代表使用獨立表空間

其他類型的表空間

隨著MySQL的發展,除了上述兩種老牌表空間之外,現在還新提出了一些不同類型的表空間,比如通用
表空間(general tablespace)、臨時表空間(temporary tablespace)等。

MyISAM存儲引擎模式

表結構:

mysql8中尾碼為.sdi,mysql5.7中尾碼為.frm。

例如tb_myisam_363.sdi中存儲了測試表tb_myisam表結構。

表中數據和索引:

在MyISAM中的索引全部都是二級索引,該存儲引擎的數據和索引是分開存放的。所以在文件系統中也是使用不同的文件來存儲數據文件和索引文件,同時表數據都存放在對應的資料庫子目錄下。

例如tb_myisam.MYD存儲數據(MYData)、tb_myisam.MYI存儲索引(MYIndex)。

參考資料:

  • MySQL - 尚矽谷 - 宋紅康
  • MySQL官方文檔

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 大家好,我是痞子衡,是正經搞技術的痞子。今天痞子衡給大家介紹的是i.MXRT1xxx系列MCU時鐘相關功能引腳作用。 如果我們從一顆 MCU 晶元的引腳分類來看晶元功能,大概可以分為三大類:電源、時鐘、外設功能。作為嵌入式開發者,大部分時候關註得都是外設功能引腳,而對於時鐘相關引腳往往不太在意,其實 ...
  • Linux小白,可能描述的不規範,請見諒 事情經過 有一次我樹莓派由於某種原因導致桌面某個組件卡死,於是我就在跳出的“未響應”(類似windows的No Response視窗)點擊'End Process'後,桌面的菜單欄還在,但是圖標不見了。 這時我右鍵點擊桌面,發現右鍵菜單與之前截然不同(應該是 ...
  • CH32V103C8T6是沁恆的RISC-V內核MCU, 基於RISC-V3A處理器, 內核採用2級流水線處理,設置了靜態分支預測、指令預取機制,支持DMA. 需要準備一片 WCH-Link 用於燒錄沁恆的晶元. 市面上有相容 DAP-Link 和 WCH-Link 的燒錄器. 註意看燒錄器的說明,... ...
  • UART,全稱Universal Asynchronous Receiver Transmitter,通用非同步收發器,俗稱串口。作為最常用的通信介面之一,從8位單片機到64位SoC,一般都會提供UART介面。 ...
  • Mysql複習的一個小總結,用xmind寫的。(字數沒有都不給我發博客😹) 下麵是一些備註 子查詢 MySQL子查詢稱為內部查詢,而包含子查詢的查詢稱為外部查詢。 子查詢可以在使用表達式的任何地方使用,並且必須在括弧中關閉。 視圖 基本語法可以使用 CREATE VIEW 語句來創建視圖。 語法格 ...
  • ​大數據概述 在大數據這個概念興起之前,信息系統存儲數據的方法主要是我們熟知的關係型資料庫,關係型資料庫,關係型模型之父 Edgar F. Codd,在 1970 年 Communications of ACM 上發表了《大型共用資料庫數據的關係模型》的經典論文,從此之後關係模型的語義設計達到了 4 ...
  • 一、下載安裝IDEA IDEA2020.2.3版本:https://www.cnblogs.com/liugp/p/13868346.html 最新版本安裝詳情請參考:https://www.jb51.net/article/196349.htm 二、搭建本地hadoop環境(window10) 可 ...
  • MySQL8新增降序索引 桃花塢里桃花庵,桃花庵里桃花仙。桃花仙人種桃樹,又摘桃花賣酒錢。 一、MySQL5.7 降序索引 MySQL在語法上很早就已經支持降序索引,但實際上創建的卻仍然是升序索引,如下MySQL 5.7 所示,row2欄位降序,但是從show create table看 row2  ...
一周排行
    -Advertisement-
    Play Games
  • 前言 推薦一款基於.NET 8、WPF、Prism.DryIoc、MVVM設計模式、Blazor以及MySQL資料庫構建的企業級工作流系統的WPF客戶端框架-AIStudio.Wpf.AClient 6.0。 項目介紹 框架採用了 Prism 框架來實現 MVVM 模式,不僅簡化了 MVVM 的典型 ...
  • 先看一下效果吧: 我們直接通過改造一下原版的TreeView來實現上面這個效果 我們先創建一個普通的TreeView 代碼很簡單: <TreeView> <TreeViewItem Header="人事部"/> <TreeViewItem Header="技術部"> <TreeViewItem He ...
  • 1. 生成式 AI 簡介 https://imp.i384100.net/LXYmq3 2. Python 語言 https://imp.i384100.net/5gmXXo 3. 統計和 R https://youtu.be/ANMuuq502rE?si=hw9GT6JVzMhRvBbF 4. 數 ...
  • 本文為大家介紹下.NET解壓/壓縮zip文件。雖然解壓縮不是啥核心技術,但壓縮性能以及進度處理還是需要關註下,針對使用較多的zip開源組件驗證,給大家提供個技術選型參考 之前在《.NET WebSocket高併發通信阻塞問題 - 唐宋元明清2188 - 博客園 (cnblogs.com)》講過,團隊 ...
  • 之前寫過兩篇關於Roslyn源生成器生成源代碼的用例,今天使用Roslyn的代碼修複器CodeFixProvider實現一個cs文件頭部註釋的功能, 代碼修複器會同時涉及到CodeFixProvider和DiagnosticAnalyzer, 實現FileHeaderAnalyzer 首先我們知道修 ...
  • 在軟體行業,經常會聽到一句話“文不如表,表不如圖”說明瞭圖形在軟體應用中的重要性。同樣在WPF開發中,為了程式美觀或者業務需要,經常會用到各種個樣的圖形。今天以一些簡單的小例子,簡述WPF開發中幾何圖形(Geometry)相關內容,僅供學習分享使用,如有不足之處,還請指正。 ...
  • 在 C# 中使用 RabbitMQ 通過簡訊發送重置後的密碼到用戶的手機號上,你可以按照以下步驟進行 1.安裝 RabbitMQ 客戶端庫 首先,確保你已經安裝了 RabbitMQ 客戶端庫。你可以通過 NuGet 包管理器來安裝: dotnet add package RabbitMQ.Clien ...
  • 1.下載 Protocol Buffers 編譯器(protoc) 前往 Protocol Buffers GitHub Releases 頁面。在 "Assets" 下找到適合您系統的壓縮文件,通常為 protoc-{version}-win32.zip 或 protoc-{version}-wi ...
  • 簡介 在現代微服務架構中,服務發現(Service Discovery)是一項關鍵功能。它允許微服務動態地找到彼此,而無需依賴硬編碼的地址。以前如果你搜 .NET Service Discovery,大概率會搜到一大堆 Eureka,Consul 等的文章。現在微軟為我們帶來了一個官方的包:Micr ...
  • ZY樹洞 前言 ZY樹洞是一個基於.NET Core開發的簡單的評論系統,主要用於大家分享自己心中的感悟、經驗、心得、想法等。 好了,不賣關子了,這個項目其實是上班無聊的時候寫的,為什麼要寫這個項目呢?因為我單純的想吐槽一下工作中的不滿而已。 項目介紹 項目很簡單,主要功能就是提供一個簡單的評論系統 ...