【发布时间】:2011-11-25 15:20:18
【问题描述】:
在 MySQL、MyISAM 中,是否可以将带有分区的表更改为多个硬盘驱动器?
我的硬盘几乎用完了它的磁盘空间。
有没有人遇到这个问题,你是怎么解决的?
【问题讨论】:
标签: mysql partitioning myisam hard-drive
在 MySQL、MyISAM 中,是否可以将带有分区的表更改为多个硬盘驱动器?
我的硬盘几乎用完了它的磁盘空间。
有没有人遇到这个问题,你是怎么解决的?
【问题讨论】:
标签: mysql partitioning myisam hard-drive
是的,可以将表分区到多个驱动器上。请查看官方手册,其中深入介绍了该主题。
http://dev.mysql.com/doc/refman/5.5/en/partitioning.html
这是一个将现有表分区到多个驱动器上的示例:
ALTER TABLE mytable
PARTITION BY RANGE (mycolumn)(
PARTITION p01 VALUES Less Than (10000)
DATA DIRECTORY = "/mnt/disk1"
INDEX DIRECTORY = "/mnt/disk1",
PARTITION p02 VALUES Less Than (20000)
DATA DIRECTORY = "/mnt/disk2"
INDEX DIRECTORY = "/mnt/disk2",
PARTITION p03 VALUES Less Than MAXVALUE
DATA DIRECTORY = "/mnt/disk3"
INDEX DIRECTORY = "/mnt/disk3"
);
请注意,这需要关闭 NO_DIR_IN_CREATE。它似乎在 windows 中不起作用,并且似乎不适用于 InnoDB。
如果你最后一个分区的磁盘空间用完了,你可以用下面的语句来分割它:
ALTER TABLE mytable REORGANIZE PARTITION p03 INTO
(
PARTITION p03 VALUES Less Than (30000)
DATA DIRECTORY = "/mnt/disk3"
INDEX DIRECTORY = "/mnt/disk3",
PARTITION p04 VALUES Less Than MAXVALUE
DATA DIRECTORY = "/mnt/disk4"
INDEX DIRECTORY = "/mnt/disk4"
);
【讨论】:
你可以移动整个mysql数据目录。更改/etc/mysql/my.cnf 中的datadir 选项。
如果您只想移动一个数据库,您可以停止服务器,将目录 (/var/lib/mysql/DATABASE_NAME) 移动到其他位置,然后将符号链接添加到新位置 (ln -s NEW_LOCATION /var/lib/mysql/DATABASE_NAME)。
一定要做好备份!!!!!!在搞砸之前!!!!!!
(mysqldump --all-databases 作为可以访问所有内容的用户,可能是 root。)
【讨论】:
诀窍是像您通常那样创建分区,将选定的分区移动到其他硬盘驱动器并将它们符号链接回/var/lib/mysql。
【讨论】: