十二 27 2007

安全设置WEB服务器

Published by 再苦也要微笑 at 星期四, 十二月 27, 2007 under Os

iis的相关设置:

删除默认建立的站点的虚拟目录,停止默认web站点,删除对应的文件目录c:inetpub,配置所有站点的公共设置,设置好相关的连接数限制,带宽设置以及性能设置等其他设置。配置应用程序映射,删除所有不必要的应用程序扩展,只保留asp,php,cgi,pl,aspx应用程序扩展。对于php和cgi,推荐使用isapi方式解析,用exe解析对安全和性能有所影响。用户程序调试设置发送文本错误信息给户。对于数据库,尽量采用mdb后缀,不需要更改为asp,可在iis中设置一个mdb的扩展映射,将这个映射使用一个无关的dll文件如c:winntsystem32inetsrvssinc.dll来防止数据库被下载。设置iis的日志保存目录,调整日志记录信息。设置为发送文本错误信息。修改403错误页面,将其转向到其他页,可防止一些扫描器的探测。另外为隐藏系统信息,防止telnet到80端口所泄露的系统版本信息可修改iis的banner信息,可以使用winhex手工修改或者使用相关软件如banneredit修改。

对于用户站点所在的目录,在此说明一下,用户的ftp根目录下对应三个文件佳,wwwroot,database,logfiles,分别存放站点文件,数据库备份和该站点的日志。如果一旦发生入侵事件可对该用户站点所在目录设置具体的权限,图片所在的目录只给予列目录的权限,程序所在目录如果不需要生成文件(如生成html的程序)不给予写入权限。因为是虚拟主机平常对脚本安全没办法做到细致入微的地步,更多的只能在方法用户从脚本提升权限:

asp的安全设置:

设置过权限和服务之后,防范asp木马还需要做以下工作,在cmd窗口运行以下命令:

regsvr32/u c:\winnt\system32\wshom.ocx del c:\winnt\system32\wshom.ocx regsvr32/u c:\winnt\system32\shell32.dll del c:\winnt\system32\shell32.dll

即可将wscript.shell, shell.application, wscript.network组件卸载,可有效防止asp木马通过wscript或shell.application执行命令以及使用木马查看一些系统敏感信息。另法:可取消以上文件的users用户的权限,重新启动iis即可生效。但不推荐该方法。

另外,对于fso由于用户程序需要使用,服务器上可以不注销掉该组件,这里只提一下fso的防范,但并不需要在自动开通空间的虚拟商服务器上使用,只适合于手工开通的站点。可以针对需要fso和不需要fso的站点设置两个组,对于需要fso的用户组给予c:winntsystem32scrrun.dll文件的执行权限,不需要的不给权限。重新启动服务器即可生效。

对于这样的设置结合上面的权限设置,你会发现海阳木马已经在这里失去了作用!

php的安全设置:

默认安装的php需要有以下几个注意的问题:

c:\winnt\php.ini只给予users读权限即可。在php.ini里需要做如下设置:

safe_mode=on register_globals = off  allow_url_fopen = off  display_errors = off  magic_quotes_gpc = on [默认是on,但需检查一遍]  open_basedir =web目录  disable_functions =passthru,exec,shell_exec,system,phpinfo,get_cfg_var,popen,chmod  默认设置com.allow_dcom = true修改为false[修改前要取消掉前面的;]

mysql安全设置:

如果服务器上启用mysql数据库,mysql数据库需要注意的安全设置为:

删除mysql中的所有默认用户,只保留本地root帐户,为root用户加上一个复杂的密码。赋予普通用户updatedeletealertcreatedrop权限的时候,并限定到特定的数据库,尤其要避免普通客户拥有对mysql数据库操作的权限。检查mysql.user表,取消不必要用户的shutdown_priv,relod_priv,process_priv和file_priv权限,这些权限可能泄漏更多的服务器信息包括非mysql的其它信息出去。可以为mysql设置一个启动用户,该用户只对mysql目录有权限。设置安装目录的data数据库的权限(此目录存放了mysql数据库的数据信息)。对于mysql安装目录给users加上读取、列目录和执行权限。

serv-u安全问题:

安装程序尽量采用最新版本,避免采用默认安装目录,设置好serv-u目录所在的权限,设置一个复杂的管理员密码。修改serv-u的banner信息,设置被动模式端口范围(4001—4003)在本地服务器中设置中做好相关安全设置:包括检查匿名密码,禁用反超时调度,拦截“ftp bounce”攻击和fxp,对于在30秒内连接超过3次的用户拦截10分钟。域中的设置为:要求复杂密码,目录只使用小写字母,高级中设置取消允许使用mdtm命令更改文件的日期。

更改serv-u的启动用户:在系统中新建一个用户,设置一个复杂点的密码,不属于任何组。将servu的安装目录给予该用户完全控制权限。建立一个ftp根目录,需要给予这个用户该目录完全控制权限,因为所有的ftp用户上传,删除,更改文件都是继承了该用户的权限,否则无法操作文件。另外需要给该目录以上的上级目录给该用户的读取权限,否则会在连接的时候出现530 not logged in, home directory does not exist。比如在测试的时候ftp根目录为d:soft,必须给d盘该用户的读取权限,为了安全取消d盘其他文件夹的继承权限。而一般的使用默认的system启动就没有这些问题,因为system一般都拥有这些权限的。

数据库服务器的安全设置

对于专用的mssql数据库服务器,按照上文所讲的设置tcp/ip筛选和ip策略,对外只开放1433和5631端口。对于mssql首先需要为sa设置一个强壮的密码,使用混合身份验证,加强数据库日志的记录,审核数据库登陆事件的”成功和失败”.删除一些不需要的和危险的ole自动存储过程(会造成企业管理器中部分功能不能使用),这些过程包括如下:

sp_oacreate sp_oadestroy sp_oageterrorinfo sp_oagetproperty  sp_oamethod sp_oasetproperty sp_oastop

去掉不需要的注册表访问过程,包括有:

xp_regaddmultistring xp_regdeletekey xp_regdeletevalue  xp_regenumvalues xp_regread xp_regremovemultistring  xp_regwrite

去掉其他系统存储过程,如果认为还有威胁,当然要小心drop这些过程,可以在测试机器上测试,保证正常的系统能完成工作,这些过程包括:

xp_cmdshell xp_dirtree xp_dropwebtask sp_addsrvrolemember  xp_makewebtask xp_runwebtask xp_subdirs sp_addlogin  sp_addextendedproc

在实例属性中选择tcp/ip协议的属性。选择隐藏 sql server 实例可防止对1434端口的探测,可修改默认使用的1433端口。除去数据库的guest账户把未经认可的使用者据之在外。 例外情况是master和 tempdb 数据库,因为对他们guest帐户是必需的。另外注意设置好各个数据库用户的权限,对于这些用户只给予所在数据库的一些权限。在程序中不要用sa用户去连接任何数据库。网络上有建议大家使用协议加密的,千万不要这么做,否则你只能重装mssql了。

入侵检测和数据备份

入侵检测工作

作为服务器的日常管理,入侵检测是一项非常重要的工作,在平常的检测过程中,主要包含日常的服务器安全例行检查和遭到入侵时的入侵检查,也就是分为在入侵进行时的安全检查和在入侵前后的安全检查。系统的安全性遵循木桶原理,木桶原理指的是:一个木桶由许多块木板组成,如果组成木桶的这些木板长短不一,那么这个木桶的最大容量不取决于长的木板,而取决于最短的那块木板。应用到安全方面也就是说系统的安全性取决于系统中最脆弱的地方,这些地方是日常的安全检测的重点所在。

日常的安全检测

日常安全检测主要针对系统的安全性,工作主要按照以下步骤进行:

1.查看服务器状态:

打开进程管理器,查看服务器性能,观察cpu和内存使用状况。查看是否有cpu和内存占用过高等异常情况。

2.检查当前进程情况

切换“任务管理器”到进程,查找有无可疑的应用程序或后台进程在运行。用进程管理器查看进程时里面会有一项taskmgr,这个是进程管理器自身的进程。如果正在运行windows更新会有一项wuauclt.exe进程。对于拿不准的进程或者说不知道是服务器上哪个应用程序开启的进程,可以在网络上搜索一下该进程名加以确定[进程知识库:http://www.dofile.com/]。通常的后门如果有进程的话,一般会取一个与系统进程类似的名称,如svch0st.exe,此时要仔细辨别[通常迷惑手段是变字母o为数字0,变字母l为数字1]

3.检查系统帐号

打开计算机管理,展开本地用户和组选项,查看组选项,查看administrators组是否添加有新帐号,检查是否有克隆帐号。

4.查看当前端口开放情况

使用activeport,查看当前的端口连接情况,尤其是注意与外部连接着的端口情况,看是否有未经允许的端口与外界在通信。如有,立即关闭该端口并记录下该端口对应的程序并记录,将该程序转移到其他目录下存放以便后来分析。打开计算机管理==》软件环境==》正在运行任务[在此处可以查看进程管理器中看不到的隐藏进程],查看当前运行的程序,如果有不明程序,记录下该程序的位置,打开任务管理器结束该进程,对于采用了守护进程的后门等程序可尝试结束进程树,如仍然无法结束,在注册表中搜索该程序名,删除掉相关键值,切换到安全模式下删除掉相关的程序文件。

5.检查系统服务

运行services.msc,检查处于已启动状态的服务,查看是否有新加的未知服务并确定服务的用途。对于不清楚的服务打开该服务的属性,查看该服务所对应的可执行文件是什么,如果确定该文件是系统内的正常使用的文件,可粗略放过。查看是否有其他正常开放服务依存在该服务上,如果有,可以粗略的放过。如果无法确定该执行文件是否是系统内正常文件并且没有其他正常开放服务依存在该服务上,可暂时停止掉该服务,然后测试下各种应用是否正常。对于一些后门由于采用了hook系统api技术,添加的服务项目在服务管理器中是无法看到的,这时需要打开注册表中的hkey_local_machinesystemcurrentcontrolsetservices项进行查找,通过查看各服务的名称、对应的执行文件来确定是否是后门、木马程序等。

6.查看相关日志

运行eventvwr.msc,粗略检查系统中的相关日志记录。在查看时在对应的日志记录上点右键选“属性”,在“筛选器”中设置一个日志筛选器,只选择错误、警告,查看日志的来源和具体描述信息。对于出现的错误如能在服务器常见故障排除中找到解决办法则依照该办法处理该问题,如果无解决办法则记录下该问题,详细记录下事件来源、id号和具体描述信息,以便找到问题解决的办法。

7.检查系统文件

主要检查系统盘的exe和dll文件,建议系统安装完毕之后用dir *.exe /s >1.txt将c盘所有的exe文件列表保存下来,然后每次检查的时候再用该命令生成一份当时的列表,用fc比较两个文件,同样如此针对dll文件做相关检查。需要注意的是打补丁或者安装软件后重新生成一次原始列表。检查相关系统文件是否被替换或系统中是否被安装了木马后门等恶意程序。必要时可运行一次杀毒程序对系统盘进行一次扫描处理。

8.检查安全策略是否更改

打开本地连接的属性,查看“常规”中是否只勾选了“tcp/ip协议”,打开“tcp/ip”协议设置,点“高级”==》“选项”,查看“ip安全机制”是否是设定的ip策略,查看“tcp/ip”筛选允许的端口有没有被更改。打开“管理工具”=》“本地安全策略”,查看目前使用的ip安全策略是否发生更改。

9.检查目录权限

重点查看系统目录和重要的应用程序权限是否被更改。需要查看的目录有

c:;c:winnt; c:winntsystem32;c:winntsystem32inetsrv;c:winntsystem32inetsrvdata; c:documents and settings;

然后再检查serv-u安装目录,查看这些目录的权限是否做过变动。检查system32下的一些重要文件是否更改过权限,包括:cmd,net,ftp,tftp,cacls等文件。

10.检查启动项

主要检查当前的开机自启动程序。可以使用areporter来检查开机自启动的程序。

发现入侵时的应对措施

对于即时发现的入侵事件,以下情况针对系统已遭受到破坏情况下的处理,系统未遭受到破坏或暂时无法察觉到破坏先按照上述的检查步骤检查一遍后再酌情考虑以下措施。系统遭受到破坏后应立即采取以下措施:

视情况严重决定处理的方式,是通过远程处理还是通过实地处理。如情况严重建议采用实地处理。如采用实地处理,在发现入侵的第一时间通知机房关闭服务器,待处理人员赶到机房时断开网线,再进入系统进行检查。如采用远程处理,如情况严重第一时间停止所有应用服务,更改ip策略为只允许远程管理端口进行连接然后重新启动服务器,重新启动之后再远程连接上去进行处理,重启前先用areporter检查开机自启动的程序。然后再进行安全检查。

以下处理措施针对用户站点被入侵但未危及系统的情况,如果用户要求加强自己站点的安全性,可按如下方式加固用户站点的安全:

站点根目录----只给administrator读取权限,权限继承下去。 wwwroot ------给web用户读取、写入权限。高级里面有删除子文件夹和文件权限  logfiles------给system写入权限。 database------给web用户读取、写入权限。高级里面没有删除子文件夹和文件权限

如需要进一步修改,可针对用户站点的特性对于普通文件存放目录如html、js、图片文件夹只给读取权限,对asp等脚本文件给予上表中的权限。另外查看该用户站点对应的安全日志,找出漏洞原因,协助用户修补程序漏洞。

数据备份和数据恢复

数据备份工作大致如下:

1. 每月备份一次系统数据。

2. 备份系统后的两周单独备份一次应用程序数据,主要包括iis、serv-u、数据库等数据。

3. 确保备份数据的安全,并分类放置这些数据备份。因基本上采用的都是全备份方法,对于数据的保留周期可以只保留该次备份和上次备份数据两份即可。

数据恢复工作:

1.系统崩溃或遇到其他不可恢复系统正常状态情况时,先对上次系统备份后发生的一些更改事件如应用程序、安全策略等的设置做好备份,恢复完系统后再恢复这些更改。

2.应用程序等出错采用最近一次的备份数据恢复相关内容。

服务器性能优化

整理系统空间:

删除系统备份文件,删除驱动备份,刪除不用的輸入法,刪除系统的帮助文件,卸载不常用的组件。最小化c盘文件。

性能优化

删除多余的开机自动运行程序;减少预读取,减少进度条等待时间;让系统自动关闭停止响应的程序;禁用错误报告,但在发生严重错误时通知;关闭自动更新,改为手动更新计算机;启用硬件和directx加速;禁用关机事件跟踪;禁用配置服务器向导; 减少开机磁盘扫描等待时间;将处理器计划和内存使用都调到应用程序上;调整虚拟内存;内存优化;修改cpu的二级缓存;修改磁盘缓存。

iis性能优化

1、调整iis高速缓存

hkey_local_machine\ system\currentcontrolset\services\inetinfoparametersmemorycachesize

memorycachesize的范围是从0道4gb,缺省值为3072000(3mb)。一般来说此值最小应设为服务器内存的10%。iis通过高速缓存系统句柄、目录列表以及其他常用数据的值来提高系统的性能。这个参数指明了分配给高速缓存的内存大小。如果该值为0,那就意味着“不进行任何高速缓存”。在这种情况下系统的性能可能会降低。如果你的服务器网络通讯繁忙,并且有足够的内存空间,可以考虑增大该值。必须注意的是修改注册表后,需要重新启动才能使新值生效。

2.不要关闭系统服务: “protected storage”

3.对访问流量进行限制

a.对站点访问人数进行限制。

b.站点带宽限制。保持http连接。

c.进程限制, 输入cpu的耗用百分比。

4.提高iis的处理效率。

应用程序设置”处的“应用程序保护”下拉按钮,从弹出的下拉列表中,选中“低(iis进程)”选项,iis服务器处理程序的效率可以提高20%左右。但此设置会带来严重的安全问题,不值得推荐。

5.将iis服务器设置为独立的服务器。

a.提高硬件配置来优化iis性能硬盘:硬盘空间被nt和iis服务以如下两种方式使用:一种是简单地存储数据;另一种是作为虚拟内存使用。如果使用ultra2的scsi硬盘,可以显著提高iis的性能。

b.可以把nt服务器的页交换文件分布到多个物理磁盘上,注意是多个“物理磁盘”,分布在多个分区上是无效的。另外,不要将页交换文件放在与windows nt引导区相同的分区中。

c.使用磁盘镜像或磁盘带区集可以提高磁盘的读取性能。

d.最好把所有的数据都储存在一个单独的分区里。然后定期运行磁盘碎片整理程序以保证在存储web服务器数据的分区中没有碎片。使用ntfs有助于减少碎片。推荐使用norton的speeddisk,可以很快的整理ntfs分区。

6.起用http压缩

http压缩是在web服务器和浏览器间传输压缩文本内容的方法。http压缩采用通用的压缩算法如gzip等压缩html、javascript或css文件。可使用pipeboost进行设置。

7.起用资源回收

使用iis5recycle定时回收进程资源。

服务器常见故障排除

1. asp“请求的资源正在使用中”的解决办法:

该问题一般与杀毒软件有关,在服务器上安装个人版杀毒软件所致。出现这种错误可以通过卸载杀毒软件解决,也可尝试重新注册vbscript.dll和jscript.dll来解决,在命令行下运行:regsvr32 vbscript.dll 和regsvr32 jscript.dll即可。

2.asp500错误解决办法:

首先确定该问题是否是单一站点存在还是所有站点存在,如果是单一站点存在该问题,则是网站程序的问题,可打开该站点的错误提示,把ie的“显示友好http错误”信息取消,查看具体错误信息,然后对应修改相关程序。如是所有站点存在该问题,并且html页面没有出现该问题,相关日志出现“服务器无法加载应用程序‘/lm/w3svc/1/root‘。错误是 ‘不支持此接口‘”。那十有八九是服务器系统中的asp相关组件出现了问题,重新启动iis服务,尝试是否可以解决该问题,无法解决重新启动系统尝试是否可解决该问题,如无法解决可重新修复一下asp组件:

首先删除com组件中的关于iis的三个东西,需要先将属性里的高级中“禁止删除”的勾选取消。

命令行中,输入“cd winnt\system32\inetsrv”字符串命令,单击回车键后,再执行“rundll32 wamreg.dll,createiispackage”命令,接着再依次执行“regsvr32 asptxn.dll”命令、“iisreset”命令,最后重新启动一下计算机操作系统,这样iis服务器就能重新正确响应asp脚本页面了。

3. iis出现105错误:

在系统日志中“服务器无法注册管理工具发现信息。管理工具可能无法看到此服务器” 来源:w3svc id:105解决办法:

在网络连接中重新安装netbios协议即可,安装完成之后取消掉勾选。

4.mysql服务无法启动【错误代码1067】的解决方法

启动mysql服务时都会在中途报错!内容为:在 本地计算机 无法启动mysql服务 错误1067:进程意外中止。

解决方法:查找windows目录下的my.ini文件,编辑内容(如果没有该文件,则新建一个),至少包含

basedir,datadir这两个基本的配置。

[mysqld]  # set basedir to installation path, e.g., c:/mysql  # 设置为mysql的安装目录  basedir=d:/www/webserver/mysql  # set datadir to location of data directory,  # e.g., c:/mysql/data or d:/mydata/data  # 设置为mysql的数据目录  datadir=d:/www/webserver/mysql/data

注意,我在更改系统的temp目录之后没有对更改后的目录给予system用户的权限也出现过该问题。

5.dllhotst进程消耗cpu 100%的问题

服务器正常cpu消耗应该在75%以下,而且cpu消耗应该是上下起伏的,出现这种问题的服务器,cpu会突然一直处100%的水平,而且不会下降。

查看任务管理器,可以发现是dllhost.exe消耗了所有的cpu空闲时间,管理员在这种情况下,只好重新启动iis服务,奇怪的是,重新启动iis服务后一切正常,但可能过了一段时间后,问题又再次出现了。

直接原因:

有一个或多个access数据库在多次读写过程中损坏, mdac系统在写入这个损坏的access文件时,asp线程处于block状态,结果其他线程只能等待,iis被死锁了,全部的cpu时间都消耗在dllhost中。

解决办法:

把数据库下载到本地,然后用access打开,进行修复操作。再上传到网站。如果还不行,只有新建一个access数据库,再从原来的数据库中导入所有表和记录。然后把新数据库上传到服务器上。

6.windows installer出错:

在安装软件的时候出现“不能访问windows installer 服务。可能你在安全模式下运行 windows ,或者windows installer 没有正确的安装。请和你的支持人员联系以获得帮助” 如果试图重新安装instmsiw.exe,提示:“指定的服务已存在”。

解决办法:

关于installer的错误,可能还有其他错误提示,可尝试以下解决办法:

首先确认是否是权限方面的问题,提示信息会提供相关信息,如果是权限问题,给予winnt目录everyone权限即可[安装完把权限改回来即可]。如果提示的是上述信息,可以尝试以下解决方法:运行“msiexec /unregserver”卸载windows installer服务,如果无法卸载可使用srvinstw进行卸载,然后下载windows installer的安装程序[地址:http://www.newhua.com/cfan/200410/instmsiw.exe],用winrar解压该文件,在解压缩出来的文件夹里面找到msi.inf文件,右键单击选择“安装”,重新启动系统后运行“msiexec /regserver”重新注册windows installer服务。

服务器管理

服务器日常管理安排

服务器管理工作必须规范严谨,尤其在不是只有一位管理员的时候,日常管理工作包括:

1.服务器的定时重启。每台服务器保证每周重新启动一次。重新启动之后要进行复查,确认服务器已经启动了,确认服务器上的各项服务均恢复正常。对于没有启动起来或服务未能及时恢复的情况要采取相应措施。前者可请求托管商的相关工作人员帮忙手工重新启动,必要时可要求让连接上显示器确认是否已启动起来;后者需要远程登陆上服务器进行原因查找并根据原因尝试恢复服务。

2.服务器的安全、性能检查,每服务器至少保证每周登陆两次粗略检查两次。每次检查的结果要求进行登记在册。如需要使用一些工具进行检查,可直接在e:tools中查找到相关工具。对于临时需要从网络上找的工具,首先将ie的安全级别调整到高,然后在网络上进行查找,不要去任何不明站点下载,尽量选择如华军、天空等大型网站进行下载,下载后确保当前杀毒软件已升级到最新版本,升级完毕后对下载的软件进行一次杀毒,确认正常后方能使用。对于下载的新工具对以后维护需要使用的话,将该工具保存到e:tools下,并在该目录中的readme.txt文件中做好相应记录,记录该工具的名称,功能,使用方法。并且在该文件夹中的rar文件夹中保留一份该工具的winrar压缩文件备份,设置解压密码。

3.服务器的数据备份工作,每服务器至少保证每月备份一次系统数据,系统备份采用ghost方式,对于ghost文件固定存放在e:ghost文件目录下,文件名以备份的日期命名,如0824.gho,每服务器至少保证每两周备份一次应用程序数据,每服务器至少保证每月备份一次用户数据,备份的数据固定存放在e:databak文件夹,针对各种数据再建立对应的子文件夹,如serv-u用户数据放在该文件夹下的servu文件夹下,iis站点数据存放在该文件夹下的iis文件夹下。

4.服务器的监控工作,每天正常工作期间必须保证监视所有服务器状态,一旦发现服务停止要及时采取相应措施。对于发现服务停止,首先检查该服务器上同类型的服务是否中断,如所有同类型的服务都已中断及时登陆服务器查看相关原因并针对该原因尝试重新开启对应服务。

5.服务器的相关日志操作,每服务器保证每月对相关日志进行一次清理,清理前对应的各项日志如应用程序日志、安全日志、系统日志等都应选择“保存日志”。所有的日志文件统一保存在e:logs下,应用程序日志保存在e:logsapp中,系统程序日志保存在e:logssys中,安全日志保存在e:logssec中。对于另外其他一些应用程序的日志,也按照这个方式进行处理,如ftp的日志保存在e:logsftp中。所有的备份日志文件都以备份的日期命名,如20050824.evt。对于不是单文件形式的日志,在对应的记录位置下建立一个以日期命名的文件夹,将这些文件存放在该文件夹中。

6.服务器的补丁修补、应用程序更新工作,对于新出的漏洞补丁,应用程序方面的安全更新一定要在发现的第一时间给每服务器打上应用程序的补丁。

7.服务器的隐患检查工作,主要包括安全隐患、性能等方面。每服务器必须保证每月重点的单独检查一次。每次的检查结果必须做好记录。

8.不定时的相关工作,每服务器由于应用软件更改或其他某原因需要安装新的应用程序或卸载应用程序等操作必须知会所有管理员。

9.定期的管理密码更改工作,每服务器保证至少每两个月更改一次密码,对于sql服务器由于如果sql采用混合验证更改系统管理员密码会影响数据库的使用则不予修改。

相关建议:对每服务器设立一个服务器管理记载,管理员每次登陆系统都应该在此中进行详细的记录,共需要记录以下几项:登入时间,退出时间,登入时服务器状态[包含不明进程记录,端口连接状态,系统帐号状态,内存/cpu状态],详细操作情况记录[详细记录下管理员登陆系统后的每一步操作]。无论是远程登陆操作还是物理接触操作都要进行记录,然后将这些记录按照各服务器归档,按时间顺序整理好文档。

对于数据备份、服务器定时重启等操作建议将服务器分组,例如分成四组,每月的周六晚备份一组服务器的数据,每周的某一天定时去重启一组的服务器,这样对于工作的开展比较方便,这些属于固定性的工作。另外有些工作可以同步进行,如每月一次的数据备份、安全检查和管理员密码修改工作,先进行数据备份,然后进行安全检查,再修改密码。对于需要的即时操作如服务器补丁程序的安装、服务器不定时的故障维护等工作,这些属于即时性的工作,但是原则上即时性的工作不能影响固定工作的安排。

管理员日常注意事项

在服务器管理过程中,管理员需要注意以下事项:

1.对自己的每一次操作应做好详细记录,具体见上述建议,以便于后来检查。

2.努力提高自身水平,加强学习。

Tags:,,ZOUBIN.COM

No responses yet

十二 26 2007

忘记mysql的密码 5.0.45forwin32版本

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

从网上查找了相关文档,发现根据mysql版本的不同,恢复方法也不尽相同,看来mysql确实是个复杂的家族,版本问题确实很让人头疼,不过好在已经处理完毕,我用的是5.0.45forwin32版本,以下是我的恢复过程,其实真正恢复起来也很简单,只要走对路:

1 net stop mysql 
2 mysqld-nt –skip-grant-tables
3 open new window , mysql -u root
4 update mysql.user set passWord=passWord (‘kiss’) where User=’root’;
5 flush privileges; 
6 quit;
在这一步之后,如果直接执行第7步将会出现mysql启动错误的提示,原因是mysql目录下面的.err文件被锁定,删除这些文件即可,推荐使用unlock工具
7 net start mysql

No responses yet

十二 26 2007

MySQL数据库中部分数据损坏的恢复

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

前几天因为MySQL数据库部分数据损坏原因,我尝试了下恢复数据,之后整理以下文档,供各位参考,以备各位同事以后如有类似问题,可以少走些弯路,尽快解决问题。

环境:Windows2003

数据库:MySQL

损坏数据文件名:function_products

将数据库内容物理文件直接导入到mysql\data下,每只表各3个文件,依次分别为:.frm .myd .myi。首先我第一想到的是去网上搜索,寻找类似的工具,试图通过工具来恢复已损坏的文件,于是我在google上查找,找到一款名为mysqlrecovery的工具,安装后我用其进行恢复,只可惜效果太不理想,几十MB大的数据文件,恢复之后它提示我竟然只有几十KB。我又想到了MySQL下应有自己本身的修复程序等,于是想通过其来进行恢复,心想应不会太差劲吧,在网上查找了资料,提示:由于临时断电,使用kill -9中止MySQL服务进程,或者是MySQL正在高速运转时进行强制备份操作时等,所有的这些都可能会毁坏MySQL的数据文件。如果在被干扰时,服务正在改变文件,文件可能会留下错误的或不一致的状态。因为这样的毁坏有时是不容易被发现的,当你发现这个错误时可能是很久以后的事了。

于是,当你发现这个问题时,也许所有的备份都有同样的错误。我想我现在碰到的问题可能是这个问题,因为备份的数据也是有部分损坏的数据,所以导致不能完全运行, 意识到myisamchk程序对用来检查和修改的MySQL数据文件的访问应该是唯一的。如果MySQL服务正在使用某一文件,并对myisamchk正在检查的文件进行修改,myisamchk会误以为发生了错误,并会试图进行修复–这将导致MySQL服务的崩溃!这样,要避免这种情况的发生,通常我们需要在工作时关闭MySQL服务。作为选择,你也可以暂时关闭服务以制作一个文件的拷贝,然后在这个拷贝上工作。当你做完了以后,重新关闭服务并使用新的文件取代原来的文件(也许你还需要使用期间的变更日志)。

MySQL数据目录不是太难理解的。每一个数据库对应一个子目录,每个子目录中包含了对应于这个数据库中的数据表的文件。每一个数据表对应三个文件,它们和表名相同,但是具有不同的扩展名。tblname.frm文件是表的定义,它保存了表中包含的数据列的内容和类型。tblname.myd文件包含了表中的数据。tblname.myi文件包含了表的索引(例如,它可能包含lookup表以帮助提高对表的主键列的查询)。 要检查一个表的错误,只需要运行myisamchk(在MySQL的bin目录下)并提供文件的位置和表名,或者是表的索引文件名:

% myisamchk /usr/local/mysql/var/dbname/tblname
% myisamchk /usr/local/mysql/var/dbname/tblname.myi

上面的两个命令都可以执行对指定表的检查。要检查数据库中所有的表,可以使用通配符:

% myisamchk /usr/local/mysql/var/dbname/*.myi

要检查所有数据库中的所有表,可以使用两个通配符:

% myisamchk /usr/local/mysql/var/*/*.myi

如果不带任何选项,myisamchk将对表文件执行普通的检查。如果你对一个表有怀疑,但是普通的检查不能发现任何错误,你可以执行更彻底的检查(但是也更慢!),这需要使用–extend-check选项:

% myisamchk –extend-check /path/to/tblname

对错误的检查是没有破坏性的,这意味着你不必担心执行对你的数据文件的检查会使已经存在的问题变得更糟。另一方面,修复选项,虽然通常也是安全的,但是它对你的数据文件的更改是无法撤消的。因为这个原因,我们强烈推荐你试图修复一个被破坏的表文件时首先做个备份,并确保在制作这个备份之前你的MySQL服务是关闭的。

我在Win2003下通过命令提示符,输入:

注:此为记录我当时操作的全部过程
d:\documents and settings\administrator>c:
c:\>cd MySQL
c:\mysql>cd data
c:\mysql\data>cd hw_enterprice
c:\mysql\data\hw_enterprice>myisamchk function_products.frm
'myisamchk' 不是内部或外部命令,也不是可运行的程序或批处理文件。
c:\mysql\data\hw_enterprice>cd\
c:\>cd mysql
c:\mysql>cd bin
注:查看myisamchk的帮助信息
c:\mysql\bin>myisamchk
myisamchk  ver 2.6 for win95/win98 at i32
by monty, for your professional use
this software comes with no warranty: see the public for details.

description, check and repair of isam tables. used without options all tables on the command will be checked for errors usage: myisamchk [options] tables[.myi]

global options: -#, --debug=...     output debug log. often this is 'd:t:o,filename' -?, --help          display this help and exit. -o, --set-variable var=option change the value of a variable. please note that this option is deprecated; you can set variables directly with '--variable-name=value'. -t, --tmpdir=path   path for temporary files -s, --silent        only print errors.  one can use two -s to make myisamchk very silent -v, --verbose       print more information. this can be used with --description and --check. use many -v for more verbosity!

  -v, --version       print version and exit. -w, --wait          wait if table is locked.

check options (check is the default action for myisamchk): -c, --check         check table for errors -e, --extend-check  check the table very throughly.  only use this in extreme cases as myisamchk should normally be able to find out if the table is ok even without this switch -f, --fast          check only tables that haven't been closed properly -c, --check-only-changed check only tables that have changed since last check -f, --force         restart with '-r' if there are any errors in the table. states will be updated as with '--update-state' -i, --information   print statistics information about table that is checked -m, --medium-check  faster than extend-check, but only finds 99.99% of all errors.  should be good enough for most cases -u  --update-state  mark tables as crashed if you find any errors -t, --read-only     don't mark table as checked

repair options (when using '-r' or '-o') -b, --backup        make a backup of the .myd file as 'filename-time.bak' --correct-checksum  correct checksum information for table. -d, --data-file-length=#  max length of data file (when recreating data file when it's full) -e, --extend-check  try to recover every possible row from the data file normally this will also find a lot of garbage rows; don't use this option if you are not totally desperate. -f, --force         overwrite old temporary files. -k, --keys-used=#   tell myisam to update only some specific keys. # is a bit mask of which keys to use. this can be used to get faster inserts! -r, --recover       can fix almost anything except unique keys that aren't unique. -n, --sort-recover  forces recovering with sorting even if the temporary file would be very big. -p, --parallel-recover uses the same technique as '-r' and '-n', but creates all the keys in parallel, in different threads. this is alpha code. use at your own risk! -o, --safe-recover  uses old recovery method; slower than '-r' but can handle a couple of cases where '-r' reports that it can't fix the data file. --character-sets-dir=... directory where character sets are --set-character-set=name change the character set used by the index -q, --quick         faster repair by not modifying the data file. one can give a second '-q' to force myisamchk to modify the original datafile in case of duplicate keys -u, --unpack        unpack file packed with myisampack.

other actions: -a, --analyze       analyze distribution of keys. will make some joins in MySQL faster.  you can check the calculated distribution by using '--description --verbose table_name'. -d, --description   prints some information about table. -a, --set-auto-increment[=value] force auto_increment to start at this or higher value if no value is given, then sets the next auto_increment value to the highest used value for the auto key + 1. -s, --sort-index    sort index blocks.  this speeds up 'read-next' in applications -r, --sort-records=# sort records according to an index.  this makes your data much more localized and may speed up things c:\mysql\bin>myisamchk c:\mysql\data\hw_enterprice\function_products.frm myisamchk: error: 'c:\mysql\data\hw_enterprice\function_products.frm' is not a m yisam-table

c:\mysql\bin>myisamchk c:\mysql\data\hw_enterprice\function_products.myi checking myisam file: c:\mysql\data\hw_enterprice\function_products.myi data records:   85207   deleted blocks:      39 myisamchk: warning: table is marked as crashed myisamchk: warning: 1 clients is using or hasn't closed the table properly - check file-size - check key delete-chain - check record delete-chain myisamchk: error: record delete-link-chain corrupted - check index reference - check data record references index: 1 - check data record references index: 2 - check data record references index: 3 - check record links myisamchk: error: wrong bytesec: 0-195-171 at linkstart: 841908 myisam-table 'c:\MySQL\data\hw_enterprice\function_products.myi' is corrupted fix it using switch "-r" or "-o"

继续进行操作:

c:\MySQL\bin>myisamchk --recover --quick  c:\MySQL\data\hw_enterprice\function_p roducts.myi - check key delete-chain - check record delete-chain myisamchk: error: record delete-link-chain corrupted myisamchk: error: quick-recover aborted; run recovery without switch 'q' updating myisam file: c:\MySQL\data\hw_enterprice\function_products.myi myisam-table 'c:\MySQL\data\hw_enterprice\function_products.myi' is not fixed be cause of errors try fixing it by using the --safe-recover (-o) or the --force (-f) option

系统提示我使用–safe-recover (-o) or the –force (-f) option进行修复操作,于是:

c:\MySQL\bin>myisamchk --safe-recover  c:\MySQL\data\hw_enterprice\function_prod
ucts.myi
- recovering (with keycache) myisam-table 'c:\MySQL\data\hw_enterprice\function_
products.myi'
data records: 85207
wrong bytesec:   0-195-171 at     841908; skipped
data records: 85215

将修复后的物理文件复制到mysql\data下之后,通过phpmyadmin进行访问,正常!本次数据修复操作成功,数据已被正常恢复,总计85215条记录,其中恢复数据共计85207条。

总结本次经验及查找资料,如下:

当你试图修复一个被破坏的表的问题时,有三种修复类型。如果你得到一个错误信息指出一个临时文件不能建立,删除信息所指出的文件并再试一次–这通常是上一次修复操作遗留下来的。

这三种修复方法如下所示:

% myisamchk –recover –quick /path/to/tblname
% myisamchk –recover /path/to/tblname
% myisamchk –safe-recover /path/to/tblname

第一种是最快的,用来修复最普通的问题;而最后一种是最慢的,用来修复一些其它方法所不能修复的问题。

如果上面的方法无法修复一个被损坏的表,在你放弃之前,你还可以试试下面这两个技巧:

如果你怀疑表的索引文件(*.myi)发生了不可修复的错误,甚至是丢失了这个文件,你可以使用数据文件(*.myd)和数据格式文件(*.frm)重新生成它。首先制作一个数据文件(tblname.myd)的拷贝。重启你的MySQL服务并连接到这个服务上,使用下面的命令删除表的内容:

MySQL> delete from tblname;

在删除表的内容的同时,会建立一个新的索引文件。退出登录并重新关闭服务,然后用你刚才保存的数据文件(tblname.myd)覆盖新的(空)数据文件。最后,使用myisamchk执行标准的修复(上面的第二种方法),根据表的数据的内容和表的格式文件重新生成索引数据。

如果你的表的格式文件(tblname.frm)丢失了或者是发生了不可修复的错误,但是你清楚如何使用相应的create table语句来重新生成这张表,你可以重新生成一个新的.frm文件并和你的数据文件和索引文件(如果索引文件有问题,使用上面的方法重建一个新的)一起使用。首先制作一个数据和索引文件的拷贝,然后删除原来的文件(删除数据目录下有关这个表的所有记录)。

启动MySQL服务并使用当初的create table文件建立一个新的表。新的.frm文件应该可以正常工作了,但是最好你还是执行一下标准的修复(上面的第二种方法)。

如果有类似问题,建议自己先分析问题根源,查找资料,自己动手解决,不但可以多学更多知识技巧,更重要的是,自己也在解决问题的同时得到了快乐。

No responses yet

十二 26 2007

MySQL数据库的管理操作

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

谁能连接,从那儿连接?

你可以允许一个用户从特定的或一系列主机进行连接。有一个极端,如果你想要只从一个主机连接,你可以将权限局限于单个主机:

GRANT ALL ON samp_db.* TO boris@localhost
IDENTIFIED BY "ruby"GRANT ALL ON samp_db.*
TO fred@res.mars.com IDENTIFIED BY "quartz"

(samp_db.*意思是“samp_db数据库的所有表)另一个极端是,你可能有一个经常旅行并需要能从世界各地的主机连接的用户max。在这种情况下,你可以允许他无论从那里连接:

GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond"

“%”字符起通配符作用,与LIKE模式匹配的含义相同。在上述语句中,它意味着“任何主机”。所以max和max@%等价。这是建立用户最简单的方法,但也是最不安全的。

取其中,你可以允许一个用户从一个受限的主机集合访问。例如,要允许mary从snake.net域的任何主机连接,用一个%.snake.net主机指定符:

GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";

如果你喜欢,用户标识符的主机部分可以用IP地址而不是一个主机名来给定。你可以指定一个IP地址或者一个包含模式字符的地址,而且,从MySQL 3.23,你还可以指定具有指出用于网络号的位数的网络掩码的IP号:

GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby" 
GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz" 
GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"

第一个例子指出用户能从其连接的特定主机,第二个指定对于C类子网192.168.128的IP模式,而第三条语句中,192.168.128.0/17指定一个17位网络号并匹配具有192.168.128头17位的IP地址。

如果MySQL抱怨你指定的用户值,你可能需要使用引号(只将用户名和主机名部分分开加引号)。

GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"

用户应该有什么级别的权限和它们应该适用于什么?

你可以授权不同级别的权限,全局权限是最强大的,因为它们适用于任何数据库。要使ethel成为可做任何事情的超级用户,包括能授权给其它用户,发出下列语句:

GRANT ALL ON *.* TO ethel@localhost
IDENTIFIED BY "coffee" WITH GRANT OPTION

ON子句中的*.*意味着“所有数据库、所有表”。从安全考虑,我们指定ethel只能从本地连接。限制一个超级用户可以连接的主机通常是明智的,因为它限制了试图破解口令的主机。

有些权限(FILE、PROCESS、RELOAD和SHUTDOWN)是管理权限并且只能用”ON *.*”全局权限指定符授权。如果你愿意,你可以授权这些权限,而不授权数据库权限。例如,下列语句设置一个flush用户,他只能发出flush语句。这可能在你需要执行诸如清空日志等的管理脚本中会有用:

GRANT RELOAD ON *.* TO flushl@localhost IDENTIFIED BY "flushpass"

一般地,你想授权管理权限,临界点,因为拥有它们的用户可以影响你的服务器的操作。

数据库级权限适用于一个特定数据库中的所有表,它们可通过使用ON db_name.*子句授予:

GRANT ALL ON samp_db TO bill@racer.snake.net
INDETIFIED BY "rock" GRANT SELECT ON samp_db
TO ro_user@% INDETIFIED BY "rock"

第一条语句向bill授权samp_db数据库中所有表的权限,第二条创建一个严格限制访问的用户ro_user(只读用户),只能访问samp_db数据库中的所有表,但只有读取,即用户只能发出SELECT语句。

你可以列出一系列同时授予的各个权限。例如,如果你想让用户能读取并能修改现有数据库的内容,但不能创建新表或删除表,如下授予这些权限:

GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db TO bill@snake.net INDETIFIED BY "rock"

对于更精致的访问控制,你可以在各个表上授权,或甚至在表的每个列上。当你想向用户隐藏一个表的部分时,或你想让一个用户只能修改特定的列时,列特定权限非常有用。如:

GRANT SELECT ON samp_db.member TO bill@localhost
INDETIFIED BY "rock"GRANT UPDATE (expiration) ON
samp_db. member TO bill@localhost

第一条语句授予对整个member表的读权限并设置了一个口令,第二条语句增加了UPDATE权限,当只对expiration列。没必要再指定口令,因为第一条语句已经指定了。

如果你想对多个列授予权限,指定一个用逗号分开的列表。例如,对assistant用户增加member表的地址字段的UPDATE权限,使用如下语句,新权限将加到用户已有的权限中:

GRANT UPDATE (street,city,state,zip) ON samp_db TO assistant@localhost

通常,你不想授予任何比用户确实需要的权限宽的权限。然而,当你想让用户能创建一个临时表以保存中间结果,但你又不想让他们在一个包含他们不应修改内容的数据库中这样做时,发生了要授予在一个数据库上的相对宽松的权限。你可以通过建立一个分开的数据库(如tmp)并授予开数据库上的所有权限来进行。例如,如果你想让来自mars.net域中主机的任何用户使用tmp数据库,你可以发出这样的GRANT语句:GRANT ALL ON tmp.* TO “”@mars.net。

在你做完之后,用户可以创建并用tmp.tbl_name形式引用tmp中的表(在用户指定符中的”"创建一个匿名用户,任何用户均匹配空白用户名)。

用户应该被允许管理权限吗?

第一步:

你可以允许一个数据库的拥有者通过授予数据库上的所有拥有者权限来控制数据库的访问,在授权时,指定WITH GRANT OPTION。例如:如果你想让alicia能从big.corp.com域的任何主机连接并具有sales数据库中所有表的管理员权限,你可以用如下GRANT语句:

GRANT ALL ON sales.* TO alicia@%.big.corp.com
INDETIFIED BY "applejuice" WITH GRANT OPTION

在效果上WITH GRANT OPTION子句允许你把访问授权的权利授予另一个用户。要注意,拥有GRANT权限的两个用户可以彼此授权。如果你只给予了第一个用户SELECT权限,而另一个用户有GRANT加上SELECT权限,那么第二个用户可以是第一个用户更“强大”。

第二步:

撤权并删除用户,要取消一个用户的权限,使用REVOKE语句。REVOKE的语法非常类似于GRANT语句,除了TO用FROM取代并且没有INDETIFED BY和WITH GRANT OPTION子句:

REVOKE privileges (columns) ON what FROM user

user部分必须匹配原来GRANT语句的你想撤权的用户的user部分。privileges部分不需匹配,你可以用GRANT语句授权,然后用REVOKE语句只撤销部分权限。

REVOKE语句只删除权限,而不删除用户。即使你撤销了所有权限,在user表中的用户记录依然保留,这意味着用户仍然可以连接服务器。要完全删除一个用户,你必须用一条DELETE语句明确从user表中删除用户记录:

%mysql -u root mysqlmysql>DELETE FROM user
->WHERE User="user_name" and Host="host_name";
mysql>FLUSH PRIVILEGES;

DELETE语句删除用户记录,而FLUSH语句告诉服务器重载授权表。(当你使用GRANT和REVOKE语句时,表自动重载,而你直接修改授权表时不是。)

No responses yet

十二 26 2007

Mysql数据的修复

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

有的时候因为掉电或者其他原因导致数据库损坏,我们可以使用mysql自带的mysqlcheck命令来快速修复所有的数据库或者特定的数据库;例如
检查优化并修复所有的数据库用:
# mysqlcheck -A -o -r -p
Enter password:
guestbook.simpgb_avatars OK
guestbook.simpgb_bad_words OK
guestbook.simpgb_banlist OK
guestbook.simpgb_data OK
……
……
……
修复指定的数据库用
# mysqlcheck -A -o -r Database_NAME -p
即可

Tags:,ZOUBIN.COM

No responses yet

十二 26 2007

备份和拷贝MYSQL数据库的另一种方法

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

 

重要的是在表丢失和毁坏时备份数据库。如果系统发生崩溃,您就能够将表恢复到崩溃时刻的状态,并尽可能不丢失数据。同样,错发DROP DATABASE 或DROP TABLE 命令的用户可能会向您请求进行数据恢复。有时,这是由MySQL管理员引起的破坏,管理员试图通过使用像vi 或emacs 这样的编辑器直接编辑表文件而毁坏了它们。这样做对表来说肯定是干了坏事。

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

mysqldump与MySQL服务器联合进行操作。直接拷贝方法与服务器相脱离,因此必须采取措施确保在进行拷贝时没有客户机在修改这些表。这个问题与利用文件系统备份来备份数据库的问题相同:如果数据库表在文件系统备份时进行更新,则进行备份的表文件处于非一致的状态,并且对于今后恢复该表没有意义。文件系统备份和直接拷贝文件的区别是:对于后者,您具有控制备份进度的权利,因此可以采取措施确保服务器使表处于静止状态。

mysqldump比直接拷贝技术要慢

mysqldump产生可移植到其他机器、甚至具有不同硬件结构的机器上的文本文件。直接拷贝文件不能够移植到其他机器上,除非要拷贝的表使用MyISAM存储格式。ISAM 表只能在具有相同硬件结构的机器之间进行拷贝。例如,将文件从SPARC 的Solaris 机器拷贝到Intel的Solaris 机器(或者相反)是行不通的。由MySQL3.23 引进的MyISAM表存储格式可以解决这个问题,因为该格式与机器独立。因此,如果以下两个条件都满足的话,直接拷贝文件可以移植到具有不同硬件结构的机器上:即另一台机器上也必须运行MySQL3.23以上的版本,并且文件必须表示成MyISAM 表,而不是ISAM 表。

不论选择哪种备份方法,都有某些原则,您必须坚持这些原则,才能确保在需要恢复数据库内容时得到最好的结果:

定期执行备份。设置一个时间表并坚持使用它。告诉服务器运行更新日志。更新日志在您需要恢复崩溃后的数据库时给予帮助。在使用备份文件将数据库恢复到备份时刻的状态后,可以通过运行更新日志中的查询,重新运行备份之后所做的改变。这个操作将数据库中的表恢复到了崩溃时刻的状态。在文件系统备份语言中,数据库备份文件表示完全转储(full dump),而更新日志则表示增量转储。使用一致和可理解的备份文件命名模式。像b a c k up 1、backup2 等名字没有特殊的含义。当需要它执行恢复时,还得浪费时间去查看文件中的内容。您会发现使用数据库名和花时间去构造备份文件名是有好处的。例如:

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

在产生备份文件后您可能需要将它们压缩。毕竟备份文件都比较大,所以您可能还需要终止备份文件以避免它们填满磁盘,这与终止日志文件类似。您可以用相同的技术终止备份文件:

用文件系统备份来备份您的备份文件。如果您遭受了一个完全崩溃,不仅毁坏了数据目录而且还破坏了包含数据库备份的磁盘驱动器,那将造成真正的麻烦。您还应该备份更新日志。

将备份文件放在与您的数据库不同的文件系统上。这将减少含有数据字典的文件系统被生成的备份文件填满的可能性。

创建备份的技术对于将数据库拷贝到另一个服务器上也是很有帮助的。将数据库转移到运行在另一个主机上的服务器是很平常的,但您还可以将数据转移到运行在相同主机上的另一个服务器。如果正为一个新版本的MySQL运行服务器,并且想用成品服务器上的某些真实数据来测试它时,可能会这样做。还有一种可能,那就是您得到了一台新的机器并要将所有的数据库移动到新机器上。

用mysqldump 备份和拷贝数据库

当使用mysqldump 程序产生数据库备份文件时,缺省设置是该文件的内容由CREATE TABLE语句组成,这些语句创建被转储的表以及包含表中的行数据的INSERT 语句。换句话说,mysqldump创建在今后可作为对mysql的输入使用的输出结果,以重建数据库。

可以将整个数据库按以下命令转储到单独的文本文件中:

该文件的其余部分由更多的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 > gradebook.sql % mysqldump samp_db member president > hist-league.sql

如果您正在生成备份文件并打算用这些备份文件来定期刷新另一个数据库的内容,则可能要使用–add-drop-table选项。此选项告诉mysqldump 将DROP TABLE IF EXISTS语句写到备份文件中。然后,当您取出该备份文件并将其加载到第二个数据库时,如果表已经存在将不会出现错误信息。如果您正在运行第二个数据库,可使用此技术利用从第一个数据库中的数据拷贝来定期地加载它。

如果您正在转储数据库使该数据库可以转换到另一个服务器上,则无须创建备份文件。应确保该数据库存在于另一台主机上,然后用一个管道使mysql直接读取mysqldump的输出结果来转储数据库。例如,如果想要将samp_db 数据库从pit_viper.snake.net 拷贝到boa.snake.net,操作如下:

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

 

稍后,如果想要在boa.snake.net 中再次刷新该数据库,可跳过mysqladmin 命令,但要将–add-drop-table增加到mysqldump 中,以避免得到有关“表已经存在”的错误:

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

mysqldump 的其他选项包括如下所示的几个:

–flush-log 和–lock-tables 的结合有助于检查数据库。–lock-table锁定所有正在转储的表,而–flush-log关闭并重新打开更新日志文件。如果正在产生后续的更新日志,则新的更新日志将只包含从备份的那一点开始修改数据库的查询。这时检查对于该备份时间的更新日志的检查点(然而,锁定所有的表对于备份期间客户机访问来说不太好,如果您有需要执行更新操作的客户机的话)。

如果用–flush-logs检查对于备份时间的更新日志检查点,最好转储整个数据库。如果转储单个文件,则将更新日志的检查点与备份文件同步是比较难的。在恢复操作中,您通常在总数据库(per- database)的基础上抽取更新日志的内容。对于抽取单个表的更新日志来说没有选项,因此您必须自己抽取它们。

缺省设置时,mysqldump将表的全部内容在写之前读到内存中。这实际上不是必须的,事实上,如果您真的有大型表的话,这几乎是一个失败的方法。可以用–quick选项告诉mysqldump 写每一行(只要是被检索的)。要想进一步优化该转储过程,可用- – opt来代替- – quick。– opt 选项开启其他的选项,这些选项将加快转储数据和读回数据的速度。由于快速备份的好处,使得用–opt 执行备份成为最常用的方法。但是,要当心, – -opt 选项有一个代价: –opt所优化的是您的备份过程,而不是由其他客户机对数据库的访问。–opt 选项可防止任何人更新被锁定的正在转储的任何表。您会很容易地发现在常规数据库访问中在这一点上所做的努力。试着在一天中数据库通常最繁忙的时刻运行一个备份。这不会花费太多的时间。

与–opt 作用有点相反的选项是- delayed。该选项导致mysqldump 写INSERT DELAYED语句而非INSERT语句。如果您将一个数据文件加载到另一个数据库中并且想要使该操作对其他查询(这些查询可能正在数据库中发生)造成的影响最小,则- -delayed将有助于达到这个目的。

–compress选项有助于将数据库拷贝到另一台机器上,因为它可以减少网络传输中的字节数量。这里有一个例子,请注意,为了使程序与远程主机上的服务器进行通信(而不是与本地主机通信),给出了–compress选项:

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

mysqldump 有许多选项,详细信息请参考附录E。

使用直接拷贝数据库备份和拷贝方法不用mysqldump 来备份数据库或表的另一种方法是直接拷贝表文件。通常可利用像cp、tar 或cpio这样的实用程序来进行。本节的例子使用的是c p。

使用直接拷贝备份(direct-copy backup)方法时,必须确保没有使用这些表。如果在拷贝一个表的同时服务器正在修改它,则拷贝无效。

确保拷贝完整性的最好方法是关闭服务器,拷贝文件,然后重新启动服务器。如果不想关闭服务器,则应参考第13章,查阅有关在执行表检查点时锁定服务器的介绍。如果服务器在运行中,则相同的约束都适用于拷贝文件,您应该用同样的锁定协议使服务器保持静止状态。

假定服务器关闭,或者已经锁定了想要拷贝的表,下面的例子将说明怎样将整个samp_db 数据库备份到备份目录中( DATADIR代表服务器的数据目录):

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

单个表可按如下进行拷贝:

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

当完成备份时,可以重新启动服务器(如果已使它关闭),或者释放在表上施加的锁(如果保持服务器运行)。要想用直接拷贝文件将数据库从一台机器拷贝到另一台机器,只要将这些文件拷贝到另一台服务器主机上的相应数据库上即可。应确保这些文件是对MyISAM表的或者两台机器都有相同的硬件结构。否则这些表在第二个主机上看起来好象有很奇怪的内容。还应该确保第二台主机的服务器不会在您安装这些表时去访问它们。

复制数据库

术语“复制”的含义简单地说有点像“拷贝数据库到另一个服务器”,或者是包含在主数据库的内容发生变化时次数据库的有效更新(live updating)的含义。如果想简单地将数据库拷贝到另一个服务器上,则可以使用在前面已经讨论的那些命令。自MySQL3.23版本以来,就已经开始出现对基于有效更新的复制的支持。但它的功能仍未成熟,因此,在这方面笔者没有什么可讨论的,如果有兴趣,您可以注意一下当前的新版本,看看有些什么新的开发功能。

Tags:,,ZOUBIN.COM

No responses yet

十二 26 2007

Mysql的备份与恢复

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Sql

在数据库表丢失或损坏的情况下,备份你的数据库是很重要的。如果发生系统崩溃,你肯定想能够将你的表尽可能丢失最少的数据恢复到崩溃发生时的状态。有时,正是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 structure 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_dbmysqldump有很多选项,详见《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实用程序对此很有帮助,它从更新日志中提取多行查询。
另一个可能性是使用另一台服务器恢复整个数据库,然后拷贝你想要的表文件到原数据库中。这可能真的很容易!当你将文件拷回数据库目录时,要确保原数据库的服务器关闭。

No responses yet

十二 26 2007

到底怎样来做搜素Seo优化

Published by 再苦也要微笑 at 星期三, 十二月 26, 2007 under Seo

什么叫优化?讲的白话一点,那就是利用自己站点的相关资源去换取搜索的好感而获得很好的反馈流量。现在网络上充斥着各种各样的教程和优化心得。都有可取之处,但往往和多新手朋友看了以后又觉得很茫然。无从下手。狐狸今天就从自己的站点的优化方式来谈谈搜索优化到底是个什么东西。本文所谈优化只针对中文搜索引擎百度,文章仅供讨论研究,无任何学术见解。欢迎更多朋友一起讨论。

  第一篇:域名选择和目录分层

  有看官问:选择一个域名还能对搜索有啥影响啊?反正域名能用就行了,管那么多干啥。看看,错了吧,欲攻其害必先谋器,道理很简单,想攻击得到想要的,必须要获得一件好的利器,没有好的利器做起事情来肯定就会慢半拍。本人理解,ORG,NET,COM等域的搜索收录权重比CN要好的多。业内消息人士透露,CN域名现在搜索采用的是人工审核制,来个新的,先要见见人,而不是机器,所以,CN域名收录的很慢很慢。慢到连自己都不能接受的程度。有人看到这里,就会喊:你丫的就纯忽悠吧,我的域名是CN的,怎么收录那么快?您这不是废话吗?凡事无绝对,就连下的雪都没有一片一样的,你又怎么去乞求完美那?所以那,域名选择上,最好选择COM类型的。关于域名长度问题,你有经济基础的,那就往好里买,没有的,那就尽量控制在五位以内,拼音或单词最好,找不到拼音或单词的,那混合型的最好是常见词组,不推荐杂和型的域名。

  目录分层这个东西说大可大,说小可小,大里说,那可以写出本书,小里说,也就是几十个字,咱又不准备写书赚钱,咱就简单点的说,分层遵守个原则:有序,精简。能一层办下来的,咱就一层办,不要分到二层目录三层目录,越往下越收录不到,这是真理,这里也扫下盲,一层目录就是www.zzchn.com 这样的,也可以说叫根目录,二层那,就是在www.zzchn.com 下增加个www.zzchn.com/news 这样的。是不是很简单?本来他就不太复杂。三层,那就是news/news这样。目录命名最好使用拼音或热门单词,这样有助于搜索识别。如果你偏要问我为什么,那我这能笑笑的说,请看开头声明。

  第二篇:站点选择和语言类型

  域名咱选择好了,目录分层也想好了,那么,下面缺了点什么那?哦,对了,没空间,咱怎么做站?不知道做什么站,光个域名有啥用,旁边有人看的不耐烦了,喊到:唉!你这人,怎么老说废话?没办法,我就这么罗嗦,对不起对不起。怎么去选择空间这个咱就不用在这教了,大家可以百度下,很多相关的选择技巧,实在不明白的,你也可以问我,我来告诉你怎么选,我们现在要说的,就是怎么在一个稳定,高速的空间上做站,前提条件必须满足,不然,您买个空间,10天有9天不能访问,除非李总是您家人,不然,神也救不了你。选择空间的时候,最起码要知道这台服务器上有多少个站,IP有没有被搜索处罚,有没有屏蔽了蜘蛛抓取等简单问题。这些,可以翻翻我以前的文章,有提过。实在找不到,你加我,我来告诉你。

  一般来讲,搜索喜欢原创性的内容,什么是原创性?就是搜索以前从不曾接触过的就叫原创。这个很奇怪,反正他不管你是哪来的,只要是他没见过的,都是叫原创。这就好办了,也就能明白为什么博客类的站点在百度权重上那么高的等级了。做站,可以掌控的范围很广,只要是和谐的,健康的,都可以去做,都能去做。一般建议做点热门的站。又有所谓的专家反驳了,我们专家都建议做冷门的,你到好,哪里人多你叫我们往哪里死。只不是明知道前面是死路,你还叫咱们往下跳吗?呵呵,难道你不明白绝处逢生的道理吗?满岛不穿鞋的,难道就没有市场了?就算全部有鞋了,难道就不需要其他种类的鞋了?做热门,不是说做最新最流行,流行多了去了,你跟的过来吗?在说了,咱这是讲搜索是个什么东西,而不是讲站点选择运营,所以,只能简单点概况,不然就喧宾夺主了。不管什么站,不管做什么,都是有市场份额的。关键问题是:你怎么做。怎么做?下期的《运营到底是个什么东西》里会告诉你。下面讲讲站点语言选择。总体来讲,动态的没有静态的效果好,ASP,PHP,ASPX,JSP等等的语言结构永远没有.HTM,.HTML,SHTML效果来的好。最好选择就是全站静态化。至于为什么,百度下,你就知道。

  第三篇:站点TITLE、META制作 版权尾部处理

  有人说,META已经是落伍的优化技巧了。搜索不重视也看不起META,谁说的?反正搜索没有说。先来说说TITLE,搜索最看重的其实也就是开头和结尾。我想到了这个的开头,可怎么也看不到结尾。好经典的爱情故事,标题最好长度是多少?120个字符以内的都可以。合计60个汉字。一般一个词使用一个标点隔开。至于什么是标点,这个问题有很多人在争议。给个很好的理解,凡是空格了的非字母,非汉字的都可以作为标点来分割关键词,常用的一般是冒号,或空格,也有使用其他方式的,选择标点建议使用大家不常用的,比如“、”号。当然,如果你选择使用省略号,我也不反对。你可以实验下,我看好你哦。什么?关键词密度?那要看你怎么理解了。没有收录的站,一上来就来个40%的密度,你不死谁死?权重稳定的站,你弄个50%,也不会死。对了,想到了吧?凡事得讲个策略。建议新站点密度不要超过4%,抱怨太少?又错了吧,以后等权重上来了,咱在加不就可以了?META的问题,一般来讲,新的站点的META还是有作用的,参考下TITLE制作。谈到版权尾部处理,这个说起来咱也小了说,大了,咱又要卖书了。做到四个字就可以了。头尾呼应。有头有尾才好发展嘛。关于怎么头尾呼应,咱如果还有时间,专门就会说这事。留点悬念在这里,不然,下次还怎么写文章那?您说对不?

  第四篇:频道规划和内容处理

  有很多朋友都在讲优化,单纯的累积关键词已经没有效果了,弄个非主流的站,非要把全部频道的名称都叫非主流XX,(XX代表任意字符)以为这就是优化,错了!想优化什么词就淡化什么词,比如我想优化站长中国,(当然,这个词也没人想优化,这不是举例子嘛。)那么,我只需要把我的首页改名叫站长中国,而其他频道名称都刻意的淡化这个词或者不出现这个词,把所有的频道总链到这个词上面。效果他就真的来了。搜索不是傻子,他很智能。频道规划讲究的是层次分明,有表有里,优化是引导蜘蛛抓取,而不是去刻意的强迫抓取,变被动为主动,勾引总比强暴来的好。表是意识形态,里是最终效果。至于什么是层次,怎么层次,这个不在此篇话题之内。有机会在讲。内容处理方面,注意原创性,我们在第二篇就讲了,搜索的原创和我们理解的原创有差异,它认为的是它不认识或在它的视角里从不存在的就叫原创,那么,我们需要发布的内容就很关键了,你有精力,有耐心的,就像我这样,键盘上多累积几个字,自然是原创。没那么多闲功夫的,改标题会改吧?改段落格式会改吧?标题换换位置,多敲几个ENTER,自然也就原创了。当然,这里讲的只是初期的东西,关键还得有个悟性。悟到了。也就成功了。内容选择上,最好是和站点主题相匹配的相关内容,不要自己搞个娱乐站,天天关注科技动态。这样的内容,搜索不喜欢,访问者也不适应。

  第五篇:友情链接的处理和到底我要链什么

  友情链接是向外宣传的窗口,也是蜘蛛爬取的标准之一,在以前,狐狸就讲过,好的链接标准是成功诱惑搜索的一半。怎么去选择友情链接已经有很多文章在说了。这里也稍微提一下,一带而过,做链接,要找对站,找对人。第一,看是否是同类型,第二,查正反收录,第三,看稳定性。当然,中国人讲的是人情事故,有的不符合标准的站,也被链了,那是卖的人脉帐,这里没啥好说的。关键问题就在友情链接链向的地址和名称上。以下几点供参考。一,对方站密密麻麻在首页链了几十个的,不做。二,内页的,不做。三,经常访问不了的,不是同类型的,不做。四,搜索收录过频繁,权重高的吓人的同类型站,不做。前三条很容易理解,后面的最后一条你可能迷糊,很简单啊,你跟他做链接,明着是在帮你,其实,是在无情的贡献你的关键词。搜索太频繁,权重太高,一搜,排在前面的是他,而非你。这,这。。。很难讲的事情,不是吗?

  到底我们要链什么?链的是蜘蛛爬去,链的是来路推广,那么,是不是一定就要链首页?答案是否定的,一般,我们做链接的时候,可以首页给对方链他想要的,而自己去链一个自己站点独有的,或想优化的词,这就叫汇总效益。套个现代名词:长尾效益。啥叫长尾效益,拿最低的去博取最多的。

  第六篇:什么叫搜索更新,怎么才叫大更新

  以前的文章里有提过这个问题,这里也不作详谈,只简单提下,搜索对一个站点的考察有三个十五天的规律,第一个十五天,考察期,看看这个站稳定与否,是否值得收录。第二个十五天,稳定增涨期,确定更新频率,更新速度。看要分配多少蜘蛛来抓取和拾取。具体能吃多少,要看你站点的造化了。搜索不是贪得无厌的,但绝对也不是小肚量。第三个十五天,稳定增长期,只要不是因为天灾人祸,基本就靠谱了。有很多人问,到底301和404有什么好处和坏处,这个很难说。301永久重定向肯定是对搜索有利的,404单独页面也有助于搜索收录,但404跳转就奉劝各位悠着点,按照条例来讲,是作弊技量,但又得看搜索心情,相对来讲,权重越高成功越高。不过,被拔了可不要找我。我可什么也没说。回到问题,什么叫大更新?很多站长老是盯着礼拜一,四,六的更新,或者是每月的第一个工作日的更新,称那个才叫搜索更新,其实,搜索每天都有来抓取你的站,不是说只有一,四,六来抓取。当然,抓取了,收录不收录是他们的事。一般来讲,搜索不会在一天更新你的站以后去更换总收录的条数,而是七天一换总收录数据条数。所以,经常关注下搜索的高级选项里的近一天收录。大更新其实只是一个概量的重新评估过程而已。

  第七篇:怎么做才称的上搜索优化

  老是听一些站长或优化专业人士讲:我怎么怎么保证你怎么怎么排到怎么怎么页的怎么怎么条,其实,优化无外乎以下几个字:链,勤,广,送。链,就是保证对外的友好链接曝光度。勤就是勤快的去更新你的内容。广就是广泛的参与热门关键词的累积和抓取。送就是主动推送你的站点到其他搜索抓取的勤快的地方。就这么简单。又有人有意见了,小样,你说的这么轻松,广说不练假把式,你来练练!我就要反驳了,你这不是强烈的要求我自我AD吗?我可不敢在让下面的评论骂我是软文,说我是愤青,让我***。我年轻,还不想死。未来是广阔的。关于这四个字,又可以衍生出一篇老长的文章,毕竟,掌握了精髓,下面的就是围绕着精髓发展的。至于作弊优化,那叫强迫主义,如果反应强烈,那咱在写篇《怎么去强迫搜索》的文章,这里,咱这谈的是搜索是个什么东西。而不是强迫是个什么东西。关于搜索优化的小窍门到是可以说几个,仅供参考。一,泛域劫持。二,关联关键词。三,导航目录性。四,次热门关键句。五,队形性关键词。六,时间性技巧。

  写在最后

  文字太多了,那就空洞了。老是想抓大而全的东西,结果,等自己回头看,什么东西也不是。所以,还不如就此打住,作为下个系列的序也不错。自从上次那个狐狸系列以后,四个月没有碰文章了。老是写新闻评论。现在想想,还是回归了的好,搜索占有比重的大小是一个站点生死的关键,很多朋友反驳到,被搜索干掉了,还不是活的好好的,对,您是看到了活的好好的,还有那么多没活好的那?凡事,没有完美的。只是咱得看大多数。这里需要阐述的观点很简单:做优化不是强迫搜索而是诱惑搜索。强迫的事情来不久,虽然当时很爽,但时间不会太长。长久了才有真感情。其实,搜索是个恋人,要尝试着和他谈,而不是一上来就强迫。文章空洞乏味,只作业内人士讨论研究。

Tags:,,,ZOUBIN.COM

No responses yet



不丢失数据 不丢失资料 不能访问flv 中国人 中文域名 信用卡套现 信用卡网上套现 做网站赚钱 八小时工作制 六小时工作制 关键字 北京 单个mysql表 卡车 回忆 域名 备份和拷贝MYSQL数据库 备份数据库 大小 奥运渊源 好用的FTP工具 安全设置WEB服务器 家园闯关东 密度 快速被搜索引擎收录教程 怎样配置服务器 恢复mysql 抵制家乐福 搜索优化 搜索引擎 新站SEO 无损调整主分区 无损调整系统分区 无法除去该用户 服务器配置 汶川地震 烦躁 百度优化 目录过长 网站兼容性测试 网赚 网页兼容性问题 网页权重 网页滑动门 网页重要度 调整主分区 调整主分区大小 调整主分区容量 调整系统分区 调整系统分区大小 调整系统分区容量 选定的用户拥有对象 邹斌 配置iis 重启php 重启php.ini 重载php.ini 闯关东宋祖英 闯关东宋祖英歌词 验证码不正确 1元cn 1U 2U U 8小时工作制 cn域名 CSS兼容性调试 css滑动门 dede验证码 dede验证码不正确 div高度自适应 Div + CSS 高度自适应 dreamweaver里的正则 FlashFXP v3.6 Final flv IIS应用程序池进程 iisapp命令 iisweb服务器完美解决方案 Keyword De ity margin MultipleIE mysql创建用户 Mysql数据的修复 Olympics padding php php.ini phpmyadmin创建数据库 phpmyadmin创建用户 pid来解决IIS的cpu占用率过高 sa密码 seo Seo sql SQL2000 web服务器安全处理 windows2003安全设置 WordPress全角半角 wordpress标签 wordpress标签云 wordpress符号