mysql 对超大表的处理

象宇 2010-12-17 08:44:53
我假设个问题,就是我的一个数据库表,已经很多个G了,而其这个表所在的磁盘空间已经所剩无几了,我想把这个表分到其他的磁盘上存储。具体如何做啊?
手册上没有很明确的例子。
帮忙解决一下吧。

谢谢。
...全文
465 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
象宇 2010-12-21
  • 打赏
  • 举报
回复
ACMAIN_CHM

的答案是正解,只不过,我还没有验证。
实际的情况还不知道会怎样。
gatx177 2010-12-17
  • 打赏
  • 举报
回复
删除冗余数据~~~~~~~~~~~~~~~
ACMAIN_CHM 2010-12-17
  • 打赏
  • 举报
回复
没有办法,目前的MYSQL版本在WINDOWS都不支持这个选项。
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
用MYSQLDUMP备份、再导入吧,否则换系统(UNIX)
象宇 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 wwwwa 的回复:]

DATA DIRECTORY INDEX DIRECTORY
windows 下这两个参数不起作用.
[/Quote]
那我该如何做,没有方法吗?
ACMAIN_CHM 2010-12-17
  • 打赏
  • 举报
回复
WINDOWS中不支持符号连接,所以不能实现数据库文件存储在不同位置。
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
DATA DIRECTORY INDEX DIRECTORY
windows 下这两个参数不起作用.
象宇 2010-12-17
  • 打赏
  • 举报
回复
CREATE TABLE ts (id INT, purchased DATE)

PARTITION BY RANGE(YEAR(purchased))

SUBPARTITION BY HASH(TO_DAYS(purchased))

(

PARTITION p0 VALUES LESS THAN (1990)

(

SUBPARTITION s0

DATA DIRECTORY = '/disk0/data'

INDEX DIRECTORY = '/disk0/idx',

SUBPARTITION s1

DATA DIRECTORY = '/disk1/data'

INDEX DIRECTORY = '/disk1/idx'

),

PARTITION p1 VALUES LESS THAN (2000)

(

SUBPARTITION s0

DATA DIRECTORY = '/disk2/data'

INDEX DIRECTORY = '/disk2/idx',

SUBPARTITION s1

DATA DIRECTORY = '/disk3/data'

INDEX DIRECTORY = '/disk3/idx'

),

PARTITION p2 VALUES LESS THAN MAXVALUE

(

SUBPARTITION s0

DATA DIRECTORY = '/disk4/data'

INDEX DIRECTORY = '/disk4/idx',

SUBPARTITION s1

DATA DIRECTORY = '/disk5/data'

INDEX DIRECTORY = '/disk5/idx'

)

);
我现在是考虑这个问题,如何解决。
这个是手册中的例子,是在linux下的,我如何在windows中实现,可以只把表分到 F:和G:两个磁盘下。
小小小小周 2010-12-17
  • 打赏
  • 举报
回复
主键问题,你的表结构发出来
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
你的代码贴出来
象宇 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 zuoxingyu 的回复:]

partition_definition:
PARTITION partition_name
[VALUES {
LESS THAN (expr) | MAXVALUE
| IN (value_list) }]
[[STORAGE] ENGINE [=] engine-nam……
[/Quote]
我看着手册尝试过,老是语法报错,所以来论坛求助,,,能不能给个实际的例子,各位达人······
zuoxingyu 2010-12-17
  • 打赏
  • 举报
回复
partition_definition:
PARTITION partition_name
[VALUES {
LESS THAN (expr) | MAXVALUE
| IN (value_list) }]
[[STORAGE] ENGINE [=] engine-name]
[COMMENT [=] 'comment_text' ]
[DATA DIRECTORY [=] 'data_dir'] [INDEX DIRECTORY [=] 'index_dir']
[MAX_ROWS [=] max_number_of_rows]
[MIN_ROWS [=] min_number_of_rows]
[TABLESPACE [=] (tablespace_name)]


看分区的红色部分。可以指定某个分区的存储位置。
象宇 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 acmain_chm 的回复:]

你是想把数据库移到另一个硬盘分区上,不是做表分区。

你可以先停止你的MYSQL服务,然后把整个DATADIR目录复制到目标硬盘分区上,然后再修改MY.INI中的DATADIR参数。再启动MYSQL就可以了。
[/Quote]

我晕,老大,我明明写的是“分”,而不是移!!!
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
直接COPY容易出问题,INNODB引擎的表不能直接COPY,最好用MYSQLDUMP备份
小小小小周 2010-12-17
  • 打赏
  • 举报
回复
1:mysqldump 出来之后,修改my.cnf里面的数据目录,datadir=新的磁盘,再还原;适用myisam表.
2:要是innodb的话,dump出来之后,修改innodb_data_file_path的最后一个表空间到新的目标目录,再还原.
3:把datadir的目录整个复制到新的目标地址,再用软连接连接到旧地址,不需要修改配置文件(适用myisam)---linux
4:在data目录的同级,新加一个后缀名为sym的文件.把某个库的地址指到新地址如(E:\data\Q)----windows

iihero 2010-12-17
  • 打赏
  • 举报
回复
转移数据,可以直接复制DATADIR目录,再修改配置文件。
或者将整个MySQL目录转移到别的分区,然后修改配置文件,重新配置服务。
都可以的。
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
OR
直接用MYSQLDUMP备份数据库,再新建数据库,导入备份
WWWWA 2010-12-17
  • 打赏
  • 举报
回复
你的MYSQL版本
http://dev.mysql.com/doc/refman/5.1/zh/partitioning.html
手册比较详细
ACMAIN_CHM 2010-12-17
  • 打赏
  • 举报
回复
你是想把数据库移到另一个硬盘分区上,不是做表分区。

你可以先停止你的MYSQL服务,然后把整个DATADIR目录复制到目标硬盘分区上,然后再修改MY.INI中的DATADIR参数。再启动MYSQL就可以了。
象宇 2010-12-17
  • 打赏
  • 举报
回复
windows mysql 5.1 以上才有分区 手册上没有很详细的例子。
加载更多回复(7)

56,681

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧