Documentation Home
MySQL 8.0 参考手册  / 第8章优化  / 8.12 优化MySQL服务器  / 8.12.2 使用符号链接  /  8.12.3.2 在 Unix 上为 MyISAM 表使用符号链接

8.12.3.2 在 Unix 上为 MyISAM 表使用符号链接

MyISAM表完全支持符号链接。对于其他存储引擎的表使用的文件,如果您尝试使用符号链接,您可能会遇到奇怪的问题。对于InnoDB表,请改用 第 14.6.1.2 节“在外部创建表”中说明的替代技术。

不要在没有完全可操作realpath()调用的系统上对表进行符号链接。(Linux 和 Solaris 支持realpath())。要确定您的系统是否支持符号链接,请have_symlink使用以下语句检查系统变量的值:

SHOW VARIABLES LIKE 'have_symlink';

表的符号链接处理MyISAM 如下:

  • 在数据目录中,总是有表格式 ( .frm) 文件、数据 ( .MYD) 文件和索引 ( .MYI) 文件。数据文件和索引文件可以移动到别处,并通过符号链接在数据目录中替换。格式文件不能。

  • 您可以将数据文件和索引文件独立地符号链接到不同的目录。

  • 要指示正在运行的 MySQL 服务器执行符号链接,请使用DATA DIRECTORYINDEX DIRECTORY选项 CREATE TABLE。请参阅 第 13.1.18 节,“CREATE TABLE 语句”。或者,如果 mysqld没有运行,可以 从命令行 使用ln -s手动完成符号链接。

    笔记

    DATA DIRECTORY与和选项 中的一个或两个一起使用的路径INDEX DIRECTORY可能不包括 MySQL data目录。(漏洞 #32167)

  • myisamchk不会用数据文件或索引文件替换符号链接。它直接作用于符号链接指向的文件。任何临时文件都创建在数据文件或索引文件所在的目录中。ALTER TABLEOPTIMIZE TABLEREPAIR TABLE语句 也是如此

  • 笔记

    当您删除使用符号链接的表时,符号 链接和符号链接指向的文件都会被删除这是不以操作系统用户身份运行 mysqldroot 或允许操作系统用户对 MySQL 数据库目录具有写访问权限 的一个极好的理由。

  • 如果您使用 ALTER TABLE ... RENAME或重命名表RENAME TABLE并且您没有将该表移动到另一个数据库,则数据库目录中的符号链接将重命名为新名称,并且数据文件和索引文件也会相应地重命名。

  • 如果您使用 ALTER TABLE ... RENAMERENAME TABLE将表移动到另一个数据库,则该表将移动到另一个数据库目录。如果表名更改,新数据库目录中的符号链接将重命名为新名称,数据文件和索引文件也会相应重命名。

  • 如果您不使用符号链接,请 使用以下 选项启动mysqld--skip-symbolic-links , 以确保没有人可以使用 mysqld删除或重命名数据目录之外的文件。

不支持这些表符号链接操作:

  • ALTER TABLE忽略 DATA DIRECTORYINDEX DIRECTORY表选项。

  • 如前所述,只有数据和索引文件可以是符号链接。该.frm文件绝 不能是符号链接。尝试这样做(例如,使一个表名成为另一个表名的同义词)会产生不正确的结果。假设您db1在 MySQL 数据目录下有一个数据库,tbl1该数据库中有一个表,并且在该目录中创建了指向 以下db1内容的符号链接: tbl2tbl1

    $> cd /path/to/datadir/db1
    $> ln -s tbl1.frm tbl2.frm
    $> ln -s tbl1.MYD tbl2.MYD
    $> ln -s tbl1.MYI tbl2.MYI

    如果一个线程读取 db1.tbl1而另一个线程更新, 则会出现问题db1.tbl2

    • 查询缓存被愚弄了(它无法知道tbl1尚未更新,因此返回过时的结果)。

    • ALTERtbl2失败的 陈述 。