mysql cluster排错经验分享


mysql cluster排错经验分享

 

折腾mysql cluster有一段时间了,期间遇到了很多问题,也翻看了不少关于mysql cluster的文档,学习到了很多经验,下面就将在mysql cluster下的排错步骤和方法和大家分享下!

mysql cluster中很多时候都会直接返回错误,让你一看就知道问题出在什么地方,举几个明显报错的例子:

The table 'test' is full

FATAL: failed to create test table!

很明显,这是说表已经慢了,没有空间了。需要检查你的DataMemoryIndexMemory的空间,如果采用硬盘存储表的话,还要检查数据文件的空间

ERROR 1005 (HY000) at line 25: Can't create table 'tuge.pangolin_fnc_accountverification' (errno: 140)

Error | 1296 | Got error 738 'Record too big' from NDB    

这个也是很明显,表单行数据太大,需要更改表结构,因为mysql cluster最大单行数据的大小为8KB

另外一个例子是,当你导入大量数据的时候,出现如下报错:

Error 1297: Got temporary error 'REDO' log overloaded.       

ERROR : Got temporary error 1204 'Temporary failure, distribution changed' from NDBCLUSTER

ERROR : Got temporary error 1234 'REDO log files overloaded (increase disk hardware)' from NDBCLUSTER

遇到这个错误,是表示redo log用完了,需要增加,修改config.ini文件,增加FragmentLogFileSize或和NoOfFragmentLogFiles参数的值

 

但是在mysql cluster中,很多报错是不太明显的,从报错中很难看出是什么问题,因此我们就需要一些日志文件的辅助,比如:

Error handler restarting system (unknown type: xxxxxxxxxxx)

Error handler shutdown completed - exiting

看了这个报错以后,你会觉得不知所措,要获取更多的信息就需要查看日志文件,发生错误以后有两个地方能查看到问题的蛛丝马迹,第一个地方是数据节点的DataDir目录,文件名为ndb_xxxx_error.log,xxxx为在config.ini中设置的id号,还是上面的报错,在这个文件中显示的信息如下:

Type of error: error

Message: Invalid Configuration fetched from Management Server

Fault ID: 2350

Problem data: Unable to alloc node id

Object of reference: Could not alloc node id at 10.0.0.1 port 1186:

Connection done from wrong host imp 10.0.0.99.

ProgramName: ndbd

ProcessID: 2644

TraceFile: <no tracefile>

Version 5.0.11 (beta)

***EOM***

从这里我们就清楚的知道了是什么问题了,是因为10.0.0.99这个ipconfig.ini中没有设置,因此这里显示为wrong host

第二个地方是管理节点的日志,文件名为ndb_XXXX_cluster.logXXXX为你设置的id号,也可以在config.ini直接指定日志文件的名字,比如:LogDestination=FILE:filename=ndb_1_cluster.log,maxsize=10000000,maxfiles=6,上面那个报错,在这个文件中显示为:

2005-08-31 12:21:52 [MgmSrvr] WARNING  -- Allocate nodeid (0) failed.

Connection from ip 10.0.0.99.

Returned error string "Connection done from wrong host ip 10.0.0.99."

一般的问题都可以从这两个文件中找到蛛丝马迹,这样对我们处理问题就会更加有针对性,而不会像无头苍蝇,浪费了很多时间。

 

在排错的时候,还有几个技巧拿出来和大家分享。

1、一般,报错的时候都会有error code。比如ERROR 1504Error: 2303等等,遇到这些报错,我们可以先用mysql的报错工具perror查看,比如查看报错号为1504的错误,使用命令为: perror --ndb 1504

2、在出现报错以后,查看WARNINGSERRORS信息,比如出现Error CODE : 1528 Failed TO CREATE LOGFILE GROUP后输入SHOW WARNINGS;,会显示出具体的报错信息:

  Got error 1504 'Out of logbuffer memory' FROM NDB

  Failed TO CREATE LOGFILE GROUP


当你遇到的问题是在是不知道如何解决的时候,以下几个链接可以帮助你:
1、www.google.com
2、http://lists.mysql.com/cluster/
3、http://forums.mysql.com/list.php?25
还搞不定就去mysql官网提交bug吧,记得把日志文件打包上去。


暂时写那么多,如果大家有更好的经验,欢迎留言



posted @ 2011-05-24 10:30  飞鸿无痕  阅读(718)  评论(0编辑  收藏  举报