默认是在数据库那个目录里,但数据库里的某个表由于某种原因,我希望把它放到别的目录中去,能否做到?

解决方案 »

  1.   

    linux 下可以。
    windows 下不可以。
      

  2.   

    我用的就是linux,如何做到呢?版主说的莫非就是用ln 命令指定文件连接的方法?
      

  3.   

    DATA DIRECTORY [=] 'absolute path to directory'
    INDEX DIRECTORY [=] 'absolute path to directory'
    上面两个create TABLE的先项可以指定数据文件和索引文件的目录,但仅限支持realpath() 的操作系统如UNIX或LINUX。WINDOWS自成体系,标新立异,不支持。
      

  4.   

    data 目录和安装目录直接在配置文件里指定了啊linux和windows都可以指定
      

  5.   

    我需要将现有的数据表更换为别的同名的数据表,希望最好能够不覆盖现有数据表,而是通过直接先指向别的目录,从而实现数据表的切换,如果新的数据表不合适,还可以切换回来!不过经过测试发现,真正的实现还是通过创建链接link()函数来完成的CREATE TABLE p_tbl(id int, name char(5)) DATA DIRECTORY='/einfo/data/data/' INDEX DIRECTORY='/einfo/data/index/';[root@localhost data]# ls /var/lib/mysql/test/p_tbl.* -l
    -rw-rw---- 1 mysql mysql 8586 09-21 09:58 /var/lib/mysql/test/p_tbl.frm
    lrwxrwxrwx 1 mysql mysql   26 09-21 09:58 /var/lib/mysql/test/p_tbl.MYD -> /einfo/data/data/p_tbl.MYD
    lrwxrwxrwx 1 mysql mysql   27 09-21 09:58 /var/lib/mysql/test/p_tbl.MYI -> /einfo/data/index/p_tbl.MYI
    不过新问题出现了:
    我用alter命令切换目录的时候没成功ysql> ALTER TABLE p_tbl DATA DIRECTORY='/edata/data/' INDEX DIRECTORY='/edata/index/';
    Query OK, 0 rows affected, 2 warnings (4.49 sec)
    Records: 0  Duplicates: 0  Warnings: 0mysql> show warnings;
    +---------+------+----------------------------------+
    | Level   | Code | Message                          |
    +---------+------+----------------------------------+
    | Warning | 1618 | <DATA DIRECTORY> option ignored  | 
    | Warning | 1618 | <INDEX DIRECTORY> option ignored | 
    +---------+------+----------------------------------+
    2 rows in set (0.00 sec)
    出现两个警告,查看链接指向 ls /var/lib/mysql/test/p_tbl.* -l
    并没有改变,但新的路径权限没有问题,数据表也存在,这是为啥呢?
      

  6.   

    手册中如是说:ALTER TABLE忽略DATA DIRECTORY和INDEX DIRECTORY表选项。
      

  7.   


    也就是说,没法alter table的表路径了?
      

  8.   

    后期在linux下用命令ln -sf强制更改一个表的链接还真不行
    改了之后会报错
    ERROR 1 (HY000): Can't create/write to file 'XXX' (Errcode: 17)XXX是在建立数据表时所指向的数据库位置,看来有些东西还取决于*.frm这个文件!