欢迎大家来到IT世界,在知识的湖畔探索吧!
最近一直在不停的测试mysql的各种高可用方案。 Mysql目前的高可用方案有蛮多的,架构上有MM,MMM,MHA,Cluster 等等。 其中Cluster是真正的集群解决方案, 只是用的人太少了,几乎没啥实际的例子,还停留的口头阶段。但是没办法,既然要选择,还是得对比才行。
经过大概2周的测试,发现Mysql Cluster问题还真不是一般的多,性能,存储等等。怪不得没人敢用,需要前进的路还很长。
Mysql cluster的实施方案太多了,网上一抓一大把, 今天就分享个遇到的问题,和大家共同探讨。错误发生在cluster建好之后,向里面导入数据的过程中:
ERROR 1114 (HY000) at line 54: The table ‘customer_info’ is full
可能的原因:分配的内存或者硬盘空间已经用完(如果你采用磁盘表的话),需要通过ndb管理节点客户端和登录mysql查看具体的原因,通过ndb_mgm登录,执行命令:
All report memory看下分配的内存是否使用完,如果采用磁盘表的,还需要登录mysqld节点,然后执行如下查询,来确定是否是磁盘不足:
SELECT TABLESPACE_NAME, FILE_NAME, EXTENT_SIZE*TOTAL_EXTENTS/1024/1024 AS TOTAL_MB, EXTENT_SIZE*FREE_EXTENTS/1024/1024 AS FREE_MB, EXTRA FROM information_schema.FILES WHERE FILE_TYPE=”DATAFILE”;
解决办法:如果是数据内存不足的情况,直接更改文件config.ini中[NDBD DEFAULT]下的
DataMemory=20000M
IndexMemory=3096M
根据实际情况加大
如果是采用磁盘表,磁盘文件空间不足的情况,就需要添加磁盘文件,格式如下:
CREATE TABLESPACE ts_mycluster
ADD DATAFILE ‘mycluster_data_1.dbf’
USE LOGFILE GROUP lg_mycluster
INITIAL_SIZE 5000M
AUTOEXTEND_SIZE 200M
ENGINE NDBCLUSTER;
磁盘表使用时还要使用undo log, 详细创建步骤如下:
Note: 一旦mgmd 或者 ndbd 初始化(–initial),磁盘表将会丢失,但是数据文件还存在,需要手工删除
1.log file group
CREATE LOGFILE GROUP lg_mycluster
ADD UNDOFILE ‘mycluster_undo_1.log’
INITIAL_SIZE 200M
UNDO_BUFFER_SIZE 20M
ENGINE NDBCLUSTER;
–添加
ALTER LOGFILE GROUP lg_mycluster
ADD UNDOFILE ‘mycluster_undo_2.log’
INITIAL_SIZE 100M
ENGINE NDBCLUSTER;
2.创建tablespace
CREATE TABLESPACE ts_mycluster
ADD DATAFILE ‘mycluster_data_1.dbf’
USE LOGFILE GROUP lg_mycluster
INITIAL_SIZE 100M
AUTOEXTEND_SIZE 10M
ENGINE NDBCLUSTER;
–添加
ALTER TABLESPACE ts_mycluster
ADD DATAFILE ‘mycluster_data_2.dbf’
INITIAL_SIZE 100M
AUTOEXTEND_SIZE 10M
ENGINE NDBCLUSTER;
datafile 使用率:
SELECT TABLESPACE_NAME, FILE_NAME, EXTENT_SIZE*TOTAL_EXTENTS/1024/1024 AS TOTAL_MB, EXTENT_SIZE*FREE_EXTENTS/1024/1024 AS FREE_MB, EXTRA FROM information_schema.FILES WHERE FILE_TYPE=”DATAFILE”;
3.创建磁盘表
create table customer_info
(
id int auto_increment primary key,
customer_name varchar(50) not null,
customer_vname varchar(30) default null,
register_date date default null,
index(customer_name)
)
TABLESPACE ts_mycluster STORAGE DISK ENGINE NDBCLUSTER;
列customer_vname,register_date的数据将会存储在磁盘上,id和customer_name的数据仍会存储在内存中,因为只有没有索引的列才能存储在磁盘上。创建完成后,就可以进行正常的数据操作了。
log file group,tablespaces,Disk Data tables需要按照一定的顺序执行,删除这些的时候也是这样,删除规则为:有任何表空间使用log file group时,log file group不能删除;表空间含有任何data files的时候,不能删除表空间;Data files含有任何表残余的时候,不能从表空间删除数据文件。
—-删除数据表
drop table Disktable;
—-删除数据文件
alter tablespace ts_myclustere drop datafile ‘mycluster_data_1.dbf’ engine ndbcluster;
alter tablespace ts_myclustere drop datafile ‘mycluster_data_2.dbf’ engine ndbcluster;
—-删除表空间
drop tablespace ts_mycluster engine ndbcluster;
—-删除日志组
drop logfile group lg_mycluster engine ndbcluster;
—-可以在INFORMATION_SCHEMA数据库中的FILES表中查看磁盘表的信息。
show create table命令生成的SQL并不能正确反映是内存表还是磁盘表,应使用ndb_desc工具来查看。
免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://itzsg.com/22573.html