Skyline of Richmond, Virginia

快速恢复MySQL数据库下的用户口令

11.29.06

忘了密码怎么办?
1>首先kill后台进程(not kill -9)。每次mysqld重启的时候都会在系统目录下生成一个hostname.pid的文件。里面记录这mysqld进程的pid(进程号)。

#kill mysqld.pid’

(使用root用户!hostname是系统的主机名)

#/etc/init.d/mysqld stop

2>使用–skip-grant-tables选项来重新启动mysqld

#/usr/bin/mysqld_safe –skip-grant-tables &

3>使用mysql用户登录到mysqld服务器上进行相关授权操作,并重新载入权限。

#mysql -h hostname mysql
mysql>use mysql;
mysql>update user set password=password(”new password”) where user=”root”;
mysql>flush privileges;

4>

#kill -TERM mysqld

重新启动mysql服务

就是这些了,总算是有惊无险。密码这玩意,真是一夫当关,万夫莫开呀!

,

Mysql数据库备份恢复问题

11.29.06

在我转到wordpress之后第一个考虑的是它的数据库备份恢复问题,因为写bloger都知道,自己的blog记录的都是自己需要的宝贵的资料和文字,如果因为各种未知因素导致数据库崩溃或者空间商出了问题,丢失了数据的话,无疑是一种非常巨大的痛苦和损失。

所以在我blog里面有好几篇资料文章或者自己心得文章来讨论mysql数据库备份恢复和乱码问题。

之前那些文章讨论结果已经暂时能满足我数据库备份和恢复问题了,但是始终有个让我不能完全安心的地方,那就是用PMA恢复的时候,使用的是上传机制,那么PHP默认是最大上传2M,如果我blog再写下去,写了几年,备份下来的数据超过2M,我该怎么办?

今天下午晒着太阳的时候又想到这个问题,但突然想起来备份的时候不是可以选择备份那个表嘛?呵呵,“大智若愚”,其实数据量大,我完全可以一个个表保存,然后一个个表恢复,这样相当于把一个压缩包分成几份,这样每份的体积就减少了。呵呵,心里又舒坦了些。但是问题又来了,wp的日志都是放在wp_posts 表里面,就算其他的比如options、comments等表再大也只是一小部分,如果posts表数据超过2M了呢?

不知道我是不是杞人忧天,2M的gzip文件可以保存N多日志了。不过俗话说的好,居安思危,思则有备,有备无患!然后我再想,如过我不要保存为gzip格式,我就保存SQL语句的txt文件,然后我恢复的时候麻烦点,手动复制粘贴SQL代码,虽然比较麻烦点,但是恢复起来是没啥问题的。呵呵。想到这里又舒坦了点。至少已经有了可以完全不用担心数据库变大之后的备份恢复问题了。:0

其实我想如果我专心去研究,去写代码,完全可以自己写一个wp数据库备份恢复的程序,可惜的是,我用wp本身就是想偷懒,用它庞大的资源来给自己便利,因为工作太忙,如果在这上面花去时间开发的话,我想我工作方面就不能全身心投入了。。。

当然,除非是我blog写的时间太长了,数据量太大,而且都是宝贵的资料,我想再这种需求下面,我该会自己写个完善的wp数据库备份恢复的程序了。

最后补充一下mysql数据库乱码问题的解决方法,资料来自wp的一个qq群的一个网友:

终于解决了wordpress中文乱码问题

参考了很多人的方法,最后再确认了一下.总结如下:

1、Mysql处理

(1)配置文件处理

删除My.ini中的 default-character-set=latin1

(有的人喜欢改成 default-character-set=utf8,也行,我干脆删除了,只要注意下面2中的“整理”就ok啦!)

(2)PhpMyadmin处理

设置如下:

1: 语言设置为 chinese (zh-utf-8)

2: MySQL 字符集: UTF-8 Unicode(utf8)

3: MySQL 连接校对: utf8generalci

4: 新增数据库和数据表的时候,整理项选择 utf8generalci

2、Wordpress处理

在$this->dbh = @mysqlconnect($dbhost, $dbuser, $dbpassword);

下,增加一句

$this->query(”set names ‘utf8’”);

即如下(只有加了这句,发贴后,中文字才是正常的!):

$this->dbh = @mysqlconnect($dbhost, $dbuser, $dbpassword);
$this->query(”set names ‘utf8’”);

,

建立DNS域名服务器

11.29.06

在“TCP/IP”的网路世界里,每部电脑的身分都是由4个
数字所组成的“IPAddress”来辨识(例如168.95.192.1),这些
数字号码就像是我们的身分证号码一样,某些部份数字分
别代表不同的意义。当我们在使用网际网路资源时,如果
直接使用“IPAddress”来进行连线,那是最直接不过了!但
是,全部数字化的位址在使用上真的有些不够友善,光是
记一堆数字就够头疼的了!
网路位址vs.主机名称

   还好,提供“TCP/IP”网路服务的作业系统都提供系统
管理者可以建立一个名叫“HOSTS”的档案(例如Linux/UNIX中
的/etc/hosts),在这个系统档案档案里,系统管理者可以将
已知的网路机器分别赋予一个「主机名称」并且相对映该
机器的“IPAddress”。如此一来,在进行网路连线时,使用
者就不必一定要直接指定“IPAddress”来连线,因为系统可
以提供应用程式透过“HOSTS”中所提供的「主机名称与位址
对照资料」取得该「主机名称」的「网路位址」。

   这样子,使用网路程式时是方便多了,但是,国际网
路的机器成千上万,如果只是利用“HOSTS”的方式来处理
主机名称」与「网路位址」的对映工作,那实在是件很没
效率又几乎不可能的事。所以,如果网路使用的领域只是
单纯的内部网路,因为机器数目不多的情形,那麽使用
HOSTS”就可以应付网路连线上的需求了。

   为了因应大型网路上「主机名称」与「网路位址」对
映的需求,就有所谓建立「名称伺服器」来负责以「主机
名称」查询「网路位址」的工作,依据建立的架构方式大
致有两种,“DomainNameSystem”(简称:DNS)、“NFSNetwork
InformationService”(简称:NIS)。我们都可以在Linux系统中
架设这两种服务程式。

   “NIS”较早是由Sun所提出的解决方案,运用“RPC”的
功能来提供解决「主机名称与位址」的查询,“NIS”的伺
服程式大都是以“yp”起头的程式档案(ypbind、
ypinit….)。笔者并不准备在这里说明“NIS”伺服器的建立
方式。而是将焦点摆在「建立DNS名称伺服器」的话题上。

DNS服务型态的种类

   时下在国际网路上所存在的「名称伺服器」一般都是
属於DNS伺服器,因此笔者才会将焦点放在“DNS”的建立
上。由於“DNS”已经有个相当标准的规定,因此虽然不同
平台上作业系统可能有相当的差异,但是建立“DNSServer”
的方式可能都非常类似。而对於使用“DNS”的方式也是大
同小异。关於使用或架设“DNS”的部份,可以大致归为下
面几类:

●使用远端名称伺服器:
   如果自己主机上并没有架设“DNS”,可以设定一台已
知的「名称伺服器」作为本主机网路连线时的名称资讯的
提供者。在Linux系统中,我们可以藉由“/etc/resolv.conf”这
个系统参数档案来指定本主机的「远端名称伺服器」。例
如:
simon:~#cat/etc/resolv.conf
#
#电信局HINET的名称伺服器为168.95.192.1
#下面就设定该主机为本主机的「名称伺服器」
#
#
nameserver168.95.192.1
#
#

一般使用者环境大都是属於这一类的使用型态。

●所谓“Cache-Only”的名称伺服器:
   一个「名称伺服器」也不可能拥有国际网路上所有的
主机资讯,因此它提供一个转送方式,将自己「名称伺服
器」无法处理的「查询要求」转送至上一层的「名称伺服
器」查询,然後将所得到的查询结果,传送给提出查询要
求的主机。

   而“Cache-Only”的“DNS”就是该伺服器的主机资讯里除
了自己之外就没有了,它将所有的查询要求都转送至其他
伺服器去查询。

●“Primary”名称伺服器:
   一个完整功能的「名称伺服器」,管理一个或数个
Domain”的机器资讯。而这些主机相关的资料都依照格式储
存於伺服器的档案目录中,然後会在伺服器启动时将这些
资料读入系统。

●“Secondary”名称伺服器:
   基本上它也是一个完整功能的「名称伺服器」,只是
所不同的是,它的主机资料并非完全储存於伺服器所在的
档案目录,而由某个“PrimaryDNS”来提供。

在本次的主题里,我们会就以建立“Cache-Only”以及
Primary”的名称伺服器做个范例说明。

使用BIND-4.9.6建立DNSServer

   在Linux系统里,我们使用“BIND”(BerkeleyInternetName
DomainNameServer)来建立我们的「名称伺服器」。

   BIND”这个软体每个Linux安装套件都会有,所以你只要
确定在安装时把“BIND”软体安装至Linux系统中,那麽就已
经具备建立“DNSServer”的软体环境了。不过在架设“DNS”
之前,笔者建议读者最好能够对於网路主机名称的命名原
则先有些概念(不妨参考前几期HOPE_NET月刊上的网路专题、
或是坊间网路相关的书籍,我就不在此详述)。接下来我
们以一个假设环境来配合说明架设「DNS名称伺服器」的步
骤。假设环境的一些情形如下:

领域名称(Domain):simon.net
伺服器主机名称(Host):simon
伺服器网路位址(IP):192.9.100.1
根名称伺服器(RootDNS):hinet.net(168.95.192.1)

●建立“/etc/named.boot”启动设定档
   “BIND”伺服程式在启动时首先会读取“/etc/named.boot”
这个控制档,因此首先就来进行“named.boot”的设定工作。

(A)“directory”是用来指定「主机相关资讯」资料档案的所
在目录。

(B)“named.boot”一般常用到的资料格式为「格式、领域、来
源主机或档案、备份档案名称」,除了设定“SecondaryDNS”
时较会用到备份档案这个栏位外,其馀大都只用到前叁个
栏位。关於档案名称部份并没有限制,除了“named.boot”不
可变更之外,其他的主机资料档案可以自行指定名称。(图
一)

(C)“cache”表示在<root.cache>这个档案设定着本伺服器的
上层网路名称伺服器。
   “primary”则分别设定每个指定「领域」的主机的资料
档案。

(D)在「领域」这个栏位中「.」代表“OTHER”,在本例子
中,如果查询的主机所在领域并未特别定义时,则使用
cache」的设定转至上层名称伺服器查询。而对於我们自己
管理的「领域」则可以使用“primary”、“secondary”来定义
各别「领域」主机资料纪录所在。

   <simon.net>是一般主机名称的形式,有些时候使用者
会以“IPAddress”来查询主机资讯,对此需求,也可以参照
<100.9.192.INADDR.ARPA>的格式来定义<192.9.100.x>的主机资
讯。

●建立“/etc/named.hosts”主机资料

   在本例中“named.hosts”被指定为储存<simon.net>这个网
路上主机资料,因此我们就必须将本网路上的主机资料全
部建立在这个资料档案中。

(A)“SOA”这个栏位在每个「领域」资料档中只能有一个。
(B)指定<postmaster@simon.simon.net>是本名称伺服器的联络人
邮件信箱。
(C)<simonINA192.9.100.1>表示“simon.simon.net”这台主机的
位址」是<192.9.100.1>,接下来的另一行并未指定哪台主
机名称则表示该设定仍是针对<simon>这台主机。由於可设
定的资料项目不少,我们在此挑选常见的项目在此简要说
明。

<A>–指定网路位址

<CNAME>–设定主机的别名,例如<simon.simon.net>的别名是
<gopher.simon.net>

<HINFO>–可以使用一段文字描述主机环境。

<MX>–用来设定E-Mail传递交换的优先路径,例如范例中的
<simon5>的设定,<simon5.simon.net>的信件都先往
simon5.simon.net>这台主机传送,如果无法与该主机连线时
那就会往<simon.simon.net>传送。

<NS>–用来指定子网路的名称伺服器所在。

<PTR>–与<A>有点相对的功能,它可以指定某个“IP”是
指向某个主机名称,这样就可以以“IP”来查询主机的其他
资讯。

●建立“/etc/named.rev”
   前面“named.hosts”是当网路的使用者以“xxx.simon.net”
的方式查询主机资讯时所参考的资料档,而这个
“named.rev”功能则是提供使用者以「192.9.100.x」查询主机
资讯时参考。

;————————–
;/etc/root.cache
;————————–
.99999999INNSHINET.NET
.HINET.NET99999999A168.95.192.1
;————————-EndofFile

●建立“/etc/root.cache”启动设定档
   完成前面本地网路的主机资料的建立工作後,再来就
是设定本伺服器的「根伺服器」(RootNameServer)。下列应
该是最简单的设定内容了,读者不妨参照此设定。

●启动“BIND”伺服程式
   完成这些主机资讯的建立工作後,最重要的工作就是
启动“BIND”的伺服程式<Named>,你可以直接以系统使用
者的身分执行此程式,在执行後,建议您最好执行<Ps>指
令检查一下<Named>是否成功执行。如果执行<Ps>有见到
<Named>那表示主要的控制档内容无误。

   然後,你最好将启动「名称伺服程式」的工作加入
Linux系统启动程序中。以“SlackwareLinux”为例,请修改
/etc/rc.d/rc.inet2”这个档案中关於<Named>的设定,如下的
内容。

#/etc/rc.d/rc.inet2
…..#StarttheNAMED/BINDnameserver.
if[-f${NET}/named];then
echo-n“named”
${NET}/named
fi
……
…….

   这样子,在下次启动系统时就会自动执行“BIND”伺服
程式,而您的Linux也就具有“DNSServer”的功能了。

测试查询「名称伺服器」的运作

   为了确定「名称伺服器」的运作正常,因此在此提供
一些测试的方式供做参考。

●使用<Ping>
   直接使用<Ping主机名称>的方式来测试是否可以成
功,这是最简单的方式,而在测试过程除了与自己网路上
主机连线之外,最好也要对外连线,以便测试<Cache>的设
定是否正确。使用<FTP><Telnet>等网路程式进行连线也
可以达到同样的目的。

●使用<Nslookup>
   使用<Ping>可能只参考到主机的“IP”位址而已,而
如要查询主机资讯,那就得透过<Nslookup>这个程式来进
行。<Nsl-ookup>会与系统指定的「名称伺服器」连线并根
据使用者提出的查询条件由「名称伺服器」取得查询结
果。以下是一些使用例子。

重新读取「主机资料」

   因为伺服程式是在启动时就将读取「主机资料」,因
此即使你在执行阶段更改了主机资料的内容,仍然不会生
效。必须重新启动<Named>才会使你更新过的资料生效。如
果遇上此情形,你可以用下列之一种来处理:

<kill-9named的PID>先杀伺服程式,再重新执行乙次。
<kill-HUPnamed的PID>让伺服程式进行重置的行为。
执行〈named.restart〉让重新伺服程式执行。

DNS的10大概念

11.29.06

1. Use DNS forwarders
1.使用DNS转发器

A DNS forwarder is a DNS server that performs DNS queries on behalf of another DNS server. The primary reasons to use a DNS forwarder are to offload processing duties from the DNS server forwarding the query to the forwarder and to benefit from the potentially larger DNS cache on the DNS forwarder.

DNS转发器是代表其他DNS服务执行DNS查询的DNS服务器。主要原因是DNS转发器卸下从DNS服务器转发查询到转发器的处理任务,从DNS转发器潜在地更大DNS高速缓存中受益。

《endurer注:on behalf of adv. 代表…》

Another benefit of using a DNS forwarder is that it prevents the DNS server forwarding the requests from interacting with Internet DNS servers. This is especially important when your DNS server is hosting your internal domain DNS resource records. Instead of allowing your internal DNS servers to perform recursion and contacting DNS servers itself, configure the internal DNS server to use a forwarder for all domains for which it is not authoritative.

另一个好处是使用DNS转发器是它防止了DNS服务器转发来自与 Internet相结合的DNS服务器的查询。这在您的DNS服务器是内部域DNS资源记录的宿主时特别重要。代替,而不是允许您的内部DNS服务自己执行递归和接触DNS服务器,配置内部DNS服务器为所有未授权域名使用转发器。《endurer注:
1。interact with 与…相合
2。hosting n. 群众或部队的集合, 作战
3。instead of adv. 代替, 而不是…》
2. Use caching-only DNS servers
(more…)

DNS Server配置示例

11.29.06

DNS Server配置示例:

注: 以上示例文件仅作演示用,于实际内容有所出入,会与实际测试有出入
DNS基础知识请参考本人制作的PowerPoint幻灯片文件,URL同上,
文件名为dns.ppt.

1. 首先应确认你的上级域名服务器已正确指向你的DNS Server, 如我设置的
子域为net.dlut.edu.cn,则应在dlut.edu.cn的域名服务器上有到作
net.dlut.edu.cn子域名服务器的LINUX机器的的NS记录,以下是在
dlut.edu.cn域名服务器相应文件内容:
(1)BIND 4.9.x的配置文件

(more…)

大陆虚拟主机我知道

11.29.06

转载一个国内用户对国内虚拟主机的评价

我所知道的虚拟主机

一切都源自盘古今天发来的一封信:

尊敬的用户,
您好.

近日,有个别用户的网站上又出现了有害信息导致一些问题的发生.
这样的情况对其他用户的影响非常大.
所以,为了大家的安全和稳定,我们需要向您征求您的一些个人信息.
如果您的站点是合法健康的,
我们向您保证您的所有个人信息一定不会泄漏给任何第三方.
我们这样做是为了所有合法站点站长的利益不受损害,
所以,我们希望能得到您的理解和配合.
谢谢.

我想国内很多人都记得,盘古的服务器曾经因为某件特殊事件而被公安查封了几天,导致大量网站无法正常访问.所以,盘古在内容检查上比任何一家空间服务商都严格。他们的QQ客服甚至在我抱怨他们FTP防火墙规则过于严苛,而导致我的IP被封的时候,提出要我删除或者修改这篇文章。当然,我这么臭脾气的人怎么会删除自己写的文章呢,我倒是觉得敢在国内写这篇实在不能算很敏感文章,是有些让人觉得骄傲的事。

目前他们还没有正式要求我提供个人信息(其实我的个人信息可以在很多地方查到),但我是绝对不会去理解或者配合的,原因很简单:没有哪条法律有这个规定,我和盘古之间也没有这样的协议要求我提供个人信息,准确的说,我和盘古之间没有签订任何 有法律效力的协议。

不过在不到5个月内,我已经用了两家国内空间服务商了,真的不想因为这种小事就再次换空间(经济上的损失也是个问题)。对于盘古的举措我只能说无奈,人间空间商其实也挺不容易的,牵扯法律上的问题嘛,你也知道中国的法制是怎么样的:奉公守法的坐牢,作奸犯科的逍遥。盘古也有自己的难处,毕竟他们的 IP在查询地址时不会显示成U.S.A。

但如果空间质量上下降就很难让人接受了,盘古能把8月份的Uptime做到99%以下实在是让人佩服(7月份也只是刚过99%),而国外的Hostgator即使在卡特琳娜飓风到来的时候都可以保证Uptime在99.9%以上。更无聊的是他们的防火墙,在各种宣传中他们最骄傲的就是中文Cpanel后台和硬件防火墙(连我们家单位网络都有的东西也拿来炫耀),FTP连接次数稍多一点就封掉客户的IP,搞得我还以为盘古的空间挂掉几个小时都没人管,后来想想这和以前用的68互联基本是一样的问题(但68互联现在已经没有这个问题了)。

如果仔细想想,盘古除了Linux主机和Cpanel以外还有什么优秀的地方,其他的地方没有任何突出,而Linux+Cpanel之所以如此诱人也仅仅是国内缺乏这样的空间而已,在国外这几乎是基本配置。可以说,盘古优秀的是功能的齐全,而不是服务的稳定。要说到功能,国外的不少主机甚至可以支持 python,盘古可是没有的(有一个不错的MT Moblog插件就因为需要python支持而无法使用,因为空间问题我还没能成功安装任何一个Moblog插件)。

国内的虚拟主机就是一个让你认识到中国市场经济如何不成熟的典范:比其它空间商做得稍微好一点就敢漫天要价,合租服务器竟然会有70人合租这种规模,看到不到300块的2G空间基本都是落伍上某人的代理(什么叫空手套白狼,没有半台服务器都敢进军IDC行业是也),好不容易看到一个空间巨大价格低廉的空间,仔细一看1G的额外流量费赶上600MB空间的费用了,如果要加上额外数据库,额外绑定目录,这个价格比其他空间还要黑。

因为中国特殊的网络情况,双线三线空间很普遍,最多的有人做7线主机。而实际上正规的机房都是单线的,多线机房基本上都是个人或者小公司搞出来的。新浪的机房那够顶级了吧,人家也不会为了所谓的南北互通去弄一个双线机房,就用网通线路,南北访问一样快速。

我认为,国内的虚拟主机/合租主机比起国外的空间来说差距主要有:

1.极度缺乏*nix主机。

php和cgi根本就不是windows该运行的脚本,硬加上去的结果就是功能无法全部实现(mod_rewrite模块缺乏),或者系统稳定性远远不及*nix平台。后台管理极其简陋,php空间尚且很少有cpanel这样的高级管理平台,如果是ASP空间,那基本上就没有管理平台了,所有的操作都在FTP上完成,后台是让你管理钱包用的。

2.停留在MB为单位算价格,卖空间就是卖硬盘的时代。

硬盘能有多贵?平均一下1G家用PC硬盘还不到4块钱,服务器的也不会贵到哪里去。可国内的空间商则整天标价每MB多少钱,甚至觉得这可以体现他们的”廉价”,好像人人都不知道国外有空间商似的。这样的结果就是:

3.一台服务器搭载过多网站。

因为空间价格由体积说了算,因为计价单位还是RMB/MB(=R?),一个空间往往只有100-200MB,那一块160G的硬盘可以绑定多少个站呢?当然不能做单纯的除法,真要绑定1000个站他也没这个胆子,但绑定200-400个是极其普遍的做法。也许有人说DreamHost也绑定很多,但你想想他们一个空间20G,一台服务器总共也卖不了几个人,而一个人又能做几个网站?在加上DreamHost远远高于国内主机的服务器性能(不信你放个探针测出数据和国内主机比较一下),这是根本不能同日而语的。而过多的负载又导致了:

4.CPU使用率的限制。

可以说这是一个很没有头脑的创意,国内的空间商很多不限流量(而国外空间上很少不限流量),但却有国外主机很少见的CPU使用率限制。难道一台服务器放100个网站,每个网站就只能有1%的CPU上限吗?一个基于MT的blog在重建所有页面时和一个基于blogger.com的Blog在重建所有页面时,占用的CPU资源简直是天壤之别,因为blogger.com仅仅需要FTP的传送而已,重建工作在blogger.com就完成了。更何况,不可能100个网站会同时进行重建页面这样的CPU消耗巨大的工作,每个站点限制1%的CPU使用率结果就是两种:CPU资源浪费,或者就是让”空奸商”可以在一台服务器绑定更多网站。真要说合理的CPU分配,国外的”CPU时间”才是合理的,否则如果某项工作的CPU占用超过你的配额,那这辈子都别想完成(完成了也会被空间商处罚)。

5.好像不知道有绑定子目录这回事。

现在国内的空间价格比起过去是便宜了不少,主要是很多个人和小公司推出了很多低价位的合租服务器(科技是在进步,但空间商的服务器几年都不会换的),结果就是中国的虚拟机市场开始出现了GB的计量单位。但这些以G为单位的空间却很少会指明可以绑定几个子目录,有写出来的也就是绑定1-2个,基本上还没见过绑定子目录能到5个的(盘古的合租服务器例外)。这个问题,其实也和国内大部分主机是windows平台有关,windows平台下绑定一个子目录可不是像*niux平台下用Cpanel就可以自己搞定的。68互联的空间甚至连绑定唯一的一个顶级域名都需要他们的工作人员处理,在 leavic.com转到盘古之后,68互联那里付了两年钱的空间就彻底完蛋了(因为无法自主绑定域名)。


6.空间可以很便宜,数据库上赚死你。

国外的空间基本上都会送你500MB-1G的MySql数据,或者干脆就是数据库和web共享空间,而这种共享在国内只能是Access数据库,能够让MySql和web共享空间的极其罕见,大部分都需要额外购买数据库。但事实上,很多用户真正需要的空间就是数据库,一个wordpress不过几兆,一个MT也不到15MB,加上很多人图片都放在Flick或者photobucket上,文件放在googlepages、box.net或者 fileden上,视频放在youtube上,基本上就用不了什么web空间(如果你用MT的话,那静态文件占用的空间还有增长的可能)。而国内号称最稳定的虚拟主机系统的虎翼网,有些机型甚至只提供10MB的数据库,文章写多点就得考虑升级。而35互联的 数据库要价,足矣让全世界的空间商佩服他们的胆量。

7.空间商的字典里没有退钱这个词。

国外的空间商最少都会有30天的退款保障,而且不会有很严苛的条件,我所知道最长的可以有90天退款保障。国内的空间商则是另一种方式,试用。这个期限最长也就是2周,一般只有3天-7天。3-7天你也许可以了解这个产品的功能是否齐全,但试问谁能够在3-7天里了解一台服务器是否稳定呢?世界上最稳定的一台服务器可以连续运行10年不重启,3-7天怎么可能判定一台服务器是否稳定。更何况你根本无法确定试用期内和正式购买期内使用的是否是同一台服务器,专门空出一台优质服务器来迷惑试用期的用户等付钱后再转移并不是一件难事。这也是中国很多行业都在用的招数:免费试用让你上钩,想退款比登天都难。

8.客服极度不专业。

这个我想用过国内空间并和他们的客服联系过的就知道,你问他是否支持mod_rewrite模块,他会告诉你”技术人员不在,稍后解答”,然后你就等着技术人员出生吧。可以说国内的很多客服基本上就是销售客服,很少有真正意义上的技术客服(盘古还算可以),碰到问题根本无法解决,售后是个幻想出来的词汇。

9.资质问题让人担忧。

很多国内的空间服务商根本连ISP证书都没有取得就敢出来卖空间,别的不说,就拿那个所谓的7线主机来说:

你看看他的营业执照,营业期可以至”永久”?反正我是没见过这样的营业执照,而且证书极其模糊。他们的经营许可证号连接到了这里,返回结果让人感到迷茫。

更糟糕的是国内的空间代理商太过泛滥,代理诈骗事件时有发生,一旦发生这种情况,代理商的上家老板是不会给你任何帮助或补偿的,被骗就是彻底的被骗了。这些代理代理商,似乎是名正言顺的不需要任何证书都可以的。

10.上面9条还不够吗,我干嘛一定要凑十条?又不能和牌。

盘古这个空间看情况行事吧,只要我的文章没导致服务器被公安查封(我实在没这个本事),那还是继续用吧,用完之后还是该考虑国外的空间了。现在写文章越来越有脱离中央统一口径的意图,谁知道以后会写出什么东西来。有人合租最好,没人的话,还得自己办张信用卡,只是国外的空间都大得过分,一个人买这么多空间除了浪费不知道还有什么意义。

所以我心目中理想的Blog空间是:

一个Blog100-500MB空间足矣(看你的图片、视频等是否放在自己的服务器上)。

php+cgi+mysql+cpanel的*nix主机最为理想,数据库最好自由划分。

流量3-5G已经可以应付非常高的访问量了,如果图片有其他寄存空间就更少了。

Uptime至少99.5%,这已经是国外空间的二流档位了。

至少绑定2-3个目录吧(总空间也要相应上升)

价格嘛,30-40美元一年最好(当然得换成人民币我才有办法支付),我只是个穷学生,家里也不是种金子的。

有一件很糟糕的事,看完自己列出的条件之后,似乎youspeaker刚好符合条件,明知道他那里是暴利,难道还要我把钱送上门去?算了,等这里的空间不能用了再说吧。


, , , , ,

mysql数据库修复与备份

11.29.06

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。有时,正是MySQL管理员造成破坏。管理员已经知道表已破坏,用诸如vi或Emacs等编辑器试图直接编辑它们,这对表绝对不是件好事!

备份数据库两个主要方法是用mysqldump程序或直接拷贝数据库文件(如用cp、cpio或tar等)。每种方法都有其优缺点:

mysqldump与MySQL服务器协同操作。直接拷贝方法在服务器外部进行,并且你必须采取措施保证没有客户正在修改你将拷贝的表。如果你想用文件系统备份来备份数据库,也会发生同样的问题:如果数据库表在文件系统备份过程中被修改,进入备份的表文件主语不一致的状态,而对以后的恢复表将失去意义。文件系统备份与直接拷贝文件的区别是对后者你完全控制了备份过程,这样你能采取措施确保服务器让表不受干扰。

mysqldump比直接拷贝要慢些。
mysqldump生成能够移植到其它机器的文本文件,甚至那些有不同硬件结构的机器上。直接拷贝文件不能移植到其它机器上,除非你正在拷贝的表使用 MyISAM存储格式。ISAM表只能在相似的硬件结构的机器上拷贝。在MySQL 3.23中引入的MyISAM表存储格式解决了该问题,因为该格式是机器无关的,所以直接拷贝文件可以移植到具有不同硬件结构的机器上。只要满足两个条件:另一台机器必须也运行MySQL 3.23或以后版本,而且文件必须以MyISAM格式表示,而不是ISAM格式。

不管你使用哪种备份方法,如果你需要恢复数据库,有几个原则应该遵守,以确保最好的结果:

定期实施备份。建立一个计划并严格遵守。
让服务器执行更新日志。当你在崩溃后需要恢复数据时,更新日志将帮助你。在你用备份文件恢复数据到备份时的状态后,你可以通过运行更新日志中的查询再次运用备份后面的修改,这将数据库中的表恢复到崩溃发生时的状态。
以文件系统备份的术语讲,数据库备份文件代表完全倾倒(full dump),而更新日志代表渐进倾倒(incremental dump)。

使用一种统一的和易理解的备份文件命名机制。象backup1、buckup2等不是特别有意义。当实施你的恢复时,你将浪费时间找出文件里是什么东西。你可能发觉用数据库名和日期构成备份文件名会很有用。例如:

%mysqldump samp_db >/usr/archives/mysql/samp_db.1999-10-02
%mysqldump menagerie >/usr/archives/mysql/menagerie.1999-10-02

你可能想在生成备份后压缩它们。备份一般都很大!你也需要让你的备份文件有过期期限以避免它们填满你的磁盘,就象你让你的日志文件过期那样。

用文件系统备份备份你的备份文件。如果遇上了一个彻底崩溃,不仅清除了你的数据目录,也清除了包含你的数据库备份的磁盘驱动器,你将真正遇上了麻烦。
也要备份你的更新日志。
将你的备份文件放在不同于用于你的数据库的文件系统上。这将降低由于生成备份而填满包含数据目录的文件系统的可能性。

用于创建备份的技术同样对拷贝数据库到另一台机器有用。最常见地,一个数据库被转移到了运行在另一台主机上的服务器,但是你也可以将数据转移到同一台主机上的另一个服务器。
1 使用mysqldump备份和拷贝数据库

当你使用mysqldumo程序产生数据库备份文件时,缺省地,文件内容包含创建正在倾倒的表的CREATE语句和包含表中行数据的INSERT语句。换句话说,mysqldump产生的输出可在以后用作mysql的输入来重建数据库。

你可以将整个数据库倾倒进一个单独的文本文件中,如下:

%mysqldump samp_db >/usr/archives/mysql/samp_db.1999-10-02

输出文件的开头看起来象这样:

# MySQL Dump 6.0# # Host: localhost Database: samp_db#————-
————————–# Server version 3.23.2-alpha-log## Table st
ructure for table ‘absence’#CREATE TABLE absence( student_id int(10)
unsigned DEFAULT ‘0′ NOT NULL, date date DEFAULT ‘0000-00-00′ NOT NUL
L, PRIMARY KEY (student_id,date));## Dumping data for table ‘absence’
#INSERT INTO absence VALUES (3,’1999-09-03′);INSERT INTO absence VALUE
S (5,’1999-09-03′);INSERT INTO absence VALUES (10,’1999-09-08′);……
 

文件剩下的部分有更多的INSERT和CREATE TABLE语句组成。
如果你想压缩备份,使用类似如下的命令:

%mysqldump samp_db | gzip >/usr/archives/mysql/samp_db.1999-10-02.gz

如果你要一个庞大的数据库,输出文件也将很庞大,可能难于管理。如果你愿意,你可以在mysqldump命令行的数据库名后列出单独的表名来倾到它们的内容,这将倾倒文件分成较小、更易于管理的文件。下例显示如何将samp_db数据库的一些表倾到进分开的文件中:

%mysqldump samp_db student score event absence >grapbook.sql
%mysqldump samp_db member president >hist-league.sql

如果你生成准备用于定期刷新另一个数据库内容的备份文件,你可能想用–add-drop-table选项。这告诉服务器将DROP TABLE IF EXISTS语句写入备份文件,然后,当你取出备份文件并把它装载进第二个数据库时,如果表已经存在,你不会得到一个错误。

如果你倒出一个数据库以便能把数据库转移到另一个服务器,你甚至不必创建备份文件。要保证数据库存在于另一台主机,然后用管道倾倒数据库,这样mysql 能直接读取mysqldump的输出。例如:你想从主机pit-viper.snake.net拷贝数据库samp_db到boa.snake.net,可以这样很容易做到:

%mysqladmin -h boa.snake.net create samp_db
%mysqldump samp_db | mysql -h boa.snake.net samp_db

以后,如果你想再次刷新boa.snake.net上的数据库,跳过mysqladmin命令,但要对mysqldump加上–add-drop-table以避免的得到表已存在的错误:

%mysqldump –add-drop-table samp_db | mysql -h boa.snake.net samp_db

mysqldump其它有用的选项包括:

–flush-logs和–lock-tables组合将对你的数据库检查点有帮助。–lock-tables锁定你正在倾倒的所有表,而– flush-logs关闭并重新打开更新日志文件,新的更新日志将只包括从备份点起的修改数据库的查询。这将设置你的更新日志检查点位备份时间。(然而如果你有需要执行个更新的客户,锁定所有表对备份期间的客户访问不是件好事。)
如果你使用–flush-logs设置检查点到备份时,有可能最好是倾倒整个数据库。
如果你倾倒单独的文件,较难将更新日志检查点与备份文件同步。在恢复期间,你通常按数据库为基础提取更新日志内容,对单个表没有提取更新的选择,所以你必须自己提取它们。

缺省地,mysqldump在写入前将一个表的整个内容读进内存。这通常确实不必要,并且实际上如果你有一个大表,几乎是失败的。你可用–quick选项告诉mysqldump只要它检索出一行就写出每一行。为了进一步优化倾倒过程,使用–opt而不是–quick。–opt选项打开其它选项,加速数据的倾倒和把它们读回。

用–opt实施备份可能是最常用的方法,因为备份速度上的优势。然而,要警告你,–opt选项确实有代价,–opt优化的是你的备份过程,不是其他客户对数据库的访问。–opt选项通过一次锁定所有表阻止任何人更新你正在倾倒的任何表。你可在一般数据库访问上很容易看到其效果。当你的数据库一般非常频繁地使用,只是一天一次地调节备份。

一个具有–opt的相反效果的选项是–dedayed。该选项使得mysqldump写出INSERT DELAYED语句而不是INSERT语句。如果你将数据文件装入另一个数据库并且你想是这个操作对可能出现在该数据库中的查询的影响最小,– delayed对此很有帮助。

–compress选项在你拷贝数据库到另一台机器上时很有帮助,因为它减少网络传输字节的数量。下面有一个例子,注意到–compress对与远端主机上的服务器通信的程序才给出,而不是对与本地主机连接的程序:

%mysqldump –opt samp_db | mysql –compress -h boa.snake.net samp_db

mysqldump有很多选项,详见《MySQL参考手册》。

2 使用直接拷贝数据库的备份和拷贝方法

另一种不涉及mysqldump备份数据库和表的方式是直接拷贝数据库表文件。典型地,这用诸如cp、tar或cpio实用程序。本文的例子使用cp。

当你使用一种直接备份方法时,你必须保证表不在被使用。如果服务器在你则正在拷贝一个表时改变它,拷贝就失去意义。

保证你的拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重启服务器。如果你不想关闭服务器,要在执行表检查的同时锁定服务器。如果服务器在运行,相同的制约也适用于拷贝文件,而且你应该使用相同的锁定协议让服务器“安静下来”。

假设服务器关闭或你已经锁定了你想拷贝的表,下列显示如何将整个samp_db数据库备份到一个备份目录(DATADIR表示服务器的数据目录):

%cd DATADIR%cp -r samp_db /usr/archive/mysql

单个表可以如下备份:

%cd DATADIR/samp_db%cp member.* /usr/archive/mysql/samp_db%cp score.*
/usr/archive/mysql/samp_db ….

当你完成了备份时,你可以重启服务器(如果关闭了它)或释放加在表上的锁定(如果你让服务器运行)。

要用直接拷贝文件把一个数据库从一台机器拷贝到另一台机器上,只是将文件拷贝到另一台服务器主机的适当数据目录下即可。要确保文件是MyIASM格式或两台机器有相同的硬件结构,否则你的数据库在另一台主机上有奇怪的内容。你也应该保证在另一台机器上的服务器在你正在安装数据库表时不访问它们。

3 复制数据库(Replicating Database)

复制(Replication)类似于拷贝数据库到另一台服务器上,但它的确切含义是实时地保证两个数据库的完全同步。这个功能将在3.23版中出现,而且还不很成熟,因此本文不作详细介绍。

4 用备份恢复数据

数据库损坏的发生有很多原因,程度也不同。如果你走运,你可能仅损坏一两个表(如掉电),如果你倒霉,你可能必须替换整个数据目录(如磁盘损坏)。在某些情况下也需要恢复,比如用户错误地删除了数据库或表。不管这些倒霉事件的原因,你将需要实施某种恢复。

如果表损坏但没丢失,尝试用myisamchk或isamchk修复它们,如果这样的损坏可有修复程序修复,你可能根本不需要使用备份文件。关于表修复的过程,见《数据库维护与修复》。

恢复过程涉及两种信息源:你的备份文件和个更新日志。备份文件将表恢复到实施备份时的状态,然而一般表在备份与发生问题之间的时间内已经被修改,更新日志包含了用于进行这些修改的查询。你可以使用日志文件作为mysql的输入来重复查询。这已正是为什么要启用更新日志的原因。

恢复过程视你必须恢复的信息多少而不同。实际上,恢复整个数据库比单个表跟容易,因为对于数据库运用更新日志比单个表容易。

4.1 恢复整个数据库

首先,如果你想恢复的数据库是包含授权表的mysql数据库,你需要用–skip-grant-table选项运行服务器。否则,它会抱怨不能找到授权表。在你已经恢复表后,执行mysqladmin flush-privileges告诉服务器装载授权标并使用它们。

将数据库目录内容拷贝到其它某个地方,如果你在以后需要它们。

用最新的备份文件重装数据库。如果你用mysqldump产生的文件,将它作为mysql的输入。如果你用直接从数据库拷贝来的文件,将它们直接拷回数据库目录,然而,此时你需要在拷贝文件之前关闭数据库,然后重启它。

使用更新日志重复做备份以后的修改数据库表的查询。对于任何可适用的更新日志,将它们作为mysql的输入。指定–one-database选项使得 mysql只执行你有兴趣恢复的数据库的查询。如果你知道你需要运用所有更新日志文件,你可以在包含日志的目录下使用这条命令:

% ls -t -r -1 update.[0-9]* | xargs cat | mysql –one-database db_name

ls命令生成更新日志文件的一个单列列表,根据服务器产生它们的次序排序(主意:如果你修改任何一个文件,你将改变排序次序,这导致更新日志一错误的次序被运用。)
很可能你会是运用某几个更新日志。例如,自从你备份以来产生的更新日志被命名为update.392、update.393等等,你可以这样重新运行:

%mysql –one-database db_name < update.392
%mysql --one-database db_name < update.393
.....
如果你正在实施恢复且使用更新日志恢复由于一个错误建议的DROP DATABASE、DROP TABLE或DELETE语句造成丢失的信息,在运用更新日志之前,要保证从其中删除这些语句。

4.2 恢复单个表

恢复单个表较为复杂。如果你用一个由mysqldump生成的备份文件,并且它不包含你感兴趣的表的数据,你需要从相关行中提取它们并将它们用作 mysql的输入。这是容易的部分。难的部分是从只运用于该表的更新日志中拉出片断。你会发觉mysql_find_rows实用程序对此很有帮助,它从更新日志中提取多行查询。

另一个可能性是使用另一台服务器恢复整个数据库,然后拷贝你想要的表文件到原数据库中。这可能真的很容易!当你将文件拷回数据库目录时,要确保原数据库的服务器关闭。

mysql密码忘记的修改

如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :/usr/bin/safe_mysqld --skip-grant-tables & 就可以不需要密码就进入 MySQL 了。
然后就是 >use mysql >update user set password=password(”new_pass”) where user=”root”; >flush privileges; 重新杀 MySQL ,用正常方法启动 MySQL 。
Redhat的safe_mysqld在/usr/bin下,而使用tarball缺省安装在/usr/local/bin下。

Shell的五个小应用

11.29.06

Shell是Linux基础中的基础。用户也许知道类似“ls”、“cp”等这些Shell命令的用法,但是不知尝试过没有Shell其它更为有趣、有用的用法呢?现在给大家展示几个。

巧用watch命令

在Linux中, Shell命令“watch”的作用是以全屏方式重复地执行指定的命令。用户可以通过它了解命令的运行情况。例如用户如果想实时观察内存变化,那么可以输入如下命令:
#watch free

这样就可以动态地观察内存中各个指标在某段时间内的变化情况了。

如果用户要观察虚拟内存的变化, 而不想耽误当前终端的操作,那么可以通过打开另外一个终端达到这个目的。命令如下:
#xterm -e watch -n 1 vmstat &

这样就会弹出一个终端串口显示有关虚拟内存的情况。

删除文中空行

在Linux下,用户如果想删除文件中的空行,一般使用“grep”,这里给出另外的几种方式:

1.使用“cat”命令,示例如下:
#cat 20041116131021.htm|tr -s ‘\n’

2.使用“sed”命令,示例如下:
#sed ‘/^$/d’ 20041116131021.htm

3.使用“awk”工具,示例如下:
#awk ‘{if($0!=“”)print}’ 20041116131021.htm

捕获终端屏幕

“script”是一个Shell内建命令。它的作用是为终端会话制作一个副本,把用户的输入/输出信息以文件的形式保存下来。下面以笔者的应用做个例子:

#script
Script started, file is outputfile //输出文件是outputfile
#ls -l /
……
#exit //用exit结束捕获
Script done, file is outputfile //输出的结果放在outputfile中
#cat outputfile
……

这里仅举例说明“script”命令的用法,以上是将浏览根目录会话保存在outputfile文件中。

开启键盘数字灯

很多Linux用户特别希望在系统启动的时候能自动将小键盘上的数字灯打开。虽然是个小的动作,但是方便了不少。而且对于原来使用Windows的用户来说,感觉Linux在细节上也到位。下面就是一段设置小键盘数字灯的脚本:

INITTY=/dev/tty[1-8]
for tty in $INITTY
do
setleds -D +num < $tty
done

把它放在/etc/rc.d/rc.local文件中即可。在字符模式下,可以输入下面的命令完成:
#setleds -D +num/+caps/+scroll

用户输入检测

有时需要对用户的输入作一些必要的检测,如限制输入的长度和类型等。下面举例要求用户必须输入六个数字,如果输入有非数字字符,或者长度不等于六个,就提示错误信息。脚本源码如下:

#!/bin/csh
while true
do
echo -n “请输入六个数字:”
read num
lengh=${#num} #变量lengh存放输入的长度
if [[ $num != [0-9][0-9][0-9][0-9] || $lengh != 6 ]] then
echo “错误! 请重新输入”
continue
else
echo “输入正确!”
exit 0
fi
done

小结

Shell的用法还远不止这些,Shell命令、Shell编程都是Linux用户应该掌握的基础知识。用户在熟悉了Shell的基本命令和语法结构后,根据需要、善加运用就可让Shell焕发无穷魅力,为工作和学习带来无限乐趣。

SSH 使用原理

11.29.06

用SSH替代Telnet 获得更安全连接

如果你一直利用Telnet控制网络设备,你可以考虑采用其他更安全的方式。本文告诉你如何用SSH替换Telnet。
Click here to find out more!

使用Telnet这个用来访问远程计算机的TCP/IP协议以控制你的网络设备相当于在离开某个建筑时大喊你的用户名和口令。很快地,会有人进行监听,并且他们会利用你安全意识的缺乏。

SSH是替代Telnet和其他远程控制台管理应用程序的行业标准。SSH命令是加密的并以几种方式进行保密。

在使用SSH的时候,一个数字证书将认证客户端(你的工作站)和服务器(你的网络设备)之间的连接,并加密受保护的口令。SSH1使用RSA加密密钥,SSH2使用数字签名算法(DSA)密钥保护连接和认证。

加密算法包括Blowfish,数据加密标准(DES),以及三重DES(3DES)。SSH保护并且有助于防止欺骗,“中间人”攻击,以及数据包监听。

实施SSH的第一步是验证你的设备支持SSH。请登录你的路由器或交换机,并确定你是否加载了一个支持SSH的IPSec IOS镜像。

在我们的例子中,我们将使用Cisco IOS命令。运行下面的命令:
Router> Show flash

该命令显示已加载的IOS镜像名称。你可以用结果对比你的供应商的支持特性列表。

在你验证了你的设备支持SSH之后,请确保设备拥有一个主机名和配置正确的主机域,就像下面的一样:
Router> config terminal
Router (config)# hostname hostname
Router (config)# ip domain-name domainname

在这个时候,你就可以启用路由器上的SSH服务器。要启用SSH服务器,你首先必须利用下面的命令产生一对RSA密钥:
Router (config)# crypto key generate rsa

在路由器上产生一对RSA密钥就会自动启用SSH。如果你删除这对RSA密钥,就会自动禁用该SSH服务器。

实施SSH的最后一步是启用认证,授权和审计(AAA)。在你配置AAA的时候,请指定用户名和口令,会话超时时间,一个连接允许的尝试次数。像下面这样使用命令:
Router (config)# aaa new-model
Router (config)# username password
Router (config)# ip ssh time-out
Router (config)# ip ssh authentication-retries

要验证你已经配置了SSH并且它正运行在你的路由器上,执行下面的命令:
Router# show ip ssh

在验证了配置之后,你就可以强制那些你在AAA配置过程中添加的用户使用SSH,而不是Telnet。你也可以在虚拟终端(vty)连接中应用SSH而实现同样的目的。这里给出一个例子:
Router (config)# line vty 0 4
Router (config-line)# transport input SSH

在你关闭现存的Telnet会话之前,你需要一个SSH终端客户端程序以测试你的配置。我极力推荐PuTTY;它是免费的,而且它是一个优秀的终端软件。

最后的想法
当你在你的路由器和交换机上启用了SSH之后,保证你修改了所有现存的访问控制列表以允许对这些设备的连接。你现在可以向你的上级报告你已经堵上了一个巨大的安全漏洞:现在所有的网络管理会话都被加密并且被保护着。