将节点(叶子或聚合器)添加到memSQL集群很简单:我编辑了memsql_cluster.json并重新编译了memsql-cluster设置。问题是将分区添加到现有表。这里的重点是扩展:需要添加更多行,但已经耗尽了原始集群中的可用内存。
我试过,例如:
mysql> create partition DMP:32 on 'ec2-X-Y-Z.compute-1.amazonaws.com':3306;
ERROR 1773 (HY000): Partition ordinal 32 is out of bounds. It must be in [0, 32).
mysql>
阅读memsql文档,我找不到任何ddl选项来更改分区数。我宁愿不删除并重新创建这些表。关于如何做的任何想法?
谢谢!
答案 0 :(得分:3)
当内存已耗尽时,无法向内存数据库中添加更多行。也就是说,您可以向外扩展(即添加更多叶节点)。
您可以向MemSQL群集添加更多叶节点,然后运行rebalance_partitions以在较大的群集中均匀分布现有分区。这将允许您的每个分区在群集中占用更多空间,从而允许您向外扩展。
如果您只想添加更多分区,可以使用mysqldump导出MemSQL架构和数据,使用更多分区重新创建数据库,然后将架构和数据加载回现在有更多分区的数据库中。
在此处详细了解rebalance_partitions: http://docs.memsql.com/docs/latest/ref/REBALANCE_PARTITIONS.html
答案 1 :(得分:1)
为了重新分区当前必须的数据(1)导出模式和(2)数据库中的数据(分区在数据库级别设置),(3)重新创建数据库,以及(4)重新加载所有内容。
您可以使用mysqldump将数据库架构和表转储到本地文件。最好两次运行mysqldump,一次转储模式,一次转储数据。
此命令将在本地目录中创建一个文件,其中包含数据库中所有表的模式:
mysqldump -h 127.0.0.1 -u root -B <db_name> --no-data > schema.sql
如果您有一个大型数据库且没有足够的本地磁盘一次性转储所有数据,您可以为每个命令指定一些表。对于每个文件名使用不同的文件名(例如data1.sql,data2.sql等)并将一个或多个表名放在参数中。我会将任何较小的表与一个语句一起转储,然后分别转储任何巨型表。使用此命令:
mysqldump -h 127.0.0.1 -u root -B <db_name> --no-create-info --tables <table1> <table2> <table3> > data1.sql
一旦转储了所有表和模式,您就可以使用更多分区重新创建数据库。我们通常建议#partitions = #leaves * #core / leaf。使用此命令:
CREATE DATABASE <db_name> PARTITIONS = <#_total_partitions>;
使用"SHOW PARTITIONS ON <db_name>;"
使用shell提示符中的以下命令将架构和数据插入新数据库:
mysql -u root -h 127.0.0.1 < schema.sql
mysql -u root -h 127.0.0.1 < data1.sql
架构将需要几分钟才能加载。加载数据的时间取决于数据集的大小。每个表完成后,将提交其行,并且可以针对它运行查询。