Archive for 五月 2011

mount点fail以后影响rpm和check_raid

今天碰到一个比较奇怪的问题。我们的一台机器,突然跑rpm和check_raid会hang死。
另外一个同事跟进以后发现把这个系统中一个已经失效mount点强制umount掉以后就能够恢复。
感觉这个是两个问题啊。

库哥通过strace最终找到了具体的原因。
通过strace可以看到rpm运行的时候会首先检查整个文件系统的挂载点。
由于该挂载点的提供服务者已经下线,所以对应的节点访问会hang住。
也就导致了rpm无法继续运行下去。
目前还不能确认这种问题的影响面有多少。

另外一位大牛旺旺介绍了文件系统IO延时的文章。先记录下来,细细品味
Brendan Gregg 写的关于文件系统IO延时的系列文章,,虽然是基于Solaris系统做的,,对于Linux以及相关的系统也比较有参考意义,,有兴趣的同学可以了解下.
http://dtrace.org/blogs/brendan/2011/05/11/file-system-latency-part-1/
http://dtrace.org/blogs/brendan/2011/05/13/file-system-latency-part-2/
http://dtrace.org/blogs/brendan/2011/05/18/file-system-latency-part-3/
http://dtrace.org/blogs/brendan/2011/05/24/file-system-latency-part-4/

may your success

mysql character_sets_dir

我们有一套环境使用的是MySQL的多实例,并且我们MySQL不是放在MySQL认为应该放的目录:/usr/local/mysql下,所以今天又一个悲剧了。
数据库主机创建了一个ascii为字符集的表,主机创建成功,但是传到备机执行的时候,出错:
110510 17:14:55 [Warning] Slave: Unknown character set: ‘ascii’ Error_code: 1115
也就是说备机没有ascii字符集。
好吧,那就SHOW CHARACTER SET来看看,确实没有。
但是主机确实是有的,主备机的SHOW CHARACTER SET是不一样的。。。

好吧,其实我们备机使用的是多实例,主机是单实例。并且备机的MySQL采用的是二进制包的绿色安装。
那么这里就有一个问题,我们使用的mysqld_multi启动MySQL时它采用的是什么样的默认配置,这样的配置是否都是正确的
我们其实并不是非常肯定。
这里ascii字符集就是一个问题。

mysql的字符集配置详细请见:http://dev.mysql.com/doc/refman/5.1/en/charset-configuration.html
这里我们的备机用mysqld_multi启动以后,
show variables like ‘character_sets_dir’;
显示为:/usr/local/mysql/share/charsets。
而这个目录根本就不存在。

解决这个问题其实有三个办法:
1、mkdir -p /usr/local/mysql/share/; ln -s /path/to/correct/share/charsets /usr/local/mysql/share/charsets。
2、修改mysqld_multi,使得指向正确的目录。(目前这个办法没有走通,有待跟进)
3、在my.cnf中添加:character_sets_dir=/path/to/correct/share/charsets/
由于这个参数是read-only的,你只能重启MySQL来使它生效了

唉,其实作为一个MySQL DBA,连MySQL的这些配套的脚本都没有详细的搞清楚,有点汗颜,需要好好看一下。
如果你嫌麻烦,还是建议你把MySQL的二进制包放在MySQL指定的/usr/local/mysql下把,避免意外。

may your success