月度归档:2014年10月

MySQL Errno 28解决方案

昨天下午组里的同学跟我说数据库不能更改字段了,原本这台CentOS的机器工作很久都还还算正常,于是过去看了一下,发现MySQL在执行SQL之后报错,类似:

即提示错误码为28,告知用户无法创建表格。

错误码28第一反应就是磁盘空间不足,之后查看了df -hl查看了磁盘空间,发现MySQL所在的分区挂载的磁盘空间余量还有70%之多,之后查看是否是因为/tmp目录已满(即my.cnf中配置的tempdir)导致的,结果发现/tmp挂载的分区也有不少剩余空间,最后一想是不是有可能是inode已满导致的无法创建新文件的问题,使用df -i查看inode使用情况,发现inode使用已经达到了100%。

既然如此,那么整个事情也就明了了,磁盘空间已满不仅仅是物理空间上的已经使用完毕,也包括inode的使用情况,inode个数使用完毕之后,就不会有空间留给新文件用于记录文件信息了,自然也就不能创建文件了。关于inode,可以阅读阮一峰老师的《理解inode》这篇博文,清晰易懂。

解决问题的话,自然是要找到用尽inode的元凶,一般来说,小文件过多都是引起这个问题的主要原因。检查了这台数据库机器的进程,发现居然有有一套PHP在运行,查看了下php.ini之后,发现session的配置上,目录层级很深,运行了这么长的时间,session文件已经多到让人无语的程度,那么剩下的事情就好解决了,因为这台机器当前的服务不需要session的支持,直接干掉全部session文件即可。

小结一下,当MySQL出现28的错误码的时候,可以考虑:

  1. 检查磁盘空间
  2. 磁盘空间足够,检查临时目录空间大小
  3. 检查inode是否还有剩余

不得不说,这个事情并不是第一次看到,那么下次再出现磁盘无剩余空间,可以再看看是不是inode已满。

CentOS装机

最近想要做一些实验,无奈自己手头上没有富余的机器,看到好几个同事都自带电脑,没有用公司发的台式机,于是打算用这些台式机来做做实验。

公司本身是有完整的LAMP/LNMP环境安装包的,但是基于一些原因是不能使用的,整套环境只能自行安装,综合了一下决定安装如下软件:

  • CentOS 6.5 64位(可以考虑使用 北理工 的源,速度很快)
  • Nginx 1.2.7
  • PHP 5.4

装机其实是一个很无聊的过程,然而每次都能出现新的状况,真是让人抓狂,写过好几次这样的笔记,但是这次却又遇到了各种情况。

CentOS

启动项问题

安装CentOS已经变得极为简便,由于安装的是公司的台式机,直接用UltraISO或者直接用dd将镜像写入U盘,再通过GUI完成安装即可(参考此处),不过这次用U盘安装倒是出了个不大不小的问题,即安装之后只要拔掉U盘就无法启动。

这个问题首先感觉应该是引导项写入的问题,前期安装的时候一阵无脑的下一步点选,没有注意到写入的设备居然是U盘,而且这台机器U盘被识别成了/dev/sda,并不是意想中的/dev/sdb,那么单纯把启动项写入/dev/sdb,也就是实际的机器磁盘之后仍然是不能启动的,因为启动之后机器硬盘就被识别为/dev/sda了……

关键地方在于设定写入的磁盘的时候,点击更改设备按钮(如果你用的是中文安装环境的话),同时还要设定BIOS驱动器顺序这一项目(这里是一个折叠的选项),将驱动器设定为机器磁盘,比如安装的时候U盘是/dev/sda,那么这个项目就要设定为/dev/sdb,这样之后的安装才能正确的完成,机器才会能够启动。

远程桌面

作为Server来说是不需要GUI界面的,但是首先来说,为了方便实验,同时后期可能会安装Oracle数据库,那么一个图形界面还是很需要的,安装的时候可以选择Basic Server,同时自行设定软件界面,在桌面选项卡中选择上需要的桌面软件,我自己是勾选了KDE以外的所有项目。

GUI界面虽好,但是好几台机器放在脚下,每台机器再接一个显示器,还得有键鼠等设备,我的桌面肯定是放不下了。这时候就需要用上远程桌面了。

因为是做实验,选择了一个自己觉得简单易用的远程桌面软件TigerVNC

安装上来说非常容易,使用yum就可以:

这个软件的配置文件也是很简单,编辑/etc/sysconfig/vncservers,设定一下即可

简单来说就是设定第1个可登陆用户为root,同时设定分辨率为1024X768。

之后su到root下,通过vncpasswd设定登录所需的密码,之后通过客户端连接的时候需要通过这个密码登录,之后通过vncserver启动服务,这个软件也把自己注册成了服务,可以考虑使用service启动。

连接的时候需要使用端口,这里比较有意思的是这个软件监听的端口与你设定的用户编号有关,也就是用户1是5901,用户2是5902.

连接的客户端可以考虑直接使用Chrome的VNC Viewer扩展

VNC Viewer

再也不用在桌面上摆上一堆显示器键鼠什么的了。

VNC Viewer connected

PHP

PHP真是没太多麻烦的地方,然后在装libmemcached的时候发现1.0.18版本的libmemcached依然没法在我的CentOS 6.5的机器上成功的安装,没想到上次在Ubuntu上配环境遇到的问题在又遇到了一次,老办法,换1.0.16版本解决问题。

其他

测试的机器使用路由器串联起来的,只需要在路由器上使用一个简单的端口转发配置(家用路由器应该都有),将制定的端口请求绑定到各台路由器已连接的机器上即可。

端口转发

SSH的话需要多监听一个端口,CentOS的话修改/etc/ssh/sshd_config,解除对Port 22这一行的注释,同时加上想要监听的端口即可,即增加一行Port your-port,之后重启sshd服务。

同时配置上一条端口转发规则即可,之后用

即可。即所有的请求都发向路由器IP就好。

九月

九月

好像最近事情有点多,9月真是今年最忙的一个月了。

工作

同部门换组之后开始接触业务工作。

自己之前给大牛打杂,做点边边角角的工作,完全不用和PM还有运营的同学打交道,每天主要任务就是开心的写代码和折腾东西。

换组之后安心写代码的日子一去不返,每天的工作除了写代码之外还要做很多的沟通工作,沟通工作真是巨大的挑战,每天花在这上面的时间比写代码的时间多了很多,一段时间内觉得还是很困惑,每天的写代码工作几乎都要从下班之前开始,感觉上自己技术提升不够快,加上睡眠质量不好,对自己比较不满意,脾气变得有些急躁,不过既然工作内容都是这样,那我就安心去做吧,学会沟通也算是涨姿势了。

干了几个月,感觉作为开发,想要做得好真是不容易。

简单小结一下在业务组工作的感觉:

  • 团队利益为先,不要轻易的接需求,跟PM不妥协,讲道理
  • 业务是结果导向,业务成功才算是没有做无用功,老板可能为过程喝彩,但是结果不成功一样没用
  • 技术真到家在业务上可以体现,没时间写好代码感觉是个不好的借口
  • 任务拆解先行,没有任务拆解不能开始开发工作,否则留坑无数,越是紧急的项目越是要拆解得彻底
  • 风险及时上报,有问题快解决总比瞒着好,最多被批评一下,总比项目失败要好
  • 需要多想想业务的完整逻辑,对业务逻辑了解可以避免陪PM无谓的试错
  • 做事要有根据,口头需求不作数,临时变更需求不作数

项目

9月负责的3个项目是自己负责去评估工作和人力的,一个项目是和两位正式同学,一个项目是三位正式同学+两位实习生同学,还有一个也是两位正式同学。

同时开展两个项目真心难度很大,每个项目都需要协调人力,同时自己也要投入开发,拆解工作难度比较大。

难度大的原因是自己对工时的评估还是有些欠缺经验,对自己的工作时间评估能做到很准确,但是带上其他同学的话就感觉比较困难。

期间leader领我们玩了一个简单的游戏,让大家用扑克牌的点数评估一个工作时间,玩完之后明白其实完全可以让项目参与的同学一起来评估他们的工作时间,每位同学需要根据PRD评估出每一个功能点的具体工时。评估工时看起来消耗时间,但是自己认为这个时间是值得的,评估的过程中大家都能知道所有的功能点,如果突然有同学陷入困境或者请假的时候马上能投入人力开工协助,减少因为大家互相不知道功能点造成人力闲置的情况,保证项目能够按期完工。

大家评估出来的工期其实还是会有偏差,有时候过度乐观,有时候留了过度的buffer,这时候作为项目负责人就需要解决这些问题。对于大家估计出的工时长的工作需要特别注意,这时候可能会需要去和PM确定这个模糊的需求,让PM更明确一些。之后按照大家排期最合理的认领工作。实习生同学的使用可能需要注意,虽然现在的实习生同学能力都很厉害(至少比我自己……),但是实习应该是个欢乐的过程,不应该让实习生同学背负太重的项目压力,大家觉得有趣就好了,所以在使用人力上估计要* 0.x这个系数吧。

同时开发的时候考虑找到最短路径,同时循序渐进的找到各个时间点,每个时间点需要做出可体验或者可工作的对象,作为里程碑,周知需求方以及组内,让工作明确,也就是量化了吧。可以画个甘特图,感觉画完了甘特图里程碑的定义就简单了很多。

工时评估万万不能用上加班的时间,加班虽然是常态,但是确实是工作评估不应该评估的时间,每个项目都加班,直接硬抗,最后估计整个组的人都要离职了吧,还是大家开心的工作下去吧。考虑每天大家还要刷微博买东西看帖子吃午饭睡午觉,工时还是6小时一天来算吧。

技术

惭愧惭愧,我的MySQL还是没怎么学啊,每天回来倒头就睡,学习不够努力,需要批评。

还有一堆堆着的PPT/PDF,哎……

生活

太糟糕,说好的早睡早起完全没做到,睡眠不足引起肥胖与急躁,古人诚不余欺也……

貌似上个月去挂了几瓶,感觉还是有点虚,不太想要运动,前些日子减下来的肥肉似乎又长回来了,后面天气又更冷了,希望体重能够维持现状不要恶化了。

月初给母上大人置办了个交通工具(刚好拿到驾照……),上下班终于不用怕风吹雨打,早上也不用去赶那个坑爹的公交车了,自己为人子女,总算做了件让自己小高兴的事情。不过一看到空了的银行卡……哎,我退下努力学习工作了……