Table ‘%s’ is marked as crashed and last (automatic) repair failed修复方案

Table ‘%s’ is marked as crashed and last (automatic) repair failed

错误编号:144
问题分析:
数据表损坏造成的。
解决方法:
1、通过论坛的 tool 工具进行修复
下载地址和使用说明见:http://www.discuz.net/thread-982699-1-1.html
2、myisamchk 修复
myisamchk 命令的格式如下:
1)myisamchk –recover tbl_name
2)myisamchk –recover /path/tbl_name
这种方法要指定数据表在磁盘上的位置。
3、使用 phpMyAdmin 修复数据的方法
进入论坛数据库,然后选择要修复的表,在页脚下拉框选择“修复”即可。
注意:如果需要修复数据库,修复前一定要做好备份。

转自:http://faq.comsenz.com/viewnews-152

利用命令进行简单的增量文件夹备份

这两天突然看到一个需求点,需要实现增量备份的功能,找了一些资料
记录一下如下命令,该命令可以利用命令行进行简单的增量备份功能。

Win: xcopy C:\Docs D:\Backup\Docs /E /H /R /Y /I /D
每个参数具体的值可以参考 xcopy /? 的输出结果

Linux下可以通过强大的 rsync 命令进行,此命令还是非常强劲的,具体用法可以man一下,或者google一下。

Windows的那个Xcopy的备份命令的

mysql 无法连接问题的定位和修复过程

开发的一款网站防护产品中出现了一个客户端上安装后Mysql每隔一段时间就出现问题,这个问题是客户反馈的,所以需要去复现和定位,定位结果如下:

客户环境:
windows server 2003 r2 standard edition sp2
mysql Ver 14.12 Distrib 5.0.18, for Win32 (ia32)
apache 2.2
瑞星
webshield客户端1.08

问题已复现。可以优化,无法确定是webshield导致的。

搭建环境:
windows server 2003 r2 standard edition sp2
mysql 5.0.18 for win32
apache-2.2.21-win32-x86-no_ssl
php-5.2.17-win32-vc6-x86
瑞星23.00.50.25

搭建环境过程中遇到的几个问题:
在下载apache与php时,请注意apache与php匹配问题。
a)PHP5.3有VC6与VC9版本,应选择VC6版本。原因如下:
i. VC6版本是使用Visual Studio 6编译器编译的,如果你的PHP是用Apache来架设的,那你就选择VC6版本。
ii. VC9版本是使用Visual Studio 2008编译器编译的,如果你的PHP是用IIS来架设的,那你就选择VC9版本。
b)PHP5.3的Thread Safe和Non Thread Safe版本。Apache no_ssl版应与php Thread Safe版搭配。若与Non Thread Safe搭配,apache启动出错:“Apache is running a threaded MPM,but your PHP Modle is not compiled to be threadsafe. You need to recompile PHP.”
i. Thread Safe是线程安全,执行时会进行线程(Thread)安全检查,以防止有新要求就启动新线程的CGI执行方式而耗尽系统资源。ISAPI执行方式是以DLL动态库的形式使用,可以在被用户请求后执行,在处理完一个用户请求后不会马上消失,所以需要进行线程安全检查,这样来提高程序的执行效率,所以如果是以ISAPI来执行PHP,建议选择Thread Safe版本;
ii. Non Thread Safe是非线程安全,在执行时不进行线程(Thread)安全检查。FastCGI执行方式是以单一线程来执行操作,所以不需要进行线程的安全检查,除去线程安全检查的防护反而可以提高执行效率,所以,如果是以FastCGI来执行PHP,建议选择Non Thread Safe版本。
注意apache对网站及PHP的正确配置。特别注意配置文件中LoadModule, PHPIniDir,DocumentRoot,ServerRoot,Directory,DirectoryIndex,AddType application/x-httpd-php等项的配置
安装后 mysql 后(管理员账号密码:admin/admin),在PHP代码中使用admin连接数据库失败,cmd执行mysql –u root -p启用root用root可正常连接数据库。
问题复现:
PHP最长执行时间限制。
a)php最长执行时间默认为30秒,超过30秒后被中止执行,与mysql的连接也被断开。
b)尝试增大此值,修改php目录下的php.ini配置文件,将max_execution_time = 30 改为max_execution_time = 300。如果设为0,表示不限制PHP最大执行时间。
c)避免了因最长执行时间限制而导致mysql连接失败。
网站流量大导致mysql无法连接。
a)编写php脚本对mysql进行测试,发现当对mysql进行频繁的连接/断开操作时,mysql很快出现无法连接问题(错误代码:10048)。当中止所有连接,2分钟后mysql又恢复正常。若不停止连接,mysql一直无法连接。
b)尝试从两方面优化:
i. 修改windows注册表项TcpTimedWaitDelay值为30(默认为240秒),减少此条目的值允许 TCP/IP 更快地释放已关闭的连接, 为新连接提供更多资源。
ii. 修改windows注册表项MaxUserPort为53768 (该值表示从系统请求任何可用用户端口时所用最大端口数,TCP/IP 可指定的最高端口号,默认值为5000)以处理更多的请求。
c)修改完注册表项后测试,mysql情况大有改善:mysql连接错误出现的情况大有减少,出错后自我恢复的能力大有提高。
针对以上两种情况,分别对安装了webshield 1.08与未安装webshield 1.08进行了测试,两者测试结果一样。
优化:
max_execution_time的修改:
打开php目录下的php.ini文件,找到max_execution_time = 30 这行,将30修改为想要的数字。
TcpTimedWaitDelay与MaxUserPort的修改:

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters]
"TcpTimedWaitDelay"=dword:0000001e
"MaxUserPort"=dword:00008000

Mysql DNS反向解析导致连接超时

设备在连接mysql时候,等待服务器的banner信息需要4s左右,影响了Mysql服务的连接速度。
通过如下方式进行验证:
1、Telnet端口验证
通过设备和虚拟机(Linux系统)分别Telnet Mysql服务的端口,会出现一下现象:

设备(UAG/SCANNER): telnet后,等待Mysql的服务器端回应大概需要等10s左右。

1
2
3
4
5
6
7
[DPtech-Developer-Shell]telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?Hc95<o:o,¢![1]EGt3@+Q8do#]Connection closed by foreign host.  //这里耗时非常长,接近10s
[DPtech-Developer-Shell]

虚拟机(Ubuntu):telnet后,立即得到了Mysql服务器的返回

1
2
3
4
5
6
[root]~# telnet 10.101.0.206 3308
Trying 10.101.0.206...
Connected to 10.101.0.206.
Escape character is '^]'.
E
5.0.67-community-nt-log?D%(;1$]+,¢!Zdh`'?G)6r]YConnection closed by foreign host.   //这里耗时很短

2、通过程序进行验证
具体源代码见附件:验证程序源代码
源代码基本上是设置了Recv超时后,建立socket连接之后接受数据,收到后计时并输出。

在设备上和虚拟机中的结果分别如下:

设备:

1
2
3
4
5
[DPtech-Developer-Shell]/tcpclient_mips 10.101.0.1 3306
花费时间:19553
Recved 68 bytes
@
5.5.2-m2-community%uD3q`n)

虚拟机:

1
2
3
4
5
[root]tcp_demo# ./tcpclient 10.101.0.1 3306
花费时间:10525
Recved 68 bytes
@
5.5.2-m2-communitd~k~Y";B

可以发现,设备上大约比Linux服务器多耗时9s,其中10秒钟可能是recv本身超时的时间。

3、通过不同操作系统进行Telnet验证
通过Windows系统和Linux虚拟机、设备,分别通过Telnet进行连接尝试,通过抓包分析得知,只有设备的耗时比较长,其他的耗时都比较短。

抓包时发现设备中的socket建立之后,MYSQL服务器需要发送很多次的NBNS报文后,才会传输banner信息,而Linux虚拟机和Windows系统的主机在这个过程中都没有出现这个问题。

查找了一些资料,关于MYSQL NBNS报文的问题:
Mysql论坛的提问:

http://forums.mysql.com/read.php?11,250982,250982#msg-250982

该问题的答复

http://forums.mysql.com/read.php?11,250982,254683#msg-254683

从答复中来看,貌似是某些版本的问题,临时的解决方案是对Mysql服务器进行配置,不启用Named Pipes,即 命名管道 功能即可解决这个问题。

后经查找相关资料得知,远程连接超时可能由于Mysql默认开启了DNS反向解析的缘故,每次连接时服务器都尝试解析连接客户端的主机名,导致时间比较长。

解决方法是在服务器端的my.ini文件中,[mysqld]这个节下配置一个skip-name-resolve以关闭Mysql默认开启的DNS反向解析就可以了。

再次通过设备和虚拟机或者Windows系统进行Telnet,可以发现连接超时的现象明显不存在了。

另外通过自己写的C代码进行连接的时候也存在同样的问题,修改skip-name-resolve以后,实际上就可以发现该问题已经不存在了:

设备:

1
2
3
4
5
[DPtech-Developer-Shell]/tcpclient_mips 10.101.0.1 3306 
花费时间:10520
Recved 68 bytes
@
5.5.2-m2-community[Z44E>G)

虚拟机:

1
2
3
4
5
[root]tcp_demo# ./tcpclient 10.101.0.1 3306
花费时间:10521
Recved 68 bytes
@
5.5.2-m2-community7evE5wyx

通过虚拟机Telnet连接另外一个ip 10.101.0.206时候发现速度也比较慢,消耗的时间基本上和设备中相当,可能是由于虚拟机和宿主主机之前不需要进行反向域名解析,或者说是应为系统本身就知道虚拟机IP地址(NAT模式)对应的主机名,所以不需要进行DNS反向解析,导致在虚拟机中出现了特殊情况。

最后得出结论,可能这个问题实际上和设备或者虚拟机,Linux系统、Windows系统没有多大关系,主要由于服务器的反向DNS解析导致该问题。无法从客户端途径去解决,也就是说我们设备无法处理这种情形。

2012年技术上的四个目标

2012年预计完成以下目标

  1. 基本掌握Android开发,开发一到两个简单的应用
  2. 对Hadoop有一个基本认识
  3. 完成最基本功能的Node.JS Scanner
  4. 了解Linux内核,系统调用等相关知识

对于Android的开发,想要去做这个东西很长时间了,一直断断续续的去看了一些零星的资料,2012年一定要基本能独立进行Android应用的开发。

Hadoop嘛,只需要简单的是啥东西,干啥用,能简单用用就可以了。

Node.JS Scanner嘛,真不知道能不能完成,但是列在这里,对自己有一个促进作用吧

Linux内核相关的东西,在现在项目里用的范围比较广,不去了解以后在项目里还混的下去么?所以重要性不言而喻,希望2012年能把这四个目标达成至少3个。

希望2012是给力的一年。

2011年终总结

2011过去了,回顾这过去的一年,有很多事情值得去记录,无论是自己的生活还是工作上,都有大把大把的事情值得记录。

生活上

1、收获了一个老婆,种了6年了,终于修成正果了。

从大学开始的恋情,在人生的旅途上遇上一个让你不知道为啥爱上他的人真的不容易,爱上老婆真的不知道是为啥,就这样在不明白中一起走过了6年,虽然有过小打小闹,但是真的是两个人相濡以沫,大风浪来了估计我们也不会怕了。

家庭条件的限制,婚礼比较简单,在家里举行的,不会像别人婚礼那样在酒店,很大排场,但是我们收到亲友们的祝福很多,很多朋友事后看到照片都感叹,你们家亲戚真的多。当然,婚礼幸好有几个姐姐的帮忙,不然我估计忙到头昏脑涨也搞不定。

2、收获了人生最大的惊喜之一,我们的宝贝。

实际上结婚也是因为这个小家伙,和老婆商量商量后,取名就叫“王晨曦”,如果是龙凤胎就一个叫城西,一个叫城东,当然这是开玩笑的。因为这个小家伙,才有了后面一条的生活变化。因为有了小家伙,把老婆折腾得够呛,经常独自被踢到疼得受不了。还是因为他(她),老婆O型血,我A型血,得吃一段时间药,保证他出生的时候不会出现溶血病,因为这样我得早上6:30起床熬药,然后做早餐,不过也锻炼了自己的毅力,再冷的冬天也能立马起床,因为想到要煎药,为了宝宝的健康。

3、终于搬家又找了个小区,完成了有厨房的生活的转变。

算是为了宝宝吧,搬了个地方,为了能做饭,也能常常看电视了。每个周末也能开始自己做饭,自己炖点汤给老婆补补(老婆年末体检营养过剩了…)。

4、弟弟也订婚了。

这个不算是我的生活,但是值得写在这里吧,因为意味着弟弟也马上真正的长大成人,开始担起一些担子了,祝福他和弟媳能白头偕老,也能早日完婚吧。

5、接待岳父岳母进行了一趟杭州游。

五一黄金周,带着岳父岳母绕着杭州转了一转,该看的地方都去转了转,岳父岳母总体而言还是挺高兴的,也留下了不少记忆。

6、老婆的姐姐也有了小孩。

比我们的小孩大三个月,再有一周多应该就生下来了吧。

工作上

1、漏洞扫描设备的主要功能部分基本完成。

1.阅读了一本Mootools的官方的PDF,对JS的类系统的基本概况有了一点的了解。

2.完成了和统一管理系统的集成。

3.对插件扫描时间进行了分析,部分能处理能优化的插件进行了优化,对扫描插件的认识上了一个台阶。

2、公司搬家,协助完成了网站、邮箱迁移,办公网络的测试。

3、完成了从一个系统单独剥离一套框架完成公司商务管理系统。

4、基于商务管理系统基本框架完成了某个IM的监控系统的数据显示部分。

5、帮助公司招聘了一堆人。

6、被正式的公司任命书任命为项目组组长,负责两个项目的开发。

7、接过北京的WebShield网站防护项目,带着一伙新人(主要是一个哥们)顶住了压力修复了一些漏洞,基本上把功能方面的问题修正。

写完这些简单的总结,发现,原来生活上的改变变化和能写下来的事情真的不多,工作在我的生命中的比重有点太高了啦。也有可能是有些事情想不起来了。

某医学站点的XSS漏洞

无聊的时候看了看某医学站点,发现了一个XSS漏洞,登录页面中有一个非常可爱的调用,具体为啥这样写,我想了半天也没想明白:

https://www.nohouse.net/login?resource=pop&method=GET&service=www.nohouse.net&iurl=http://www.nohouse.net/empty.htm

尝试修改了service这个参数的值,该值貌似做过校验,没有骗过校验,尝试替换iurl,然后单独访问这个页面,却发现奇特的现象,开发者工具中出现了后面那个URL的请求,这就是意味着这个页面被加载了,这个是为什么呢?难道这个页面在登录的过程中还有用?访问了一下,发现的确和名字一样,这个页面是一个空白的页面,应该没有什么其他具体的逻辑吧。

通过开发者工具查看页面的结构发现,iurl的参数被嵌入到了一个iframe中,这也就是意味着任何页面任何站点都能被这个url嵌入引用了,构造一个xss攻击的url简直易如反掌,虽然没考虑如何利用,至少可以随便嵌入一个js文件,然后在论坛上发一贴,吸引一点用户去点击还是非常有可能的,偷取点用户资料,简直就是易如反掌,想做进一步的动作也不是不可能。还好这个XSS不是一个存储式的,利用起来还需要用户去点击,去帮忙,否则这个漏洞还是挺可观的。

不做多解释,这个URL中真实的站点名称已经被我替换成我自己的博客地址了,所以别尝试了。

–后记 2011-12-30 –
Twitter上联系了某个技术负责人之后,很快的做了修复,可是修复的不彻底。

访问上述URL时需要用户登录了才能访问,且对参数进行了html编码处理,这样的结果就是不登录无法使用了,可是一旦你注册帐户后登录,问题又来了,刚开始直接提交修改后的代码,由于过滤了’”等字符,这些特殊字符都被转义了,也就是说纯粹的js代码无法执行了。

1
&lt;iframe width="0" height="0" style="display:none;" id="xclient" name="xclient" src='javascript:alert(12);"#'></iframe>

尝试了直接替换成非该站点的URL也被直接替换成空字符串了,这个算是修复的稍微合理一点了,但是另外一点,js的情况如何呢。
之前说了,特殊字符转义,且最后的#字符导致了纯粹的js代码无法被执行了,那么我们尝试去闭合前后的”字符呢?尝试后的结果是,特殊字符由于编码处理后无法闭合,于是尝试在#号前添加//,js中的注释符,结果令人很高兴,发现原来这里还是没有被过滤掉,也就是说,这个漏洞依然存在,修复只是让利用的可能性小了一些,还是避免不了被利用的可能性。

IOS版本大全

以前经常对IOS的版本感觉到很奇怪,各种各样的版本编号,7B500什么的,具体含义是什么呢?另外在User-Agent信息中,如何识别IOS版本呢?实际上一下信息应该可以提供一些帮助,版本号后面的那串数字,一般都会出现在User-Agent中,而这些信息可以用来识别具体是什么设备,什么版本了。

Apple TV 2G (4.1/8M89)
Apple TV 2G (4.2.1/8C154)
Apple TV 2G (4.3/8F191m)
Apple TV 2G (4.4.2/9A336a)
iPad (3.2/7B367)
iPad (3.2.2/7B500)
iPad (4.2.1/8C148)
iPad (4.3/8F190)
iPad (4.3.5/8L1)
iPad (5.0.1/9A405)
iPad 2 (CDMA) (4.3/8F191)
iPad 2 (CDMA) (4.3.5/8L1)
iPad 2 (CDMA) (5.0.1/9A405)
iPad 2 (GSM) (4.3/8F191)
iPad 2 (GSM) (4.3.5/8L1)
iPad 2 (GSM) (5.0.1/9A405)
iPad 2 (Wi-Fi) (4.3/8F191)
iPad 2 (Wi-Fi) (4.3.5/8L1)
iPad 2 (Wi-Fi) (5.0.1/9A405)
iPhone (1.0/1A543a)
iPhone (1.0.1/1C25)
iPhone (1.0.2/1C28)
iPhone (1.1.1/3A109a)
iPhone (1.1.2/3B48b)
iPhone (1.1.3/4A93)
iPhone (1.1.4/4A102)
iPhone (2.0/5A347)
iPhone (2.0.1/5B108)
iPhone (2.0.2/5C1)
iPhone (2.1/5F136)
iPhone (2.2/5G77)
iPhone (2.2.1/5H11)
iPhone (3.0/7A341)
iPhone (3.0.1/7A400)
iPhone (3.1/7C144)
iPhone (3.1.2/7D11) 继续阅读 »

Linux命令行格式化C代码

利用一下代码可以将当前目录下所有的C代码格式化,格式化的效果还不错哦。

2
indent -bad -bap -bbb -nbbo -nbc -bl -bli0 -bls -cbi0 -ncdb -ncdw -nce -cli4 -cs -npsl -di8 -nfc1 -nfca -lp -lps -pcs -nprs -nsaf -nsai -nsaw -sc -sob -nss -nut -sbi4 -l120 -ts4 -i4 -nip *.c

在日常开发的过程中,我们常常遇到一段代码,各种编辑器或者IDE格式化的都不好看,那么可以采取以上的代码,对项目中所有的C代码进行格式化,当然了,自己耍耍就好,别真的对项目所有的代码这样,否则你在diff中会看晕掉的。

以安装成服务的tomcat环境设置远程调试功能

最近有一个项目中有一个经过修改的tomcat服务器,但是要进行远程调试必须经过北京同事这一个中间环节的沟通,本来可以等邮件,然后看他们教会我们如何调试的,但是实在不想等,于是自己研究,自己找资料,网上这方面的资料还真的少的一米啊,不容易到处找,到处看,终于找到一个方法可以搞定,怕忘记,先发在这里,备忘吧。

此种情况就是针对将tomcat安装成本地服务了,但是又想进行远程调试的情况,别说改catalina.bat,就是应为改不了才尝试其他办法的。

你可以通过如下方式来编辑Tomcat的服务启动参数来调试安装成Tomcat服务后的web应用程序。

继续阅读 »