2009年12月

昕昕和巧虎




新做一个离线版的blog

为了防止在将来的某个时候,blog再被和谐,所以这2天折腾出来了一个离线版的blog


其实说其离线也不太准确,只是其没有外网地址而已,只要设置了内网的host即可访问了


找了一台linux服务器,在其上面安装Apache2,Mysql5,Php5,gd等...


在安装gd时,遇到了一些麻烦,出了很多的错误


configure.ac:64: error: possibly undefined macro: AM_ICONV


出这个错误,是需要安装gettxt


Libtool library used but `LIBTOOL' is undefined


这个错误,需要安装 libtool,下载了源码,编译安装后,居然还是报错


无奈,下了一个libtool-1.5.24-6.fc9.i386.rpm包,给强制安装上去了


rpm -ivh --force --nodeps libtool-1.5.24-6.fc9.i386.rpm


最后,终于安装完了,把数据导入blog后,首页直接出现了以下警告:


Warning: getdate() [function.getdate]: It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.


这似乎是在php5.3下才有的,vi global.php,加上如下内容就好了


date_default_timezone_set('UTC');


对于离线版和正式版的数据同步,准备用mysqldump来完成,当然也可以用bo-blogs自带的备份导入工具来做


 

Nginx的上传模块NginxHttpUploadProgressModule

Nginx提供了NginxHttpUploadProgressModule模块,用来处理文件上传的进度


它不是nginx内置的模块,编译时需要加上一下选项


--add-module=../nginx_uploadprogress_module


以下是配置的部分:



折叠复制代码




  1. #开启上传进度,使用8M空间存储每个连接的进度信息  

  2. upload_progress proxied 8m;  

  3. #以/upload开头的为上传url  

  4. location ^~ /upload  

  5. {     

  6.     #设置body最大值为100m  

  7.     client_max_body_size    100m;  

  8.     proxy_pass http://127.0.0.1:8080;   

  9.     #此url需要跟踪进度信息,该信息在上传完成后会保留30秒  

  10.     track_uploads   proxied 30s;  

  11. }  

  12. location ^~ /att/progress {  

  13.     #此url来获取进度信息  

  14.     report_uploads  proxied;  

  15. }  






在使用该模块时,一点需要注意以下问题:



  1. track_uploads必须是location中最后一个指令,比如:它必须要放在proxy_pass的后边

  2. 如果通过X-Progress-ID的get参数来获取进度信息,则它必须是url中最后一个参数,如:/progress?user=test&X-Progress-ID=123456

  3. 必须设置client_max_body_size,它的值需要大于单次上传的最大值

  4. 当nginx用作前端的proxy时,它默认会把当前request body的值给缓存到client_body_buffer_size或临时文件中,当client完成上传后,nginx才会把文件给push到后端的server,所以,没有办法从后端的服务器上来获得正确的进度信息,必须在前端的nginx上来配置upload选项

昕昕不愿穿衣服的理由

昕昕是07年出生的,是属猪的


所以,姥姥有时会叫他“小金猪”


早上,姥姥让他穿衣服


可昕昕却不愿意穿


于是他就说了一句:


小猪身上长了好多毛,不冷,不用穿衣服


....

ESMTP身份验证

esmtp的身份验证常见的有LOGIN,PLAIN,CRAM-MD5


这几种认证方式都是使用base64编码来传输,不过编码的内容不同而已


可以发送ehlo命令来获取服务器支持的认证方式:



折叠复制代码




  1. telnet smdb.vip.sohu.com 25

  2. 220 mx102 ESMTP ready

  3. ehlo vip.sohu.com

  4. 250 AUTH PLAIN LOGIN




sohu目前只支持plain和login方式认证


login方式:分别对userid和password进行base64编码,并分别发送到smtp服务器端



折叠复制代码




  1. #以login方式验证

  2. auth login

  3. #服务器返回要输入Username:

  4. 334 VXNlcm5hbWU6

  5. #输入test-1@vip.sohu.com的base64编码后的字符串

  6. dGVzdC0xQHZpcC5zb2h1LmNvbQ==

  7. #服务器返回要输入Password:

  8. 334 UGFzc3dvcmQ6

  9. #输入密码的base64编码后的串

  10. MTExMTEx

  11. #服务器返回验证ok

  12. 235 2.0.0 OK




plain方式:把userid和password通过空字节连接起来,再编码成base64,一次传递给服务器


即编码过程为:base64(空字节+userid+空字节+pass)


注意:空字节最好用00来表示,而不是,因为如果userid或password以数字开头,使用编码会出现问题



折叠复制代码




  1. #以plain方式认证

  2. auth plain

  3. #服务器返回334

  4. 334

  5. #输入base64('00test-1@vip.sohu.com00password')

  6. AHRlc3QtMUB2aXAuc29odS5jb20AMTExMTEx

  7. #服务器返回认证成功

  8. 235 2.0.0 OK




cram-md5方式:首先 服务器提供一个标记server_key


然后客户端用邮箱密码做密钥,以MD5方式加密此标记,生成HMAC=md5(password+server_key)


然后将userid连同HMAC做base64编码发送到服务器,即base64(username+" "+HMAC)


 


目前,sohu的smtp暂时还不支持cram-md5方式认证

Mysql的消息队列插件Q4M

Q4M(queue for mysql) 是开源的实现队列功能的mysql存储引擎,目前支持mysql 5.1 以上的版本

它已经内置了对多连接并发的的支持,能保证一个消息只能被同一个connection获取到

参考http://q4m.31tools.com/,现在最新的版本是0.8.9

最近,邮箱有一个活动,需要给登录的用户即时发对应的优惠券

开始使用了传统的方法,从mysql的一个表中通过limit来读取一条记录,并更新

但由于这次活动瞬间并发量比较大,这种方法会造成数据库的堵塞

于是,考虑试试Q4M,使用了其二进制方式安装,安装很简单:

   1. tar zxvf mysql-5.1.41-linux-x86_64-glibc23-with-fast-mutexes-q4m-0.8.9.tar.gz

   2. cd q4m-0.8.9-linux-x86_64

   3. cp support-files/q4m-forward /usr/local/mysql/bin/

   4. cp libqueue_engine.so /usr/local/mysql/lib/plugin/

   5. mysql --socket=/data/mysql/mysql.sock < support-files/install.sql

注意:如果mysql是下载的二进制压缩包,则它默认把with-fast-mutexes已经编译进去了

所以,对应的Q4M的包也需要是with-fast-mutexes-q4m-0.8.9.tar.gz的,而不是 without-fast-mutexes-q4m-0.8.9.tar.gz

如果使用源码编译安装:
   1.tar zxvf q4m-0.9.2.tar.gz
   2../configure --with-mysql=/opt/ysz/src/mysql-5.1.44 --prefix=/usr/local/mysql5.1.44/
   3. 可能会报错:my_global.h:80:23: error: my_config.h: No such file or directory
   4. 首先cd /opt/ysz/src/mysql-5.1.44/;make,然后再
   5. vi /opt/ysz/src/mysql-5.1.44/include/my_global.h
   6. my_config.h修改为config.h
   7. make;make install
   8. /usr/local/mysql5.1.44/bin/mysql --socket=/opt/mydata/my3310/my3310.sock < support-files/install.sql

安装后,即可使用其提供的sql进行查询了

目前,Q4M似乎不支持记录二进制log,所以在insert之前需要把log给关闭,这样造成的后果是:

使用了Q4M后,就无法使用Mysql的Master和Slave机制了

   1. #创建queue引擎的表结构
   2. create table product_detail (productid int,cardid varchar(1000)) ENGINE=queue charset=gbk;
   3. #不记录二进制log
   4. SET SQL_LOG_BIN=0
   5. #使用普通的sql语句插入数据,也可使用load data infile来批量灌入数据
   6. insert into product_detail values(1,'1');
   7. #使用queue_wait来获取productid为2的一条数据,设置超时时间为1秒
   8. select cardid from product_detail where queue_wait('product_detail:productid=2',1);
   9. #处理完成删除刚才获取的那条数据
  10. select queue_end()
  11. #处理完成后也可以不删除对应的数据,而释放对应的数据,它将仍然留在队列中
  12. select queue_abort()


空间被hexie了

前几天开始,博客便无法访问了


一开始以为是机房断电了,应该很快就能恢复的


后来才明白,原来是网站被hexie了...


本人博客上没有任何不健康的东西,这是写了几篇日志而已、


就这样也被和谐了好几天,看来这次是“宁可错杀一千,也不漏网一人”啊


也许,将来可以考虑在国外搞个虚机了...

MySQL的字符串函数

从blog.sohu.com通过博客大巴搬家后
发现导过来的日志有2个问题:
1.标题中的引号被替换成了html实体编码,如&#8220;
2.日志的最后被加上了sohu blog的上下一页的导航信息

懒得再写程序去处理这些东西了
于是,就想试试Mysql的函数是否能完成这些工作
查了Mysql的参考手册后
发现,Mysql5支持的函数还是很丰富的
可以用以下SQL语句搞定以上2个问题

update boblog_blogs set title=replace(replace(title,'&#8220;','”'),'&#8221;','“');
update boblog_blogs set content=substr(content,1,locate('
',content)+1) where locate('
',content) > 0;



在使用substr函数时要注意,它的start位置是从1开始的,而不是从0开始
刚开始,沿用用编程语言的习惯,给写成了0,结果最后返回的结果都是空
后来才发现,它的起始位置是从1开始的...

从博客大巴搬家到bo-blog

最早是在blog.sohu.com上建了一个博客
写了一些东西,后来自己又在虚拟空间上使用bo-blog建了博客
因此,想把以前的东西给导入到新blog上

现在国内好多blog都没有提供导出功能(也许是怕用户流失吧....)
于是,只好借用其他的方法了
先通过博客大巴的搬家工具
把blog.sohu.com上的东西给搬家到博客大巴上
它的搬家工具支持好多站点,如Blogcn,baidu,sina,sohu,qq.....
下一步就利用博客大巴的导出功能导出成xml文件
再利用别人写的一个blog2wordpress程序,把xml文件转换成RSS2.0的标准xml文件
然后在bo-blog的后台导入就可以了

注意:
1.修改$filename = 'backup.xml'和

admin

部分
2.在导入之前,先在bo-blog后台修改时区为GMT0,这样导入的时间就不会有问题了
3.把blog2wordpress的文件上传到自己的虚机上,运行对应的php,即为对应的RSS2.0的xml内容

blog2wordpress的工具见附件:
blogbus2bo-blog.rar

最新文章

最近回复

  • feifei435:这两个URI实际是不一样的
  • zsy: git push origin 分支 -f 给力!
  • 冼敏兵:简单易懂,good fit
  • Jack:无需改配置文件,看着累! # gluster volume se...
  • Mr.j:按照你的方法凑效了,折腾死了。。。。
  • zheyemaster:补充一句:我的网站路径:D:\wamp\www ~~菜鸟站长, ...
  • zheyemaster:wamp2.5(apache2.4.9)下局域网访问403错误的...
  • Git中pull对比fetch和merge | 炼似春秋:[…] 首先,我搜索了git pull和git fe...
  • higkoo:总结一下吧, 性能调优示例: gluster volume s...
  • knowaeap:请问一下博主,你维护的openyoudao支持opensuse吗

分类

归档

其它