大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> MySQL -> MySQL数据目录结构

MySQL数据目录结构

时间: 2021-08-13 作者:daque

从观念上讲,大普遍联系数据库体例是一致的:它们有一系列数据库构成,每个数据库包括一系列数据库表,但每个体例有各自构造其处置的数据办法,mysql也不不同。 缺省级地区级,一切由mysql效劳器mysqld处置的数据保存在一个称为mysql数据目次的场合,一切数据库都寄存在哪儿,也囊括供给效劳器操纵消息的状况文献。即使你对一个mysql安置实行处置工作,你该当熟知数据目次的构造及用处。 正文引见下列专题: 怎样决定数据目次的场所。  效劳器怎样构造并供给对数据库和它处置的表的考察。  在何处找到由效劳器天生的状况文献回顾它们包括什么实质。  怎样变换缺省场所或数据目次或独立数据库的构造构造。  1、数据目次的场所 一个缺省数据目次被编写翻译进了效劳器,即使你从一个源代码散发安置mysql,典范的缺省目次为/usr/local/var,即使从rpm文献安置则为/var/lib/mysql,即使从一个二进制散发安置则是/usr/local/mysql/data。 在你启用效劳器,经过运用一个--datadir=/path/to/dir选项不妨精确指定命据目次场所。即使你想把数据目次置于其它缺省场所外的某处,这很有效。 动作一名mysql处置员,你该当领会你的数据目次在何处。即使你运转多个效劳器,你该当是到一切数据目次在何处,然而即使你不领会真实的场所,由多种本领找到它:  运用mysqladmin variables从你的效劳器径直赢得数据目次路途名。搜索datadir变量的值,在unix上,其输入一致于: %mysqladmin variables +----------------------+----------------------+ | variable_name        | value                | +----------------------+----------------------+ | back_log             | 5                    | | connect_timeout      | 5                    | | basedir              | /var/local/          | | datadir              | /usr/local/var/      | .... 在windows上,输入大概看上去像如许: c:\mysqladmin variables  +----------------------+----------------------+ | variable_name        | value                | +----------------------+----------------------+ | back_log             | 5                    | | connect_timeout      | 5                    | | basedir              | c:\mysql\            | | datadir              | c:\mysql\data\       | .... 即使你有多个效劳器在运转,它们将在各别的tcp/ip端口或套接字上监听,经过供给贯穿效劳器正在监听的端口或套接字的--port或--socket选项,你不妨轮番赢得它们每一个的数据目次消息: %msqladmin --port=port_name variables %mysqladmin --socket=/path/to/socket variables mysqladmin吩咐可运转在任何你能从其贯穿效劳器的长机上,即使你想在一个长途长机贯穿效劳器,运用一个--host=host_name选项: %mysqladmin --host=host_name variables 在windows上,你不妨经过运用--pipe强迫一个吩咐弹道贯穿和--socket=pipe_name指定弹道名来贯穿监听一个吩咐弹道的nt效劳器: c:\mysqladmin --pipe --socket=pipe_name variables 你不妨运用ps吩咐察看任何正在运转mysqld 过程的吩咐行。  试一下下列吩咐之一并探求--datadir: %ps axww | grep mysql        bsd作风 %ps -ef | grep mysqld            system v作风 即使你的体例运转多个效劳器,ps吩咐大概更加有效,由于你能赶快创造多个数据目次场所,缺陷是必需在效劳器上运转,并且大概没有有效的消息爆发,只有在mysqld吩咐行上精确指定了--datadir选项。 即使mysql是从一个源代码散发安置的,你不妨查看其摆设消息决定数据目次场所。比方,场所可从顶级makefile中赢得,然而提防,场所是makefile中的localstatedir值,不是datadir,并且,即使散发坐落一个nfs过载的文献体例并用来为多个长机建立mysql,摆设消息反应了散发被最新建立的长机,这大概不许供给你感爱好的长机的数据目次消息。  即使上述办法波折,你不妨用find探求数据库文献,下列吩咐探求“.frm”文献,它是任何mysql安置的一局部: % find / -name ".frm" -print 鄙人文各例中,用datadir表白mysql数据目次场所。  2、数据目次构造 mysql数据目次包括了效劳器处置的一切数据目次,那些文献被构造成一个树状构造,经过运用unix或windows文献体例的档次构造径直实行。  每个数据库对应于数据目次下的一个目次。  在一个数据库中的表对应于数据目次下的文献。  数据目次也包括由效劳器爆发的几个状况文献,如日记文献。那些文献供给了对于效劳器操纵的要害消息。对处置更加在出了题目而试图决定题目因为时很有价格。比方,即使某个一定查问杀死效劳器,你不妨经过查看日记文献辨别破坏的查问。 2.1 mysql效劳器还好吗供给对数据的考察 在数据目次下的十足由一个独立的实业-mysql效劳器mysqld处置,存户步调绝不径直操纵数据。差异,效劳器供给数据可考察的突破点,它是存户步调与它们想运用的数据之间的中介人。 当效劳器启用时,即使有须要,它翻开日记文献,而后经过监听搜集贯穿位数据目次表露一个搜集接口。要考察数据,存户步调创造对效劳器的一个贯穿,而后以mysql查问传输乞求来实行蓄意的操纵。效劳器实行每一个操纵并将截止发回用户。效劳器是多线程的并能效劳多个同声的存户贯穿。但是,由于窜改操纵一个实行一个,本质功效是程序化乞求,以使两个存户决不许在同一功夫变换同一记载。 在平常的情景下,让效劳器动作数据库考察的独一评断者供给了制止可从同声考察数据库表的多个过程的妨害的保护。处置员该当领会偶尔效劳器没有对数据目次的专制遏制。  当你在一个单个数据目次上运转多个效劳器。普遍倪云新一个效劳器处置长机上的一切数据库,然而有大概运转多个效劳器。即使这实行供给对多个独力数据目次的考察,没有彼此感化的题目,但哟也能启用多个效劳器并指向同一个目次。普遍地,这不是一个好办法。即使你试图如许,最佳是你的体例供给杰出的文献锁定功效,要不效劳器将不许精确协调。即使你将多个效劳器同声写入日记文献,你也冒着你的日记文献称为凌乱的基础的危害。  在你运转isamchk和myisamchk时。isamchk和myisamchk适用步调用来表的保护、诊错和建设,就想你想的那么,由于那些步调不妨窜改表实质,承诺它们与效劳器正在操纵的同声对表操纵,如许能引导表破坏。领会怎样控制这种彼此感化是很要害的,如许你不会破坏你的表。  2.2 数据目表白 每个mysql效劳器处置的数据库有本人的数据库表,它是数据目次下的一个子目次,其名字与它表白的数据库沟通。比方数据库my_db对应于数据库目次datadir/my_db。 这种表白允很多个数据库级的语句在本来现中格外大略。create database db_name在数据目次中创造一个db_name空目次,具备只承诺mysql效劳器用户(运转效劳器的unix用户)的属主和形式,这等价于下列细工在效劳器长机上创造数据库: %mkdir datadir/db_name %chmod 700 dadadir/db_name 用一个空目次表白一个新数据库的最简片面法与其它数据库以至为一个空数据库创造洪量的遏制文献或体例文献凑巧差异。 drop database语句实行同样大略。drop database db_name简略数据库中的db_name目次和一切表文献,这简直与下列吩咐一律: %rm -rf datadir/db_name (分辨是效劳器只简略具备已知用来表的后缀名的文献。即使你在数据库目次创造了其它文献。则效劳器保持它们,并且目次自己不被简略。 show database基础上不做什么,不过列出坐落数据目次中的目次名。有些数据库体例维持一个主表,用来保护一切数据库,但在mysql无此构件。因为付与数据目次构造的简略性,数据库列表隐含在数据目次的实质中,并且如许的表不用有特殊的开支。 2.3 数据库表的表白 每个数据库在数据库目次中有3个文献:一个款式(刻画文献)、一个数据文献和一个索引文献。每个文献的基真名是表名,文献名扩充名代办文献典型。扩充名如次表。数据和索引文献的扩充名指出表运用旧式iasm索引或新型myisam索引。 表 mysql文献典型 文献典型文献名扩充名文献实质 款式文献.frm刻画表的构造(它的列、列典型、索引等)。 数据文献.isd(isam) 或.myd(myisam)包括数据文献上的一切索引的索引树。 索引文献.ism(isam) 或.myi(myisam)该索引文献依附表能否有索引而生存。 当你发出一条create table tbl_name时语句设置表的构造时,效劳器创造一个名为tbl_name.frm的文献,它囊括该构造的里面源代码,同声也创造一个空数据和索引文献,初始化为包括指出无记载和无索引的消息(即使create table语句囊括索引指定,索引文献反应出那些索引)。对应于表的文献的属主和形式被树立为只承诺mysql效劳器用户考察。 当你发出一条alter table tbl_name语句时,效劳珍视新源代码tbl_name.frm,并窜改数据和索引文献的实质以反应语句指定的构造变换。对于create index和drop index也是一律,由于它们被效劳器视为与alter table等价。drop table经过简略对应于表的三个文献来实行。 固然你不妨经过简略数据库目次中对应于表的三个文献,但不高手工创造或窜改一个表,如,即使my_db是暂时数据库,drop table my_tbl大约等价于下列吩咐。 % rm -rf datadir/my_db/my_tbl.* show table my_db的输入不过列出my_db数据库目次中的.frm文献的基文献名。有些数据库系一致个备案表,陈列一切包括在一个数据库中的表,mysql不是,由于不需要,“备案表”隐含在数据目次的构造中。[page_break]2.4 操纵体例对数据库和表定名的控制 mysql对定名数据库和表有一个规则:  名字不妨由暂时字符会合的任何假名数字字符构成,下划线和美元符$也不妨。  名字最长为64个字符。  但是,由于数据库和表的名字对应于目次和文献名,效劳器运转的操纵体例大概强加特殊的控制。 开始,数据库和表名仅限于对文献名正当的字符,如$在mysql的规则中是承诺的,然而即使你的操纵体例不承诺,则你不许在目次或表名中运用它。本质上,这对unix或windows不是所担忧的,最大的难度是在实行数据库处置时径直在shell中援用名字,比方,即使你定名一个数据库如$my_db,包括一个美元符,任何从shell中对该名字的援用大概被shell证明为对一个变量的援用: %ls $my_db my_db:undefined variable 对此,你必需转义$字符或用引号遏止其特出含意: %ls \$my_db %ls ’$my_db’ 即使你用引号,确定要用单引号,而双引号并不由止变量证明。 其次,固然mysql承诺数据库和表名最长到64个字符,但名字的长度受限于你的操纵体例控制的长度,普遍这不是一个题目(固然老的system v强迫14个字符)。在这种情景下,你数据库名的下限为14个字符,而表名下限为10个字符,由于表白表的文献名有一个点(.)和三个字符的扩充名。 第三,文献体例的巨细写敏锐性感化到你怎样定名和援用数据库和表名。即使文献体例是巨细写敏锐的(如unix),两个名字my_tbl和my_tbl是各别的表。即使文献体例不是巨细写敏锐的(如windows),这两个名字指的是沟通的表。即使你用一个unix效劳器开拓数据库,而且即使你有大概变化到windows,你该当记取这一点。 2.5 mysql状况文献 除去数据库目次,mysql数据目次还包括很多状况文献,那些文献归纳鄙人表中。大普遍文献的缺省名从效劳器长机名天生,鄙人表中表白为hostname。 表 mysql状况文献 文献典型缺省名文献实质 过程idhostname.pid效劳器过程的id 堕落日记hostname.err启用和封闭事变和堕落情景 普遍日记hostname.log贯穿/割断事变和查问消息 革新日记hostname.nnn窜改表构造级实质的一切查问文本 当效劳器启用时,它将其过程id写入过程id(pid)文献中,而在它封闭时,简略该文献。pid文献是承诺效劳器自己被其余过程找到的东西。比方,即使你运转mysql.server,在体例封闭时,封闭mysql效劳器的剧本查看pid文献以确定它须要向哪个过程发出一个中断旗号。 堕落日记由safe_mysqld创造,动作效劳器规范堕落输入的重定向,它包括任何邪到stderr的动静。这表示着惟有你经过挪用safe_mysqld启用效劳器,堕落文献才生存(不管怎样,它是一个启用效劳器的最佳本领,由于即使它因为堕落而退出,safe_mysqld将重启效劳器。)。 普遍日记和革新日记是可选的。你不妨只打开你须要的日记典型,用--log和--log-update效劳器选项。 普遍日记供给效劳器操纵的普遍消息:谁从何处贯穿效劳器和她们发出什么查问。革新日记供给查问消息,但惟有窜改数据库实质的查问。革新日记实质被写成sql语句,不妨将它们供给给mysql存户步调来实行。即使你遇上解体,而且必需倒回备份文献,革新日记就很有效,由于你能反复实行自解体时的革新,经过将革新日记反应给效劳器,这承诺你将数据库回复到解体爆发时的状况。 底下是一个大略的例子,消息出此刻普遍日记中,它是一个创造一个在数据库test中表,插入一条龙,而后简略表的对话: 990509 7:37:09  492 connect paul@localhost on test    492 query show databases    492 query show tables    492 field list tbl_1    492 field list tbl_2    ... 990509 7:34:22  492 query create table my_tbl (val int) 990509 7:34:34  492 query insert into my_tbl values (1) 990509 7:34:38  492 query drop table my_tbl 990509 7:34:40  492 quit 普遍日记包括日子和功夫、效劳器过程id、事变典型和事变消息栏目。 同一个对话出此刻革新日记中看上去像如许: use test; create table my_tbl (val int); insert into my_tbl values(1); drop table my_tbl; 对革新日记,用--log-long-format选项赢得一个扩充情势的日记,扩充日记供给相关谁何时发出每一条查问,这运用更多的磁盘空间,但即使你想领会谁在做什么,而不必将革新日记比较普遍日记的实质找到贯穿事变。 对上头的对话,扩充革新日记爆发如许的消息: # time: 990507 7:32:42 # user@host: paul [paul] @ localhost [] use test; create table my_tbl (val int); # user@host: paul [paul] @ localhost [] insert into my_tbl values(1); # time: 990507 7:32:43 # user@host: paul [paul] @ localhost [] drop table my_tbl;  保护你的日记文献安定而且不让大肆用户读取是个好办法。普遍日记和革新日记都能包括诸如口令等的敏锐消息,由于它们包括查问文本。如:  990509 7:23:31  4 query update user set password=password("secret")     where user="root" 对于查看和树立数据目次的权力,请见《mysql安定性指南》。使数据目次安性的训令包括下列吩咐: % chmod 700 datadir 以具有数据目次的unix用户运转此吩咐。保证效劳器也以此用户运转,要不该吩咐不只将其它人拒之门外,它也遏止效劳器考察你的数据库。 状况文献出此刻数据目次的顶级目次,就象数据库目次,以是你大概担忧那些文献名能否与数据库名辩论或堕落(如在效劳器实行show databases语句时)。谜底是不。状况和日记文献消息保存在文献中,而数据库是目次,以是可执路途序能用一个大略的stat()挪用辨别它们。即使你看一下数据目次,你不妨辨别状况文献和数据库目次,用ls -l并查看形式的第一个字符是一个"_"仍旧一个"d"。 你也不妨大略地看一下名字,一切状况文献名包括一个点("."),而数据库目次没有(.在数据库名中是失效字符)。 3 重定位数据库目次 前方计划的数据目次构造是缺省摆设,一切数据库和状况文献均包括个中,但是,你有某些自在确定数据目次实质的场所,本节计划干什么你大概移走局部数据目次(或以至目次自己)、你能移走什么以及你怎样做那些变换。 mysql承诺你重定位数据目次或个中的分子,由几个因为你干什么要如许做:  你能将数据目次放在你缺省地方的文献体例更大含量的文献体例上。  即使你的数据目次在一个劳累的硬盘上,你大概把它放在不太忙的磁盘上以平衡磁盘震动。你不妨把数据库和日记文献放在划分的磁盘上或跨磁盘散布。  你大概想运转多个效劳器,各自有本人的数据目次,这是处置每个过程文献刻画符控制题目的一种本领,更加是你不许从新摆设内核以承诺更高的控制。  有些体例在比方/var/run中生存效劳器的局部文献,你大概想把mysql的pid文献也放在那儿,为了体例操纵的普遍性。 3.1 重定位本领 有两种本领重定位数据目次的实质:  你不妨在效劳器启用时指定选项,在吩咐行或在一个选项文献的[mysqld]中。  你不妨移走要重定位的货色,而后在原场所做一个指向新场所的标记贯穿。  两种本领都不许处置你能重定位的十足,下表归纳了什么能重定位和用哪种本领重定位。即使你运用选项文献,有大概在全部选项文献/etc/my.cnf(windows上的c:\my.cnf)指定选项。暂时的windows本子也探求体例目次(c:\windows或c:\nt)。 表 重定位本领 重定位本领实用的重定位本领 所有数据目次启用选项或标记贯穿 单个数据库目次标记贯穿 单个数据库表标记贯穿 pid文献启用选项 普遍日记启用选项 革新日记启用选项 你也不妨运用缺省数据目次中的选项文献my.cnf,但不引荐运用该文献。即使你想重定位数据目次自己,你不得不让缺省数据目次可读再不使你能在这边安置选项文献指定效劳器该当在何处找到“真实”的数据目次!这很凌乱。即使你想运用一个选项文献指定效劳器选项,最佳运用/etc/my.cnf。 3.1 检查重定位的功效 在试图重定位任何货色之前,检查操纵到达预期功效是个好办法。借助于du、df和ls -l吩咐赢得磁盘空间的消息,但那些依附于你精确领会你的文献体例的构造。 底下演练一个在你检查一个属目次重定位时的安排组织。假设你的数据目次是/usr/local/var,而你想把它移到/var/mysql,由于df表露/var文献体例有很多的清闲空间: %df /usr /var filesystem  1k-blocks     used   avail  capacity  mounted on /dev/wd0s3e    396895   292126   73018    80%     /usr /dev/wd0s3f   1189359  1111924  162287    15%     /var    重定位的数据目次在/usr文献体例上有几何清闲空间呢?要领会它,运用du -s找到该目次运用几何空间。 %cd /usr/local/var %du -s . 133426 这大概是130mb,如实如许吗?在数据目次下试一下df: %df /usr/local/var filesystem  1k-blocks     used   avail  capacity  mounted on /dev/wd0s3f   1189359  1111924  162287    15%     /var  这就怪僻了。即使咱们为包括/usr/local/var的文献体例请求清闲空间,干什么却汇报var上的空间呢?这边ls -l供给了谜底: %ls -l /usr/local .... lrwxrwxrwx  1  root  wheel  10 dec 11 23:33 var -> /var/mysql ....  输入表露/usr/local/var是对/var/mysql的标记贯穿,换句话说,数据目次仍旧被重定坐落/var文献体例,并用一个指向何处的标记贯穿包办。经过将数据目次移到/var果然开释了/usr上那么多空间! 3.2 重定位数据目次 要重定位数据目次,封闭效劳器并把数据目次移到新场所上,而后你该当简略员数据目次并用指向新场所的标记贯穿包办它,或用精确指出新场所的选项重启效劳器。下表列出指定场所的吩咐行和选项。 表 数据目次重定位语法 选项源语法 吩咐行--data-dir=/path/to/dir 选项文献[mysqld] datadir=/path/to/dir 3.3 重定位数据库 数据库能经过标记贯穿的本领移走。要重定位一个数据库,封闭效劳器并移走数据库目次并简略从来的数据库目次,用指向新场所的标记贯穿包办它,而后重启效劳器。 下例表露你怎样将一个数据库bigdb移到一个各别的场合: %mysqladmin -u root -p shutdown enter password: ****** %cd datadir %tar cf - bigdb | (cd /var/db; tar xf -) %mv bigdb bigdb.orig ln -s /var/db/bigdb . %safe_mysqld  你该当以该数据目次的具有者实行那些吩咐。为了安定起见,原数据库目次更名为bigdb.orig。在你考证了效劳器处事平常后,你不妨简略原数据目次。 %rm -rf bigdb.orig 3.4 重定位数据库表 重定位一个独立的表不是个好办法。你不妨经过把表文献移到一个各别场合,并在数据目次中创造指向那些文献的标记贯穿举行。但是,即使你发出一条alter table或optimize table语句,将不举行你的窜改。 每个语句经过在数据库目次中创造一个实行你窜改或优化的偶尔表,而后简略从来的表并将偶尔表改名为从来的表来实行,截止是你的标记贯穿被简略,并且新表又回到数据库目次,这是你移走前的原表文献场所。更蹩脚的是,你还没有认识到它们在那儿,连接吞噬着空间,并且标记贯穿仍旧被妨害,如许此后当你认识到爆发的工作时,即使你忘怀你把它们移到什么场合,你大概没有好方法蹑踪文献了。 由于很难保护具备表考察权的人不窜改或优化表,以是最佳把表留在数据库目次中。 3.5 重定位状况文献 你不妨重中定位pid文献、普遍日记和革新日记。堕落日记由safe_mysqld用启用选项创造,而不许被重定位(只有你编纂safe_mysqld)。 要在一个各别场所写入状况文献,封闭效劳器,而后由指定新状况文献场所的符合选项启用它。下表列出每一个文献的吩咐行和选项文献的语法。 表 状况文献重定位语法 选项源语法 吩咐行--pid-file=pidfile --log=lodfile --log-update=updatefile 选项文献[mysqld] pid-file=pidfile log=lodfile log-update=updatefile 即使你用一致路途名指定状况文献,用该路途创造文献,要不文献在数据目次下创造。如,即使你指定--pid-file=/var/run/mysqld.pid,pid文献是/var/run/mysqld.pid。即使你指定-pid-file=mysqld.pid,pid文献是datadir/mysqld.pid。 即使你指定无扩充名的革新日记文献,mysql在它历次翻开革新日记时爆发程序名。那些名字用一个扩充名.nnn,这边.nnn是还没被现有革新日记运用的第一个数字(如update.000,update.001等)。你不妨经过精确指定扩充名来掩盖程序名,这时候效劳器将只运用指定的名字。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.