
[MySQL] 數(shù)據(jù)目錄的組織架構(gòu) 歸根到底,MySQL是運(yùn)行在操作系統(tǒng)上的一個(gè)軟件,它需要借助于文件系統(tǒng)存儲(chǔ)數(shù)據(jù),本文主要介紹MySQL數(shù)據(jù)目錄的組織架構(gòu)。 數(shù)據(jù)目錄的位置 可以通過以下幾個(gè)方法查看MySQL數(shù)據(jù)目錄的位置:1)對(duì)于一個(gè)正在運(yùn)行的MySQL服務(wù)器來說,可
[MySQL] 數(shù)據(jù)目錄的組織架構(gòu)
歸根到底,MySQL是運(yùn)行在操作系統(tǒng)上的一個(gè)軟件,它需要借助于文件系統(tǒng)存儲(chǔ)數(shù)據(jù),本文主要介紹MySQL數(shù)據(jù)目錄的組織架構(gòu)。
數(shù)據(jù)目錄的位置
可以通過以下幾個(gè)方法查看MySQL數(shù)據(jù)目錄的位置:
1)對(duì)于一個(gè)正在運(yùn)行的MySQL服務(wù)器來說,可以通過查看mysqld的進(jìn)程獲取MySQL數(shù)據(jù)目錄的位置,如下所示:
[root@lx202 /data/mysql/data ]# ps -ef|grep mysqld
root 5841 7337 0 15:09 pts/1 00:00:00 grep --color=auto mysqld
root 27034 1 0 2012 ? 00:00:00 /bin/sh /opt/mysql/bin/mysqld_safe --datadir=/data/mysql/data --pid-file=/data/mysql/data/lx202.pid
mysql 27889 27034 30 2012 ? 111-03:03:55 /opt/mysql/bin/mysqld --basedir=/opt/mysql --datadir=/data/mysql/data --plugin-dir=/opt/mysql/lib/mysql/plugin --user=mysql --log-error=/data/mysql/log/alert.log --open-files-limit=65535 --pid-file=/data/mysql/data/lx202.pid --socket=/opt/mysql/run/mysql.sock --port=3306
其中的--datadir指定的就是數(shù)據(jù)目錄的位置。
2)查看my.cnf的配置信息:
[mysqld]
datadir = /data/mysql/data
3)登陸數(shù)據(jù)庫,運(yùn)行show variables命令查看:
mysql> show variables like 'datadir';
+---------------+-------------------+
| Variable_name | Value |
+---------------+-------------------+
| datadir | /data/mysql/data/ |
+---------------+-------------------+
1 row in set (0.00 sec)
數(shù)據(jù)庫在文件系統(tǒng)的表示方法
MySQL里,每個(gè)數(shù)據(jù)庫都對(duì)應(yīng)一個(gè)數(shù)據(jù)目錄里的一個(gè)字目錄,當(dāng)你用create database db_name語句創(chuàng)建一個(gè)數(shù)據(jù)庫時(shí),將在數(shù)據(jù)目錄下創(chuàng)建一個(gè)同名的子目錄,在該子目錄下,有一個(gè)db.opt文件,用于記錄數(shù)據(jù)庫默認(rèn)的字符集和排序方式,如下所示:
[root@lx202 /data/mysql/data/portal ]# cat db.opt
default-character-set=utf8
default-collation=utf8_general_ci
表在文件系統(tǒng)的表示方式
因?yàn)镸ySQL支持多個(gè)存儲(chǔ)引擎,所以表在文件系統(tǒng)的表示方式根據(jù)存儲(chǔ)引擎的不同而不同。但無論哪種存儲(chǔ)引擎,每個(gè)表至少對(duì)應(yīng)一個(gè)同名的.frm文件,該文件用于描述表結(jié)構(gòu)信息。除了.frm文件之外,各個(gè)存儲(chǔ)引擎用于存儲(chǔ)數(shù)據(jù)的文件各不相同,下面我們介紹幾種常見的存儲(chǔ)引擎:
MyISAM
- table_name.MYD:數(shù)據(jù)文件
- table_name.MYI:索引文件
MERGE
- table_name.MRG:文本文件
InnoDB
InnoDB表的存儲(chǔ)是基于表空間的,有兩種類型的表空間:
1)共享表空間:由數(shù)據(jù)目錄里的一個(gè)或多個(gè)大文件構(gòu)成,這些文件共同組成了一個(gè)在邏輯上連續(xù)不斷的存儲(chǔ)區(qū)域,共享表空間是通過參數(shù)innodb_data_file_path設(shè)置的,如下所示:
innodb_data_file_path = ibdata1:10G;ibdata2:5G:autoextend
根據(jù)上面的配置,將在數(shù)據(jù)目錄下創(chuàng)建兩個(gè)文件ibdata1和ibdata2來存放innodb的數(shù)據(jù)。
2)獨(dú)占表空間:當(dāng)設(shè)置innodb_file_per_table = 1后,每個(gè)表對(duì)對(duì)應(yīng)一個(gè)單獨(dú)使用的表空間文件.ibd(在其對(duì)應(yīng)的數(shù)據(jù)庫目錄下)
這里需要注意的是:即使你配置了獨(dú)占表空間,共享表空間也是需要的,因?yàn)镮nnoDB的數(shù)據(jù)字典必須存放在共享表空間里。
視圖和觸發(fā)器在文件系統(tǒng)的表示方式
每個(gè)視圖包含一個(gè).frm文件,它包含該視圖的定義和屬性等。
觸發(fā)器保存在一個(gè).TRG文件里,里面包含著它的定義和屬性,但文件不是以觸發(fā)器命名,而是以觸發(fā)器相關(guān)聯(lián)的表命名。
存儲(chǔ)過程和函數(shù)在文件系統(tǒng)的表示方法
MySQL的存儲(chǔ)過程和函數(shù)分別存放在mysql數(shù)據(jù)庫目錄的proc*和func*文件里,如:
[root@lx202 /data/mysql/data/mysql ]# ls proc*
proc.frm proc.MYD proc.MYI procs_priv.frm procs_priv.MYD procs_priv.MYI
[root@lx202 /data/mysql/data/mysql ]# ls func*
func.frm func.MYD func.MYI
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com