荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: baty (新一代懒人), 信区: Database
标  题: MySQL数据目录结构(2)
发信站: BBS 荔园晨风站 (Thu Nov 16 13:40:47 2000), 站内信件

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 /varFilesystem 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/varFilesystem 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 shutdownEnter password:
 ******%cd DATADIR%tar cf - bigdb | (cd /var/db;
 tar xf -)%mv bigdb bigdb.origln -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等)。你可以通过明确指定扩展名来覆盖顺序名,
这时服务器将只使用指定的名字。

--
☆ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: bbs@192.168.18.238]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店