全部博文(368)
分类: Mysql/postgreSQL
2011-05-24 10:30:26
mysql cluster排错经验分享
折腾mysql cluster有一段时间了,期间遇到了很多问题,也翻看了不少关于mysql cluster的文档,学习到了很多经验,下面就将在mysql cluster下的排错步骤和方法和大家分享下!
mysql cluster中很多时候都会直接返回错误,让你一看就知道问题出在什么地方,举几个明显报错的例子:
The table 'test' is full
FATAL: failed to create test table!
很明显,这是说表已经慢了,没有空间了。需要检查你的DataMemory,IndexMemory的空间,如果采用硬盘存储表的话,还要检查数据文件的空间
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:
Version 5.0.11 (beta)
***EOM***
从这里我们就清楚的知道了是什么问题了,是因为10.0.0.99这个ip在config.ini中没有设置,因此这里显示为wrong host,
第二个地方是管理节点的日志,文件名为ndb_XXXX_cluster.log,XXXX为你设置的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 1504,Error: 2303等等,遇到这些报错,我们可以先用mysql的报错工具perror查看,比如查看报错号为1504的错误,使用命令为: perror --ndb 1504
2、在出现报错以后,查看WARNINGS或ERRORS信息,比如出现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、
2、
3、
还搞不定就去mysql官网提交bug吧,记得把日志文件打包上去。
暂时写那么多,如果大家有更好的经验,欢迎留言