使用符号链接
您可以将数据库或表从数据库目录移动到其他位置,并用指向新位置的符号链接替换它们。例如,您可能要这样做,以便将数据库移动到具有更多可用空间的文件系统中,或者通过将表分散到不同的磁盘来提高系统的速度。
对于InnoDB
表,请按照“在外部创建表”中的说明,使用语句的DATA DIRECTORY
子句CREATE TABLE
代替符号链接。此新功能是受支持的跨平台技术。
推荐的方法是将整个数据库目录符号链接到另一个磁盘。Symlink MyISAM
表仅是万不得已的方法。
要确定数据目录的位置,请使用以下语句:
SHOW VARIABLES LIKE 'datadir';
在Unix上对数据库使用符号链接
在Unix上,符号链接数据库的方法是首先在某个具有可用空间的磁盘上创建一个目录,然后从MySQL数据目录创建到该目录的软链接。
shell>mkdir /dr1/databases/test shell>ln -s /dr1/databases/test /path/to/datadir
MySQL不支持将一个目录链接到多个数据库。只要您不在数据库之间建立符号链接,就可以使用符号链接替换数据库目录。假设您db1
在MySQL数据目录下有一个数据库,然后建立一个db2
指向以下内容的符号链接db1
:
shell>cd /path/to/datadir shell>ln -s db1 db2
其结果是,对于任何表tbl_
中db1
,也似乎是一个表tbl_
中db2
。如果一个客户端更新,db1.tbl_
而另一个客户端更新db2.tbl_
,则可能会出现问题。
在Unix上对MyISAM表使用符号链接
注意
--symbolic-links
不推荐使用此处描述的符号链接支持以及对其进行控制的选项,并将在以后的MySQL版本中将其删除。此外,默认情况下禁用此选项。
仅针对MyISAM
表完全支持符号链接。对于表用于其他存储引擎的文件,如果尝试使用符号链接,则可能会遇到奇怪的问题。对于InnoDB
表,请使用“在外部创建表”中说明的替代技术。
不要在没有完全操作realpath()
调用的系统上符号链接表。(Linux和Solaris支持realpath()
)。要确定您的系统是否支持符号链接,请have_symlink
使用以下语句检查系统变量的值:
SHOW VARIABLES LIKE 'have_symlink';
MyISAM
表的符号链接的处理方式如下:
- 在数据目录中,始终有数据(
.MYD
)文件和索引(.MYI
)文件。数据文件和索引文件可以移动到其他位置,并在数据目录中用符号链接替换。 - 您可以将数据文件和索引文件独立符号链接到不同的目录。
要指示正在运行的MySQL服务器执行符号链接,请使用
DATA DIRECTORY
和INDEX DIRECTORY
选项CREATE TABLE
。请参见“ CREATE TABLE语句”。或者,如果mysqld没有运行,则可以从命令行使用ln -s手动完成符号链接。注意
与
DATA DIRECTORY
和INDEX DIRECTORY
选项中的一个或两个一起使用的路径可能不包含MySQLdat
目录。错误32167)- myisamchk不会用数据文件或索引文件替换符号链接。它直接在符号链接指向的文件上工作。在数据文件或索引文件所在的目录中创建任何临时文件。同样是真实的
ALTER TABLE
,OPTIMIZE TABLE
和REPAIR TABLE
语句。 注意
删除使用符号链接的表时,符号链接和符号链接指向的文件都会被删除。这是一个非常好的理由不运行mysqld的作为
root
操作系统用户或允许操作系统的用户将不得不MySQL数据库目录的写入权限。- 如果使用
ALTER TABLE ... RENAME
或重命名表,RENAME TABLE
并且没有将表移至另一个数据库,则数据库目录中的符号链接将重命名为新名称,并且数据文件和索引文件也将相应重命名。 - 如果使用
ALTER TABLE ... RENAME
或RENAME TABLE
将表移动到另一个数据库,则该表将移动到另一个数据库目录。如果表名更改,则新数据库目录中的符号链接将重命名为新名称,并且数据文件和索引文件也将重命名。 - 如果不使用符号链接,则使用该选项启动mysqld,
--skip-symbolic-links
以确保没有人可以使用mysqld删除或重命名数据目录之外的文件。
不支持这些表符号链接操作:
ALTER TABLE
忽略DATA DIRECTORY
和INDEX DIRECTORY
表选项。
在Windows上对数据库使用符号链接
在Windows上,符号链接可用于数据库目录。这样,您可以通过建立数据库目录的符号链接来将其放置在其他位置(例如,在其他磁盘上)。在Windows上使用数据库符号链接类似于在Unix上使用数据库符号链接,尽管建立链接的过程不同。
假设你要放置数据库目录中指定的数据库mydb
的D:\data\mydb
。为此,请在MySQL数据目录中创建一个指向的符号链接D:\data\mydb
。但是,在创建符号链接之前D:\data\mydb
,请根据需要通过创建目录来确保该目录存在。如果您已经有一个mydb
在数据目录中命名的数据库目录,请将其移至D:\dat
。否则,符号链接将无效。为避免出现问题,请在移动数据库目录时确保服务器未在运行。
在Windows上,可以使用mklink命令创建符号链接。此命令需要管理特权。
将位置更改为数据目录:
C:\>
cd \path\to\datadir在数据目录中,创建一个符号链接,该符号链接
mydb
指向数据库目录的位置:C:\>
mklink /d mydb D:\data\mydb
之后,将在mydb
中创建数据库中创建的所有表D:\data\mydb
。