轻松升级CentOS 5.6到CentOS 6.0

RedHat Linux 的社区免费版本 CentOS 6.0 于7月11日正式发布。CentOS 6.0 基于上游的 RHEL 6.0 制作,同时基本包含了所有的上游软件包。CentOS 完全遵守上游供应商的再发行政策,并且以百分之百的软件兼容性为目标。

准备工作

  • cat /etc/redhat-release,查看版本
  • uname -a – 显示版本和内核信息
  • rpm -q kernel – 显示内核版本
  • yum -y update – 升级所有应用版本,更新CentOS到最新镜像版本

备份MySQL

首先备份MySQL,方法多种,下面介绍一种标准方法。

#1,导出MySQL数据库内容

mysqldump --user=root --password=passme db_1 > db_1.sql

#2,导入备份内容到新的版本

mysqldump --user=root --password=passme db_1 < db_1.sql

#3,相关命令查看运行的Mysql:

mysql -u root -p

列出所有已安装应用

yum list | grep installed > installed.txt

备份文件和相关配置

tar cvf /backup.tar /root /home /var /etc

在CentOS 6中解压文件

tar xf backup.tar

保留用户和组

备份下面这些重要文件:

  • /etc/passwd – 包含用户和主目录信息
  • /etc/shadow – 包括每个用户的密码信息
  • /etc/group – 每个用户组的信息
  • /etc/gshadow – 每个用户组密码信息

如何部署WordPress到Amazon云主机

在过去的10年,架设一个大型网站是一个非常艰巨的任务,那可不是非专业人士可以完成的。现在好了,亚马逊开放了他们的服务器架构,一切都改变了。 计算机硬件被移动到了云端,普通站长和开发人员都可以利用亚马逊的硬件和网络资源来运行自己的应用。在本文中,我们将把WordPress博客安装到云端。


介绍

大多数博客和小型企业站点都托管在共享主机上面,通过固定的月租费用来获得预装软件和特定功能的使用。大多数情况下,共享主机是一个完美的解决方案,但是将你的博客安装在Amazon云端有很多好处是值得我们考虑的:

  • 更容易升级更新. 在Amazon云端创建一个新服务器可以在数分钟内完成。使用该服务,你的网站将有能力应付突如其来的流量爆发,比如你的博客文章被推荐到了Digg或者Reddit的首页,你可以添加更多服务器并平衡负载。
  • 经济有效的大规模服务能力. 如果你的站点吸引了大量的用户,并且最终超过了主机的正常伺服能力,Amazon Web Services 将给你一个经济有效的办法来设计一个符合你的需求的网站服务架构,而你并不需要去雇佣一个完整的网络运作团队来安装和管理网络。这也是许多 Facebook开发人员选择Amazon云服务器的原因。
  • 完善的安装与设置. 在运行WordPress时,这一点可能不是太重要,但如果你想使用PHP和MySQL之外的一些东西来建设你的下一个项目,则没有必要请求主机公司的帮助,你可以就像在你自己的服务器上一样安装你所需要的软件。

是否把WordPress站点放到亚马逊云端由你的博客流量决定,并且你可以根据你的实际需求来决定服务器配置。通过下面的指南,你可以了解到怎样迅速的在Amazon Cloud上设置和运行服务器。 Continue reading 如何部署WordPress到Amazon云主机

MySQL Proxy

我考虑了一下Mysql数据库服务器负载均衡的架构,发现大多数应用似乎没有加载mysql-proxy,当然本意是为企业版本开发的,那么在这之前的load balancing,他们是用什么来做的呢?使用管理节点+集群的方式是一种,不过我估计PF中的address pools应该也可以,而且PF的方案更有通用性,但是设置过于复杂,且牵涉到具体网络结构,mysql-proxy是一种全新的方案,大家可以把它和mysql的关系理解为squid和apache的关系,不过mysql-proxy并不包含cache的部分,这部分由第三方连接池做了,当前的web应用,瓶颈其实都在数据库,奥运门票预订网站的垮掉,正是这种瓶颈的体现,并不是说在前端没有瓶颈,而是数据库的瓶颈尤为明显。

Mysql-proxy是一个很小巧的程序,只需要一行命令即可执行,如果仅仅是代理的话:

mysql-proxy –proxy-address=202.202.0.10:3389 –proxy-backend-addresses=10.0.0.2:3306

不过很显然,这样做就没办法在mysql中限制访问数据库的IP了,因为都是本地的访问,如果是mysql集群,那么可以用下面的命令来进行负载的均衡:

mysql-proxy –proxy-address=202.202.0.10:3389 –proxy-backend-addresses=10.0.1.2:3306 –proxy-backend-addresses=10.0.1.3:3306 –proxy-backend-addresses=10.0.1.4:3306

mysql-proxy是一个简单的程序,因为它仅仅是做一个代理,如果加上Master-Slaves的方式来做集群,然后把数据库的读写分离,应该是效率非常高的,但是,很多程序的读写并不是分离的,mysql-proxy中指定了一个参数,可以read-only,很大程度上这个参数是多余的,因为在mysql中去统一管理读写的不同用户,更为合理,如果mysql-proxy能把read-only和write-only分开,那么就完美了,把read-only请求转发到Slaves,把write-only请求转发到Master,使用一个端口,一个用户,就能够读写到不同的数据库服务器。

MySQL Proxy is a simple program that sits between your client and MySQL server(s) that can monitor, analyze or transform their communication. Its flexibility allows for unlimited uses; common ones include: load balancing; failover; query analysis; query filtering and modification; and many more.

mysql backup script

make WITH_CHARSET=gbk WITH_XCHARSET=all WITH_LINUXTHREADS=yes WITHOUT_INNODB=yes
————————–
www# vi mysql_backup.sh
#!/bin/sh
# change into the backup_agent directory where data files are stored.
cd /usr/database_backup
/usr/local/bin/mysqldump –opt –user=ken –password=ling –all-databases > /usr/database_backup/all.sql
bzip2 -9 all.sql
mv all.sql.bz2 all-$(date +%Y%m%d-%H%M%S).bz2

NSIS 脚本浅析

一直以来,B/S程序由于其结构的原因不能像安装WINDOWS程序那样使用setup来进行安装,一般都是由开发人员配置好WEB运行环境,再导入数据库(或者由WEB的安装程序完成此部分),这样一般来说够用了,再如果是不懂开发的人配置这些环境就麻烦了,如果能像安装WINDDOWS程序那样,一路回车法就能安装成功,那就更帅了。

前几天由于公司的项目需要,我小小的的研究了一下NSIS,为什么选它呢?因为它是使用脚本来定制安装程序的,非常灵活,就是要学习一下它的脚本语言,多看一些例子就会用了。

先说一下制作的原理,系统的环境是apache1.3, php5.1.4,mysql5。这几个其实都是不需要安装的,在window2000/xp下,直接配置成服务,并启动服务就行了。所以安装过程应该是分为

1.复制文件到指定目录.
2.配置apache和mysql.
3.把apache和mysql安装成服务并启动.

首先下载并安装NSIS,安装后可以到它的example目录下看一下有很多例子程序。右键点示例脚本选择Compile NSIS Script进行编译,在该目录下会生成一个.exe文件,就是生成的安装程序文件。
NSIS的脚本由一些类似PHP和汇编的语法指定组成,还可以定义函数,宏。每个脚本至少有一个Section,名字为Uninstall的以un.开头的Section被认为是卸载时使用的指令集。

下面是安装程序的全部脚本。
SetCompressor lzma
!include “MUI.nsh”

!define MUI_HEADERIMAGE
!define MUI_HEADERIMAGE_BITMAP “E:\logo.bmp”
!define MUI_ABORTWARNING
!define APP_NAME “蓝桥OfficeSystem2.0”

!insertmacro MUI_PAGE_WELCOME
!insertmacro MUI_PAGE_DIRECTORY
!insertmacro MUI_PAGE_INSTFILES
!insertmacro MUI_PAGE_FINISH
!insertmacro MUI_UNPAGE_WELCOME
!insertmacro MUI_UNPAGE_CONFIRM
!insertmacro MUI_UNPAGE_INSTFILES
!insertmacro MUI_LANGUAGE “SimpChinese”

Name ${APP_NAME}
Icon “${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico”
UninstallIcon “${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico”
DirText “安装程序将安装 $(^Name) 在下列文件夹。$\r$\n$\r$\n要安装在不同文件夹,单击 [浏览] 并选择其他文件夹。”
InstallDir “C:\lqserver”
OutFile “setup.exe”

Section “setup”
SetOutPath $INSTDIR
File /r Apache
File /r mysql5
File /r officesystem2
File /r php-5.1.4
File /r config.js
File /r sc.exe
Call config
WriteUninstaller “uninstall.exe”
CreateDirectory “$INSTDIR\temp”
CreateDirectory “$SMPROGRAMS\${APP_NAME}”
CreateShortCut “$SMPROGRAMS\${APP_NAME}\启动${APP_NAME}.lnk” “http://localhost/”
CreateShortCut “$SMPROGRAMS\${APP_NAME}\卸载${APP_NAME}.lnk” “$INSTDIR\uninstall.exe”
SectionEnd

Section “Uninstall”
ExecWait “$INSTDIR\sc stop apache”
ExecWait “$INSTDIR\Apache\apache -k uninstall”
ExecWait “$INSTDIR\sc stop mysql”
ExecWait “$INSTDIR\mysql5\bin\mysqld-nt –remove mysql”
RMDir /r $INSTDIR
RMDir /r “$SMPROGRAMS\${APP_NAME}”
SectionEnd

Function config
ExecWait “cscript $INSTDIR\config.js $INSTDIR”
#先停止并禁用IIS服务
ExecWait “$INSTDIR\sc stop w3svc”
ExecWait “$INSTDIR\sc config w3svc start= disabled”
#安装apache和mysql服务
ExecWait “$INSTDIR\Apache\apache -k install”
ExecWait “$INSTDIR\sc start apache”
ExecWait “$INSTDIR\mysql5\bin\mysqld-nt –install mysql –defaults-file=$INSTDIR\mysql5\my.ini”
ExecWait “$INSTDIR\sc start mysql”
FunctionEnd

一些指令的解释
SetCompressor lzma 指定压缩方式
!define APP_NAME “蓝桥OfficeSystem2.0” 定义应用程序的名字以便后面使用。
!insertmacro MUI_PAGE_*
这些是安装程序的所有页面,包括欢迎界面,选择目录,安装文件,完成页面。

Name ${APP_NAME} 指定应用程序的名字,语法和PHP有些类似
Icon “${NSISDIR}\Contrib\Graphics\Icons\arrow-install.ico”
UninstallIcon “${NSISDIR}\Contrib\Graphics\Icons\arrow-uninstall.ico”
指定安装程序和卸载程序的图标,$NSISDIR是NSIS的安装目录,不用修改。
InstallDir “C:\lqserver” 默认安装目录
OutFile “setup.exe” 输出的安装程序文件名称
下面的一个section就是主要的安装和配置指令

File /r 解压一个文件夹及下面所有的文件和子目录到安装位置

Call config 调用config函数,这个函数主要是修改配置文件的作用。
WriteUninstaller “uninstall.exe” 生成卸载程序
ExecWait 是执行程序并等待返回,这样可以防止外部程序的运行而影响到NSIS脚本的执行。比如在apache服务的停止的时候,如果服务没停止完,就进行删除文件的操作就会出错。

在修改apache和mysql配置文件的时候我采用了js脚本来完成。因为用NSIS来完成这个功能太吃力了,用JS脚本进行字符串替换还是比较简单的,主要是把一些目录修改为安装目录就可以了。

还有这里使用了sc.exe,这个程序是命令行下管理windows服务的程序,不是系统自带的,可以去microsoft下载,使用它先禁用iis服务,防止和apache发生冲突。另外使用sc启动和停止服务要比用net命令快的多。

Mysql error

##########custom
max_connections = 1000
wait_timeout = 5
skip-bdb
skip-innodb
tmpdir = /disk2/tmp/

如果不指定mysql的tmpdir,且默认的/var/tmp目录空间不足,那么一旦自动脚本出现问题,就会把mysql卡住,继而出现更多错误。我完全有理由相信Oracle有同样的问题,特别是在reset重启之后,而他们几乎从来没有修复过。

 

重拾FreeBSD

我早料到有这么一天,阿金要我配置unix服务环境,重拾FreeBSD,我已经落后了,小红魔它已经升级到了6.0,5.0的终结版本是5.4,java不适用BSD平台已经成为过去,freebsd甚至有一个java project:http://www.freebsd.org/java/,可是我疑惑了,用6.0还是5.4呢?
————————————
This is the official port of Sun’s Java&#8482; Development Kit for FreeBSD. No known significant bugs exist at this time, but there are no guarantees of usability. However, many commercial companies rely on this port, so it should be safe to use.
————————————

之所以使用freebsd的原因:因为它是最正统的unix,不含有那些什么特有的linux命令,aix命令,solaris命 令等等…..就像吃肉吃多了吃咸菜一样爽口的感觉,我是很不愿意在日记里面提到亦彩的,所谓出其不意,攻其不备,亦彩的服务器架构于 freebsd5.3+apache2+php4+mysql4.1+icecast2+proftpd1.2+openssh4,比较难配置的就是 icecast,其他的还是比较简单,这次的任务有了新内容,要配置oracle10,java,tomcat,有挑战性,我喜欢!不过就是不知道我能不 能忍受256M内存下的oracle运行速度,oracle的标准配置是4G运行内存,看起来只有曙光的机器能担当这个重任……

FreeBSD 启动脚本设置

问题:我新安装了好些程序,比如mysql 为什么下次启动就没了?

回答:一般在ports 安装的程序都会自动添加启动脚本;但是自己编译的程序就不一定,那么我们将自己编译的程序加入启动脚本呢?

首先,FreeBSD 的自启动脚本在/etc/rc.local (如果没有的话可以自己建立)

在里面添加要启动的程序就可以了,比如说:/usr/local/mysql/bin/safe_mysqld –user=mysql

那么下次启动的时候mysql 也会自动起来了。其他的程序也一样。

如果程序出了点问题,下次启动的时候卡住了怎么办呢?请进入单用户模式,然后编辑/etc/rc.local ,把错误的程序名字用#屏蔽掉。再重启试试看。

是否只有rc.local 可以令程序自启动呢?不一定,也可以把启动脚本放在/usr/local/etc/rc.d 并把名称换成xxxx.sh ,注意一定要.sh结尾。做为BSD的规范,FreeBSD更赞成大家使用这种规范的启动脚本。

再拿mysql 做例子:在/usr/local/etc/rc.d 下添加mysql.sh ,内容为:/usr/local/mysql/bin/safe_mysqld –user=mysql 并且要把mysql.sh 改成可执行:

%chmod +x /usr/local/etc/rc.d/mysql.sh

OK,下次启动的时候也可以把mysql执行了。

另外,再告诉大家一个小技巧:“/usr/local/etc/rc.d”中的启动脚本是以文件名为顺序来确定启动顺序的。后缀名不是.sh并且没有可执行权限的文件在启动时将被忽略。