正在过年。

外面下着雨,冷雨。

撑一纸雨伞,回到空旷的房子里。

空旷而幽暗,听见金鱼的呼吸。

感悟,想要说些什么,却不知从何说起。

电梯里,ONLY SMS.

不想看春晚了,没有坚持的心情和欲望。

RT上,微博上,流淌着节日的时光。

翻了翻前几天的日子,模糊而碎片。

时间溜走了。

就在那弹指一挥。

翻看david的博客,想象他怎样的被青春打湿双眼。

想象那无法回到的过去,之中的人和事。

其实,一个人经历的,正是大多数人经历的,

所以,世界上 ,才会有共鸣。

所以,诗人才会钟爱某一种水果。(亦或植物?)

所以,81才会面对年复一年的问题。

所以,张导和八达才能把简单的情节演绎的刻骨,

因为,那就是他,或他们自己。

桌上的mac,竟然没有去折腾它的欲望,

还一直没打开。

鞭炮,让我想起黄洋界上的诗句。

有时候,生活应是如此的简单,平和,感恩,幸福。

有时候,情绪却是魔鬼。

这正是鲜活动人生啊,

无需去刻意的改变,和逃避。

在纯粹的时间里看书,

竟然获得意外的充实,

我,其实很容易满足。

------------------我是华丽的分割线----------------------

一直没有心情和时间来想和看。

我常说,不仅要埋头做事,更要抬头看路。

方向很重要,

得过且过的生活态度,

会麻木一个人的心灵,

所以,每个人要有目标,要去学习。

为了现在,为了将来。

为了自己,为了团队。

那天,和古怪精灵的幸子吃全家福,

在街上找奖状而不是荣誉证书,

在花店里讨价还价,

在忙碌。

其实一直心怀感恩,

在这样的一个团队里很开心,

那一起走过的岁月,

和小黑屋里的每一个人。

无怨无悔,但是要努力。

机会,压力,责任。

------------------我是华丽的分割线----------------------

想去鼓浪屿走走,

一直有很多值得发现的痕迹,

而以后,或许上岛的机会就不多了,

不想遗憾,

亦或,

想度过这闲暇时间。

想过不一样的生活,

自由和梦想。

现在,

在过年,

这一刻,烟花绚烂。

 

今天是2012年的第一天,元旦佳节,过去的2011虽然已经成为历史,但是依然是值得铭记的时光。

昨天是2011年的最后一天,遭遇了诸多的不顺利。

在下班的路上,车很拥堵,虽然我出来的已经很晚了,可是还是被这个车堵在了路上:

后来终于到了天虹,在地下二层停车场找了很久也没有找到停车位,爆满了,中间还接了Jimmy一个电话。最后终于在一个角落把车停了下来,耗时N久。

在天虹买了些东西,结果小票不小心丢掉了,本来凭小票是可以免费停车的,没办法只能乖乖的交停车费出来。

在出口的路上一样拥堵,各种车各种抢道,凭借极大的耐心好不容易才杀出重围。

回家煮面吃,想开一瓶酒,结果不小心酒瓶打落在地,摔得粉碎,满屋酒气。

希望,这些小小的不顺利就停留在2011,不再追随。

徐志摩说:

轻轻的,我走了,正如我轻轻的来,

我轻轻的挥手,作别西天的云彩。

没有人能阻挡时光匆匆的脚步,我们能做的,唯有珍惜和感恩。

因为那曾经虚度的青春,永远永远不再回来。

2012会更好,因为路,就在脚下,需要留下我们的足迹。

 

有时候为了方面的导入数据,可以使用MyISAM存储引擎的表,直接把数据文件Copy一份放到对应的目录下,这样MySQL就能直接识别到,但是在主从复制的环境里这样做是有问题的,因为在从库上并没有这个表,从而导致后续的一些操作失败,比如在主库上执行导入数据的SQL语句,则在从库会报错如下:

mysql> show slave status\G
Slave_IO_Running: Yes
Slave_SQL_Running: No
Last_Errno: 1146
Last_Error: Error 'Table 'banpingdb.blog_score' doesn't exist' on query. Default database: 'banpingdb'. Query: 'replace INTO blog_score_result(id,score,avg)
SELECT b.id, min(s.comment), min(s.price) FROM blog_score s,a_blog b where s.name=b.biz_name
group by b.id'

同样的信息通过日志也一样会看到:

111215 19:17:54 [ERROR] Slave SQL: Error 'Table 'banpingdb.blog_score' doesn't exist' on query. Default database: 'banpingdb'. Query: 'replace INTO blog_score_result(id,score,avg)
SELECT b.id, min(s.comment), min(s.price) FROM blog_score s,a_blog b where s.name=b.biz_name
group by b.id', Error_code: 1146
111215 19:17:54 [Warning] Slave: Table 'banpingdb.blog_score' doesn't exist Error_code: 1146
111215 19:17:54 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log '1-bin.000001' position 130482476

这种错误处理也很简单,可以直接跳过,当然要评估可能产生的影响:

mysql> slave stop;
Query OK, 0 rows affected (0.22 sec)

mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER = 1;
Query OK, 0 rows affected (0.00 sec)

mysql> slave start;
Query OK, 0 rows affected (0.00 sec)

然后blog_score_result这个表的数据肯定不准确了,可以重新从主库导入数据,视应用的繁忙程度,要保证数据的一致性,先在主库上lock这个表,不让其他用户更新:

mysql> lock tables blog_score_result read;
Query OK, 0 rows affected (0.00 sec)

然后导出数据:

[root@banping 3306]# bin/mysqldump --default-character-set=utf8 banpingdb blog_score_result -u root -p>/tmp/blog_score_result.sql;

去从库导入数据:

[root@banping 3306]# bin/mysql --default-character-set=utf8 banpingdb -u root -p</tmp/blog_score_result.sql;
Query OK, 0 rows affected (0.00 sec)

到主库解锁这个表:

mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)

这样就完成了数据一致性的操作。主从复制的同步也正常了。这种事情的处理要结合实际应用情况,不可照搬就是了。

 

Postfix邮件系统的配置主要通过main.cf文件,路径在/etc/postfix下。如果要允许其他服务器使用Postfix的服务,需要重点关注inet_interfaces和mynetworks这两个参数。

# The inet_interfaces parameter specifies the network interface
# addresses that this mail system receives mail on. By default,
# the software claims all active interfaces on the machine. The
# parameter also controls delivery of mail to user@[ip.address].
#
# See also the proxy_interfaces parameter, for network addresses that
# are forwarded to us via a proxy or network address translator.
#
# Note: you need to stop/start Postfix when this parameter changes.
#
inet_interfaces = all

要注意的是,修改这个参数必须要停止再启动Postfix,单纯的restart是不生效的。

# You can also specify the absolute pathname of a pattern file instead
# of listing the patterns here. Specify type:table for table-based lookups
# (the value on the table right-hand side is not used).
#
mynetworks = 11.12.13.14,127.0.0.0/8

这个参数指定了要使用Postfix的IP地址,如果不设定正确,会在maillog里看到类似如下的提示信息:

Dec 1 11:16:21 mail postfix/smtpd[21197]:warning: 11.12.13.14: address not listed for hostname banping.com
Dec 1 11:16:21 mail postfix/smtpd[21197]: connect from unknown[11.12.13.14]
Dec 1 11:16:21 mail postfix/smtpd[21197]: NOQUEUE: reject: RCPT from unknown[11.12.13.14]: 554 5.7.1: Relay access denied; from= to= proto=ESMTP helo=<banping.com>

自己搭建邮件系统还是比较折腾的,使用Amazon ses是比较便捷的做法。

 

Xtrabackup是备份MySQL的很好的工具,目前最新的版本是1.6.3,和之前出过的1.6版本改进了不少,官方Percona目前对1.6.3的文档也改进了很多。安装包不再包含MySQL源码文件了,要根据需要从Percona在Amazon aws的服务器上下载,当然也可以自己下载需要的文件。

安装Xtrabackup,可以通过源码安装,也可以拿二进制程序过来直接使用,以下是源码安装的过程:

[root@data banping]# wget http://www.percona.com/redir/downloads/XtraBackup/XtraBackup-1.6.3/source/xtrabackup-1.6.3.tar.gz
[root@data banping]# tar zxf xtrabackup-1.6.3.tar.gz
[root@data banping]# cd xtrabackup-1.6.3
[root@data xtrabackup-1.6.3]# AUTO_DOWNLOAD="yes" ./utils/build.sh 5.5

自动下载的是libtar-1.2.11.tar.gz和mysql源码文件,mysql的版本根据给定的参数识别,可选的有以下版本:

Value Alias Server
innodb51_builtin 5.1 build against built-in InnoDB in MySQL 5.1
innodb51 plugin build agsinst InnoDB plugin in MySQL 5.1
innodb55 5.5 build against InnoDB in MySQL 5.5
xtradb51 xtradb build against Percona Server with XtraDB 5.1
xtradb55 xtradb55 build against Percona Server with XtraDB 5.5

默认libtar并不会安装,如果需要使用stream功能,需要手动安装这个程序。安装完成后,会生成一个xtrabackup_innodb55文件,可以用它恢复innodb数据,文件的路径如下:

Target Location
innodb51_builtin mysql-5.1/storage/innobase/xtrabackup
innodb51 mysql-5.1/storage/innodb_plugin/xtrabackup
innodb55 mysql-5.5/storage/innobase/xtrabackup
xtradb51 Percona-Server-5.1/storage/innodb_plugin/xtrabackup
xtradb55 Percona-Server-5.5/storage/innobase/xtrabackup

恢复的方法如下:

[root@data recover]# /banping/xtrabackup_innodb55 --prepare --target-dir=/banping/recover/

prepare就是recover的过程,也就是通过前滚和回滚使数据一致,target-dir就是备份出来的文件路径。这一步的操作和MySQL Server是没有任何关系的。官方还建议执行两次prepare以便生成新的redo文件,个人认为是没什么必要的。

关于1.6版本的安装及备份和Xtrabackup的原理,请参见我以前的文章:

http://www.banping.com/2011/04/14/xtrabackup-mysql55/

http://www.banping.com/2011/05/24/xtrabackup-stream-mysql/

http://www.banping.com/2011/07/01/xtrabackup-process-backgroud/