Archive for 七月, 2011

cacti一款常用的图形化系统监控工具,今天在自己的虚拟机搭了一个试试,准备部署到服务器上。

尽量使用一个真实、单独的帐号运行cacti:sudo adduser cacti。

由于它依赖snmp、rrdtool等,所以这些都是需要装的:

通过yum安装:

net-snmp.i386 : 一个 SNMP 协议工具和库的集合。
net-snmp-devel.i386 : NET-SNMP 计划的开发环境。
net-snmp-libs.i386 : NET-SNMP 运行时间库。
net-snmp-perl.i386 : perl NET-SNMP 模块和 mib2c 工具。
net-snmp-utils.i386 : 来自 NET-SNMP 计划的,使用 SNMP 的网络管理工具。

通过rpm安装:

rrdtool-1.2.30-1.el4.wrl.i386.rpm  rrdtool-devel-1.2.30-1.el4.wrl.i386.rpm  rrdtool-perl-1.2.30-1.el4.wrl.i386.rpm

这三个rpm彼此之间有依赖关系,所以一定要一起安装:rpm -ivh rrdtool-*

具体安装过程可以参考官方文档:http://www.cacti.net/downloads/docs/html/install_unix.html

安装完毕之后,检查snmpd进程是否启动,如果没有,则手工启动之:sudo /sbin/service snmpd start

然后检查snmp是否正常启动:(如果出现大量输出,则正常)

snmpwalk -v 2c -c public 127.0.0.1 system

snmpwalk -v 2c -c public 127.0.0.1 if

如果异常,请修改/etc/snmp/snmpd.conf:

access  notConfigGroup “”      any       noauth    exact systemview none none

access  notConfigGroup “”      any       noauth    exact all none none

然后重启snmpd服务。

这时,进入cacti graph界面,如果不能出现图片,在firefox下可以看到,图片无法正常获取,可以看看apache log里是否有warning、notice等,因为cacti的图片由graph_image.php 生成,它声明header为png的图片,如果这时输出了文本信息,就会导致图片无法显示。或者关闭php的errorlog,或者修改一下cacti的代码:

lib/rrd.php 2023行:function rrdtool_function_graph($local_graph_id, $rra_id, $graph_data_array, &$rrdtool_pipe=null) {

这时,可能图片能显示,但是数据都是NAN,不要着急,因为cacti的数据来自rrdtool,而rrdtool需要一段时间养数据,等个10分钟左右,一般就会有数据了!

———————————————————————–
具体记录在服务器上安装cacti的过程,希望以一台服务器作为cacti server,监控多台服务器。

1、检查是否缺少软件:

[admin@v080049 ~]$ php -m | grep ‘mysql\|snmp\|gd\|session\|sockets’

gd mysql mysqli pdo_mysql session snmp sockets

[admin@v080049 ~]$ yum info net-snmp

[admin@v080049 ~]$ ps axu|grep snmpd

2、添加cacti用户:[root@v080049 ~]# adduser cacti

3、下载cacti源码,并解压,mv至web目录下

4、建立mysql相关:

[admin@v080049 cacti]$ mysqladmin -u root -p’×××××’ create cacti

root@(none) 05:15:09>grant all privileges on cacti.* to ‘cacti’@’localhost’ identified by ‘cactipwd’ with grant option; Query OK, 0 rows affected (0.01 sec)

[admin@v080049 cacti]$ mysql -u cacti -p’cactipwd’ cacti < cacti.sql

我汗,做到这里,突然发现,这个机器是合作方提供的vip组,我怎么定位到一台服务器上????

昨天,我们服务器交换机带宽占用率非常高,导致服务器访问延迟。

在这个时候,我尝试从其他3台机器进行了多次mysql远程连接尝试(期间还有几次打错了密码),现象是,客户端没有任何响应。在mysql server上查看,有一些连接处于connecting的状态,但是很快就断开了。

这时,使用netstat -anp|grep 3306,看到大量(400个左右)CLOSING状态的tcp连接。大致看了下,基本每个连接都是,server端向client端发送了61个包,而client仅向server发送了一个包。

59ed9f216d5d51_

当时比较慌乱,没有细思考,采取了以下两种无效的方法:

1、重启了mysql服务器,之后连接仍然存在,而且连接所属的pid没了。如上所示。

2、service network restart,连接也还在

在网上搜索,可能关键词不对,也没有找到合适的解决方法。只好自己想,在过程中,使用过fuser、lsof等命令,查看使用file或tcp、udp端口的进程信息等, /sbin/sysctl -A 查看tcp的超时配置。

因为closing状态,是代表server和client同时发出关闭socket请求,我猜想,是因为网络阻塞,延时或丢包造成的。而我重启了mysql之后,与socket关联的进程消失了,socket处于无主的状态,只能等待超时或者系统回收了。

这时我的想法是,既然socket也是一种文件,是否我找到该临时文件,删除就好了,但是很郁闷,我没找到。

又,如果我在client机器上,用同样的端口连接,发送关闭FIN包,是否可以关闭该连接呢?用了nc命令,还是无效。猜测是因为对端已经没有用户进程管理这个端口了。

折腾了两个小时,很奇怪的是,突然间,这些closing的端口就消失了。我猜测,如果是超时,因为我在不同时间去尝试连接的,前后总有一二十分钟的差距,不过也没有太注意到这些端口是逐渐消失,还是同一时间消失的。另一种可能是,系统内部有回收进程,当socket资源不足、或者一段时间之后,就会触发回收机制,释放了这些端口。

不明白,但是系统很有意思。

附上socket状态转移图:http://www.night-ray.com/TCPIP_State_Transition_Diagram.pdf


今天遇到这么一种情况,

<script type=”text/javascript”>
// use mootools
function test(){
this.getParent().destroy(); return true;
}
</script>
<div>
<a href=”http://www.baidu.com” onclick=”javascript: test();” >click me </a>
</div>

即当点击一个a标签时,整个销毁其父div。该a标签同时拥有click事件和href链接,click事件处理函数返回true。

在chrome和firefox下,click事件执行后,href生效,跳转页面。

而ie7下,click事件执行后,就结束了,也没有报任何提示或错误。

我不懂浏览器哈,只是猜测。

一种实现方式,在chrome和firefox里,会先把a标签上的执行序列准备好,在这里就是click和href event。还有一种可能是,destroy并不是真的释放了,仍然在内存中,可以访问到。

但是,依赖于已经destroy的element,显然不是好的风格,所以,这里,改destroy为addClass(‘none’),同时这个none class还可以作为已destroy的标识,用于其他的检验中。

大家对Hudson可能不太了解,但是对于持续集成这个概念一定不会感到陌生,我们日常测试过程中也一直在使用CruiseControl 来进行持续集成,在这里不讨论持续集成的意义,可以参考博文:http://rdc.taobao.com/blog/qa/?p=3474,先来简单看一下Hudson是什么:

1Hudson是什么

Hudson是一个界面友好,功能强大,拥有高可扩展性的持续集成监控系统,目前来说Hudson可以做以下两件事情:

    持续构建软件项目
    像CruiseControl一样,hudson提供自身的持续集成系统,目前可以自身集成了subversion,cvs,maven这几个插件,可以构建或者定时构建 软件项目,如果有测试失败,可以将测试报告以丰富的形式展现出来
    监控外部任务的执行情况
    可以监视没有在hudson进行的配置的定时任务,甚至是远程机器上的任务。(目前对这一部分的功能没有做深入的研究)

2Hudson有什么特点

以下摘抄几点Hudson官方申明的特点:

    容易安装
    只需要运行java –jar Hudson.war 或者或者部署到servlet容器中.不需要额外的步骤,不需要数据库
    容易配置:
    Hudson的所有配置都可以再它的友好的用户界面上完成,同时如果会对配置项进行校验,如果有明显错误会 有及时提醒,另外还有非常人性化的帮助页面,只需要点击页面后端的“?”图标就可以看出当前这个配置项的详细说明,从此以后再也不需要繁琐且容易出错的xml配置了,当然,如果你非常想使用xml的话,hudson同样允许你这样做
    构建后打标签:
    当前项目构建完成后,可以将当前代码在svn上打上标签
    支JUnit/TestNG 测试报告

    JUnit的测试报告会显示为详细的测试报告(具体到哪些是失败的),也可以是概要性的报告(当前类中有多少个case失败了)。同样,这里还提供历史的测试信息,包括一个非常直观的趋势图.

    分布式构建:
    Hudson可以在多台电脑上进行分布式的构建,以减少每天电脑承担的负荷,可以让我们运行更多的持续集成,同样也很好的利用了大家闲置的系统资源
    文件版本跟踪:
    Hudson可以跟踪到每一次构建中,都是用到了jar包,同时还能反应出这些jar包的版本,这对于我们系统依赖比较复杂时追查问题特别有用
    插件支持:
    Hudson有很好的扩展性,目前有大概超过100个插件的支持,用户可以很方便的进行扩展来,为你的团队做插件

3、我们对于Hudson的体会

这是我们在使用过程中实际感受到的hudson带来的一些实惠:

    一目了然的统计信息
    在测试报告中不近可以看到单个失败的测试以及出错信息,还可以看到当前测试类,包乃至当前项目不同粒度的统计信息,信息包括,失败case总数,失败数,忽略数以及变化情况,另外还有非常直观的趋势图
    动态查看运行情况(日志)
    在我们的项目在运行过程中,如果测试失败了,我们第一反应一定是去看一下运行日志,在hudson中我们再也不用去做繁琐的linux操作了,只需要选中本次构建,然后点击左侧的“Console Output”就可以看到当前这一次构建的情况了,如图:
    output
    添加描述
    在hudson中,我们可以方便的给小到具体测试用例,大到当前项目来写一些我们可以提供的描述信息,一方面可以及时的反馈每个人对失败用例的跟踪情况,另外一方面可以帮助我们的测试管理者方便的对项目有着全局的掌控,另外就是可以起到很好的提醒作用,像我们有时候暂时ignore了一个case,为了不忘记再修改回来,可以在这里注明:
    description
    项目分组视图
    可以避免项目过多导致混乱
    工作空间查看
    Hudson让我们很直观的看到当前这个项目在它上面所运行的代码都包含哪些,这是像CC这样的持续集成工具所不能达到的,有了它,我们再也不会因为某个东西忘提交而烦恼半天了
    丰富的插件支持
    在hudson社区,有各种各样的plugin存在,可以涉及到从SCM到产生测试报告的方方面面。有一些很实用的插件,比如:clover,让我们对测试覆盖率一目了然。还有其他很多很有特点的插件,比如有一个”VMware plugin “可以让我们在构建之前启动一个vmvare虚拟机,在构建完毕之后关掉它。如果你觉得还不够,甚至可以安装一个” The Continuous Integration Game plugin”的插件,它让我们将改善构建成功率变得像游戏一样快乐
    高可扩展性
    这一点其实是上一点的基础,如果没有高的可扩展性,是不会有如此之多的插件去支持hudson的,就我们自己而言也可以很容易写一些插件来帮助我们的工作,比如我们已经完成并且在使用的“旺旺消息插件”,一旦有测试失败变可以立即得到通知

4、总结

这其实应该算做一个hudson与CC的对比,有什么理由我们要选择hudson来替换CC,我想大概有这么几点:

    配置简单,安装容易,上手快
    对于任何一个新人,都不用熟悉太多的linux命令就可以动手将自己的项目进行持续集成
    界面友好,人性化
    相对于CC我想这应该算一个很大的特点,其中最重要的应该是“console output”这个功能,可以让我们很直观的看到服务端的日志,不论是具体的测试人员还是测试管理者,甚至开发,客户方都可以很清楚的了解当前项目的质量情况
    扩展性强
    Hudson提供了众多的扩展点,hudson甚至允许第三方将自己的类声明为扩展点,让我们可以使用第三方提供的扩展点来进行扩展。活跃的社区气氛让我们对hudson的未来充满了信心
    最后,补充CC的一位开发者的一句话:
    Some of the stated benefits of Hudson (e.g., No more “full rebuild” before a commit, No more running tests locally) concern me but from what I can tell, the actual implementation fits fine with, shall we say, a correct Continuous Integration mindset –Jason Yip

在俗世修行,对于我这般凡夫俗子才是真修行。在单独的时候,即使心较容易静下来,清晰也比较缓和。但一旦回到人群中,受到外界干扰,就又起波澜了。

工作中最容易起的就是嗔怒心。

像昨天周日,嗔心一个是因为不赞同加班,另一个也是因为认为产品的方向有问题。但是,我只是一个工程师和一个小股东。加班的问题,我不能只从自己的角度考虑,要从公司的角度考虑,所以加班是必须的,更何况时间也不长,还是在家里。产品方向的问题,我只能提出疑问或者建议,若公司不采纳,那便随缘,放下便是!

做自己不喜欢的事情,便会有嗔心。这不是一个学佛人该有的。像虚云老法师,从小孩子跨下钻过也平平淡淡、未起丝毫嗔恨。何况,我现在遇到的都只是一些鸡毛蒜皮的小事,多是观点不一致而已呢?!

观点不一致,是因为人和人的肉团心是有区别的,被贪嗔痴蒙蔽的程度不同,这里你好一点,那里我好一点,而我们的本心都是一样,本具如来智慧德性的。又何必五十步笑百步?执着于自己的观点,不正是“我执”、“愚痴”,动“无明”,受到伤害的又是谁呢?造的果又有谁能替我来受?!

观点不一定有对错,或者这个是我对,那个是我错,针对我们的产品而言,其实仅仅是用户行为受到哪些影响,得到多少奖品而已,这些物质的东西,我自己都不在乎,又为什么认为用户会在乎呢?而且,对于产品设计而言,我终究还是一个门外汉,建议可以给,最终还是听别人的为是,学习这些经验才是重要的。

工作,正是一个好机会,体会到无常、苦,先学习看淡,再尝试放下。若不珍惜这个机会,以后还去哪里找?!

但是看淡、放下,不是逃避自己的职责!我是工程师,是小股东。作为工程师,我需要按时按质的完成产品需求。虽然说,一个好的工程师,需要理解产品,但是对于我们小公司来说,理解是一方面,效率是另一方面,两者需要有平衡。生存,才能发展,我先不想着要去开发多么伟大的产品出来,先做出能够持续发展的产品就好。作为小股东,我需要了解公司的发展方向,并给出自己的建议。注意,这里是“建议”,而不是“反驳”,如果仅仅能提出反驳意见,而给不出建议的话,只会让别人反感,让事情变得更糟。了解方向,是阶段性的,在开发过程中,我不要太纠结于这一点,那时,我的角色是“工程师”,而不是“小股东”。

关于公司里的角色,又是一个放下分别心的好处所。工程师和股东,都只是假名,我只要在合适的时间、地点,做合适的事情就可以了!而佛法的修行,正是教我们这个,并且做完就放下。

最后,公司里的事情,并不是我的技术兴趣,但是这没有关系啊!很多人的工作,都不是兴趣。工作,仅是生活的手段而已,认真负责的做完,然后就回到生活、回到修行中来。兴趣,可以在闲暇时间做,比如,有的人对赚钱有兴趣,那就做兼职。我对技术有兴趣,就去做我喜欢的技术好了,或开源代码,或算法,或技术书籍!工作与我的兴趣并不冲突啊

归根到底,看淡,看破,放下

我不会erlang,但是这篇文章说的深得我心!

——————————————————————————-

我是个守旧派 — 你不需要任何强大的开发工具。只需要一个文本编辑器和一个erlang shell。

打开你的文本编辑器:

输入下面的程序。

-module(hello).
-compile(export_all).
start() -> “hello world”.

把它存成一个叫做 hello.erl 的文件。

启动 erlang shell。它会显示”>”
输入两行命令:

> c(hello).
> hello:start().

第一句是编译这个程序。第二句是执行命令 hello:start()

这就是所有要做的 — 用文本编辑器在一个文件里输入三行代码 — 然后在shell里输入两行代码。

这就是所有要做的。95%的乐趣都可以通过一个简单的文本编辑器和erlang shell来实现。这就是大多数erlang系统的实现方式。

erlang shell 可以用无数的方法来安装 — 编译源代码,或apt-get安装(或其它的什么方式)

忘了 git/IDEs/rebar … 吧

所有的语言都可以用这种方式。

IDE 和 build工具是我知道的阻止我入手的最大的障碍

我使用

– a shell
– makefiles
– emacs

适用于天底下所有的编程语言。

98%的乐趣只要有一个编译器就能获得 — 其余的全是虚的。

忘了那些工具 —

像rebar这样的工具会自动生成一些东西,但如果你不知道自动生成了什么,如果这些工具无法使用了,你将会变得困惑不已

买一本不错的书,手工敲入这些程序。

边写边想。

30年后你就能掌握它,成为一个优秀的开发人员。

对于编写小程序,开发工具是不需要的,你需要完全的理解这些程序是怎么工作的。对于任何编程语言都是这样。编程是一种艺术,没有快捷的方法。就像是弹钢琴 — 除了花无数的时间进行练习外,你能有什么捷径吗?我想没有。

在shell中使用画线工具,启动shell:

输入
> A = 1

然后

> A = 2

发生了什么,为什么。

学编程没有简易的方法 — 工具帮不了你。

你的大脑千万倍的好过最好的IDE。程序在你的大脑里形成,而不是在IDE里

我是个守旧派。

祝你学的快乐 — 如果没有乐趣,一切毫无意义 — 别跟那些工具纠缠不清。想入手,你需要的只是一个文本编辑器和erlang shell。

/Joe

zz from: http://www.aqee.net/2011/07/21/erlang-questions-ways-to-get-started/

服务器迁移是web开发中很有可能遇到的问题,怎样平滑过渡呢?正好最近遇到这个问题,理了一下思路。

将项目从一组服务器迁移到另一组服务器,包括环境、代码、缓存、数据库的迁移。首先,如果能确保新旧服务器的环境一致,至少操作系统、web server等是兼容的,将会轻松很多。否则就需要检查所需的各种software、扩展等是否具备。

代码的迁移一般很简单,如果代码是目录无关的,那直接cp部署就ok了。如果目录相关,就需要保证新旧服务器的目录结构一致。还需要注意log、临时文件等的读写权限。

web server的配置,也是直接复制就可以了。

缓存的话,如果严重依赖缓存,比如没有缓存的情况下,数据库可能会崩溃,那就需要考虑事先养数据的问题。我们没有这个顾虑,所以不考虑。

最麻烦的就是数据库的迁移了。我的想法是利用mysql的主从备份机制,尽量简化问题。

http://farm7.static.flickr.com/6023/5960000159_758bbeddfd.jpg

如上图所示,线条代码关联。红色为初始状态,访问的是旧服务器。希望将web服务迁移到服务器B和C上,B同时还作为数据库和缓存服务器。

迁移阶段,首先将serverA和serverB的数据库做一个主从备份,然后将serverB和serverC做主从备份,其中serverC的数据库不被访问,暂时只做备份用。之后,将代码部署到serverB和serverC上,数据库和缓存都指向serverA。

做好以上步骤之后,在本地将host配置到serverB或serverC上,检查是否可以正常访问。如果正常,则可以切换域名解析了,将域名指向serverB和serverC。这时,用户访问的时候,可能会有部分用户还是访问serverA,而部分用户访问到新服务器了,但是由于数据库还是serverA,所以不存在脏数据的问题。

等48小时后,检查serverA的log,确保没有访问。

方案1:找访问量较少的时间点,禁止web访问,修改代码配置里的数据库host,指向serverB,然后再开启web访问。这会有短时间的停止服务,不过对于php代码而言,预计1分钟内肯定可以搞定。

方案2:找访问量较少的时间点,flush serverA的binlog,不停止服务,修改代码配置里的数据库host,指向serverB。检查新的binlog,可能会有部分sql句子需要同步到serverB,那么手工操作。

我准备采用方案1了,因为我们业务的特性,即使停止1分钟也无所谓,没有必要增加复杂度。

佛学初级研修班结束了,有几天没念三皈依,只是看佛经、思考,还是不行,心浮气躁。

佛陀说的戒定慧果然没错。戒是诸恶莫作,众善奉行,求的是身语意的清净。只有戒了,才能定。定是禅定,排除妄想,能安住一心。而定了才有慧,能够明了一切因果,明了一切法。

我是初学者。看佛经和思考,是希望修慧。前些日子念三皈依一个是生正信,再一个也是希望减少妄想念头。而现在不念诵之后,求慧相当于没有根,戒也守的不好了。因为不定,就安不住念头,当外面的事情来到的时候,嗔恨、执着、贪念都纷纷升起。

今日记下,依旧每天念诵三皈依或者阿弥陀佛圣号至少500遍,直到能够收发由心,再做其他考虑。并且把麻辣烫戒了,之前认为里面没有肉,但其实不然,一则我去吃它,求得是一个肉味,从心上来说便是杀生了;再一个,里面多多少少是有肉的,而且不知道是什么肉,从身上来说也是杀生了;怀着自欺欺人的念头去吃,更是妄语!之前戒掉的烤串,也继续戒。

佛陀的教诲,每一个字都有深含义,我必须依教奉行,没有蹊径可走。

在两台linux机器上做主从备份,比如主服务器是192.168.0.1,从服务器是192.168.0.2。 首先修改主服务器的配置文件my.cnf:

server-id= 1 # 保证主从服务器不一样即可
log-bin = /home/mysql/log/mysql-bin
binlog-do-db=database-name-1 # 如果所有db都需要记录binlog,那么可以省略该行;如果有多个特定的db,分开每行写
binlog-do-db=database-name-2
master-connect-retry=60
expire_logs_days=7

重启服务器以使其生效。

然后修改从服务器的my.cnf:

master-info-file = /home/mysql/log/master.info
server-id= 2 # slave
master-host=192.168.0.1
master-user=user-name
master-password="password"
replicate-do-db=database-name
log-slave-updates
master-connect-retry=60
expire_logs_days=7

在主服务器上,给从服务器帐号开放所有权限:

root@(none) 03:55:04>grant all privileges on *.* to 'user-name'@'192.168.0.2' identified by 'password' with grant option;

在主服务器上,触发重新生成binlog,以作为同步的基准,并将老数据同步到从服务器上去:

$/home/mysql/bin/mysqldump -u root -p'password' --all-database --opt --flush-logs --master-data=2 > happy_try.sql

在从服务器上装载老数据:

/home/mysql/bin/mysql -u root -p’password’ happy_try < happy_try.sql

找到这时主服务器的最新binlog:

mysql>show master status;

重启从服务器,使配置生效。

登录到从服务器的数据库,重置并重启同步线程:

mysql>stop slave;

mysql>change master to master_log_file=”mysql-bin.000011“,master_log_pos=0; # 主服务器上的最新bin

mysql>start slave;

mysql>show slave status\G

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 192.168.80.27

                  Master_User: mysql

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: mysql-bin.000011

          Read_Master_Log_Pos: 1194

               Relay_Log_File: mysqld-relay-bin.000002

                Relay_Log_Pos: 251

        Relay_Master_Log_File: mysql-bin.000011

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: happy_try

          Replicate_Ignore_DB: 

           Replicate_Do_Table: 

       Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: 

                   Last_Errno: 0

                   Last_Error: 

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 1194

              Relay_Log_Space: 407

              Until_Condition: None

               Until_Log_File: 

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File: 

           Master_SSL_CA_Path: 

              Master_SSL_Cert: 

            Master_SSL_Cipher: 

               Master_SSL_Key: 

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error: 

               Last_SQL_Errno: 0

               Last_SQL_Error:

1 row in set (0.00 sec)

在主服务器上做一些修改,看是否同步到从服务器上。

如果发现有错误,请查看从服务器的master.info看配置是否正确,也可以查看从服务器的error-log看是什么原因。如果是初次同步,必要的时候,可以删除掉master.info文件,并重启从数据库以强制更新。

2011-7-21 增加:

master.info里记录了master的相关信息,比如hostname、user、password,还有当前master的binlog名称、slave当前操作到的master binlog的pos偏移位置。

这个文件,在同步开始之后,就不要删除了,否则会丢失slave当前操作到的master binlog的pos偏移位置!!

另外,master、slave的角色是相对的,可以做master-master备份,即互为主从备份(写逻辑需要注意)。也可以将一台master作为其他数据库服务器的slave。但是,一台slave不可以拥有多个master!

2011-9-20增加

数据库同步帐号和正常代码访问帐号,最好分开。

在做数据库迁移的过程中,就可以禁止代码访问帐号写入数据,这样就可以避免主从同步中的数据冲突了。

2012-1-9增加:

当slave出错时,可以先处理完错误,然后:

SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;    start slave;

2012-3-12增加:

在生产环境mysqldump,注意添加–skip-opt选项,以免锁表

《十善业道经》里说,远离杀生、偷盗、邪淫、妄语、两舌、恶语、绮语、贪欲、嗔圭、愚痴,咋一看去,都很容易理解,似乎自己做的都不错,但细细看净空老法师的讲义,才发现,生活中,我们于不知不觉中已在造恶了。人生苦短,幸好得闻佛法,知道自己曾经做过这么多错事。而佛陀慈悲,给我们揭示了一切性空的道路,所谓放下屠刀,立地成佛。只要我们肯悔改,真正改过,业都是空的。所谓因缘,过去造作是因,但是今后修为好了,断了恶缘,因和缘不结合,还是不会有恶报的。

四圣谛第一讲的就是苦圣谛,我现在深有体会。病痛缠身,工作不顺利,远离家庭亲人,若在以前,必定是怨天尤人,什么嗔圭、恶语、妄语肯定都出来了。感恩广化寺佛学研修班将我领进门,感恩这么多祖师大德的文章让我有所领悟,更感恩佛陀慈悲,留下佛法在世!现在,我以苦为修行,深刻反省自我。所谓病痛、不顺、生别离苦,其实都是往昔的因,现在结了果而已。

我不孝。记得小时候,父母不随我意的时候,会非常生气,还曾经写下父母的名字,恨恨咒骂。现在,写下这句子,都觉得羞愧、罪孽深重!在意念里,或许我已犯了杀父杀母的罪行啊!今生若不精进修行,下地狱都是正常。

初中时候,曾经搞过一个小团体,我自己担任“王”,还画了自己的钱币,在同学间流通。在这其中,十几岁的我,贪了多少小便宜?我欠这几十个同学的啊!

占公家的便宜就更多了。小时候从父母单位、现在从公司,拿笔、纸等文具,利用公家的东西打印、打长途,不一而足,甚至视为理所应当。傻啊!为了一个月几块、几十块的,我欠了亿万人,怎么还?唯有修行,自度度他。若真是因缘结合,果报在前,那便偿还好了。

嗔圭,可能是我犯最多的了。原来不懂,总说我是天生的坏脾气。可是《百年虚云》里面说,你把坏脾气拿出来啊,若是天生便该可以拿出,否则便是心想造作,是把自己的过错或不满嫁接到别人身上,只是一个借口而已。想我小时候,为了翻墙头进一个小学校玩,跟保安打架争吵;为了从一个办公楼里穿过,被带到保卫科,还洋洋自得。到了大学,愈演愈烈,同上铺的同学打架,还闹到年级里去。工作以后,跟同事间摩擦不断,无法心平气和的响应别人的需求。还用非黑即白来标榜自己为君子,真是可笑可悲啊!

迷途知返,佛陀慈悲,使我在二十八岁时可以幡然觉醒。

病痛有多种,我这个应该一个是身体方面虚弱,抵抗力差,再一个是消业障呢。若能以此小小病痛,消除我往昔的种种恶业,已经是非常慈悲了!我当感恩,尽此一生,多修善行,才可回报!

工作不顺,遇到合作方的拖延,这不正是一面镜子。当别人需要我配合的时候,我做的怎样?我态度怎样?我是否上心?我是否百分百投入?我做不到,便是因,又怎么能妄求善果呢?今后工作中,要更加负责,尽心尽力!再一个,我们做的这个东西,是否有益世人,或者是否至少无过?在合作中,我们是否诚实?事业成败,随缘便好。

生别离,这是现报。我有几年没回过家了?姥姥、妈妈想不想我?再者,我情念太重,每每离别时便会落泪,这也是磨练。亲人朋友很重要,要珍惜,要和睦相处,更要随缘放下、不执着。

生活中真修行,我需要时时警醒、经常反省,有过则改,无则加勉。