3

将节点(叶子或聚合器)添加到 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 选项来更改分区数。我不希望删除并重新创建这些表。关于如何做的任何想法?

谢谢!

4

2 回答 2

4

当内存已用尽时,您无法向内存数据库添加更多行。也就是说,您可以横向扩展(即添加更多叶节点)。

您可以向 MemSQL 集群添加更多叶节点,然后运行 ​​rebalance_partitions 以将现有分区均匀地分布在更大的集群中。这将允许您的每个分区在集群中消耗更多空间,从而允许您向外扩展。

如果您只想添加更多分区,可以使用 mysqldump 导出 MemSQL 模式和数据,重新创建具有更多分区的数据库,然后将模式和数据加载回现在具有更多分区的数据库中。

在此处了解有关 rebalance_partitions 的更多信息:http: //docs.memsql.com/docs/latest/ref/REBALANCE_PARTITIONS.html

于 2015-04-21T22:57:10.967 回答
1

为了对当前数据重新分区,您必须 (1) 导出模式和 (2) 从数据库中导出数据(分区设置在数据库级别),(3) 重新创建数据库,以及 (4) 重新加载所有内容在。

您可以使用 mysqldump 将数据库模式和表转储到本地文件。最好运行 mysqldump 两次,一次转储模式,一次转储数据。

  1. 此命令将在本地目录中创建一个文件,其中包含数据库中所有表的模式:

    mysqldump -h 127.0.0.1 -u root -B <db_name> --no-data > schema.sql 
    
  2. 如果您有一个大型数据库并且没有足够的本地磁盘来一次转储所有数据,您可以为每个命令指定一些表。对于每一个,使用不同的文件名(例如 data1.sql、data2.sql 等)并放入一个或多个表名作为参数。我会用一条语句将任何较小的表一起转储,然后单独转储任何巨型表。使用这个命令:

    mysqldump -h 127.0.0.1 -u root -B <db_name> --no-create-info --tables <table1> <table2> <table3> > data1.sql 
    
  3. 转储所有表和架构后,您可以使用更多分区重新创建数据库。我们通常推荐#partitions = #leaves * #cores/leaf。使用这个命令:

    CREATE DATABASE <db_name> PARTITIONS = <#_total_partitions>; 
    

确认分区数"SHOW PARTITIONS ON <db_name>;"

  1. 使用 shell 提示符下的以下命令将架构和数据插入新数据库:

    mysql -u root -h 127.0.0.1 < schema.sql
    
    mysql -u root -h 127.0.0.1 < data1.sql
    

架构将需要几分钟才能加载。加载数据的时间将取决于数据集的大小。在每个表完成后,其行将被提交,并且可以对其运行查询。

于 2015-04-22T07:38:40.773 回答