<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_无线我的无限--角摩网(http://www.joymo.cn)</title><subtitle type="text">让无线技术给生活带来无限快乐</subtitle><id>http://feed.cnblogs.com/blog/u/22126/rss</id><updated>2011-03-21T03:32:20Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><generator>feed.cnblogs.com</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/22126/rss"/><entry><id>http://www.cnblogs.com/freemobile/archive/2011/03/18/1987953.html</id><title type="text">数组中子序列最大和算法</title><summary type="text">昨天有同事去别的公司面试，考了这样一道题，说写得不好，问能不能有时间复杂度为数组长度的算法，这个应该不难，写了段代码，执行上应该没错。int main(int argc, char* argv[]){int a[]={10,3,-5,16,90,-100,90,6,-7};int n =sizeof(a)/sizeof(int);int max = 0;int tmpmax = 0;for(int i=0;i&lt;n;i++){ if(tmpmax+a[i]&gt;max) { tmpmax = max = tmpmax+a[i]; } else { tmpmax = tmpma</summary><published>2011-03-18T04:33:00Z</published><updated>2011-03-18T04:33:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2011/03/18/1987953.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2011/03/18/1987953.html"/><content type="html">&lt;p&gt;昨天有同事去别的公司面试，考了这样一道题，说写得不好，问能不能有时间复杂度为数组长度的算法，这个应该不难，写了段代码，执行上应该没错。&lt;/p&gt;&lt;div&gt;&lt;div&gt;int main(int argc, char* argv[])&lt;/div&gt;&lt;div&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;int a[]={10,3,-5,16,90,-100,90,6,-7};&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;int n =sizeof(a)/sizeof(int);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;int max = 0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;int tmpmax = 0;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;for(int i=0;i&amp;lt;n;i++)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;if(tmpmax+a[i]&amp;gt;max)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;tmpmax = max = tmpmax+a[i];&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;else&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;{&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;tmpmax = tmpmax+a[i];&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;if(tmpmax&amp;lt;0)&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;tmpmax = 0;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;cout&amp;lt;&amp;lt;"MaxValue: "&amp;lt;&amp;lt;max&amp;lt;&amp;lt;endl;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="white-space: pre;"&gt;&lt;/span&gt;return 0;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;div&gt;嘿嘿，谁能看出那个数组中和最大的子序列是什么？？&lt;/div&gt;&lt;p&gt;&amp;nbsp;应该是最简单的算法了，在网上搜了下，好些人写得有问题，误人子弟啊。&lt;/p&gt;&lt;p&gt;上面是没有考虑全负的情况，修正如下：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; int a[]={-10,3,9,-16,-90,-100,-90,6,-7};&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int n =sizeof(a)/sizeof(int);&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int max = a[0];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;int tmpmax = 0;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(int i=0;i&amp;lt;n;i++)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if((tmpmax=tmpmax+a[i])&amp;gt;max)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;max = tmpmax;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(tmpmax&amp;lt;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;{&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(max&amp;lt;0)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(a[i]&amp;gt;max)&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;max = a[i];&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;else&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;tmpmax = 0;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;cout&amp;lt;&amp;lt;"MaxValue: "&amp;lt;&amp;lt;max&amp;lt;&amp;lt;endl;&lt;br /&gt;如果全负实际是做了一遍选择排序。&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1987953.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2011/03/18/1987953.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2011/01/27/1946103.html</id><title type="text">jira 4.2破解安装Linux和windows版</title><summary type="text">1、配置java环境 （详见在linux下安装java） 2、安装mysql 如果没有安装mysql的话可以快速安装 Mysql5.1.36auto-install 按照以上方法即可快速安装 一般我习惯将脚本全部放入/usr/local/src/scripts中 #chmod+xmysql_5.1.36.sh #./mysql_5.1.36.sh 如果觉得下载太慢，可以提早去官方网站下好，上传到/usr/local/src/tarbag下 执行完毕没有报错，即可。 3、Jira下载&amp;安装&amp;破解 3.1下载&amp;解压 3.1.1版本：Atlassian.JIRA.v4.2 (下载地址：http://</summary><published>2011-01-27T04:33:00Z</published><updated>2011-01-27T04:33:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2011/01/27/1946103.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2011/01/27/1946103.html"/><content type="html">&lt;div&gt;&lt;div&gt;&lt;div&gt; &lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;1、配置java环境&lt;/span&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;（详见&lt;/span&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/463052"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;在linux下安装java&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;）&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;2、安装mysql&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;如果没有安装mysql的话可以快速安装&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/462674"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;Mysql&amp;nbsp;5.1.36&amp;nbsp;auto-install&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;按照以上方法即可快速安装&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;一般我习惯将脚本全部放入&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/usr/local/src/scripts中&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;#&amp;nbsp;chmod&amp;nbsp;+x&amp;nbsp;mysql_5.1.36.sh&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;#&amp;nbsp;./mysql_5.1.36.sh&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;如果觉得下载太慢，可以提早去官方网站下好，上传到/usr/local/src/tarbag下&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;执行完毕没有报错，即可。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;3、Jira下载&amp;amp;安装&amp;amp;破解&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;3.1下载&amp;amp;解压&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;3.1.1&amp;nbsp;版本：&lt;/span&gt;&lt;a href="http://download.csdn.net/source/2775357"&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 16pt; font-weight: bold;"&gt;Atlassian.JIRA.v4.2&lt;/span&gt;&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;下载地址：&lt;/span&gt;&lt;a href="http://hotfile.com/get/77389957/4d15a44a/779d520/Atlassian.JIRA.v4.2.Incl.Keygen.and.Patch-iNViSiBLE.rar"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt; text-decoration: underline;"&gt;http://hotfile.com/get/77389957/4d15a44a/779d520/Atlassian.JIRA.v4.2.Incl.Keygen.and.Patch-iNViSiBLE.rar&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;)&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;3.1.2&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;解压步骤：&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/462545"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;hotfile大文件解压步骤&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;将解压后的atlassian-jira-enterprise-4.2.1-b588-standalone.tar.gz上传到服务器&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/usr/local/src/tarbag/atlassian/jira目录下(习惯，可根据个人需求更改)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;解压到&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/usr/local/src/software(习惯，可根据个人需求更改)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;将&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;atlassian-jira-enterprise-4.2.1-b588-standalone拷贝到&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/www目录下&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;建议使用如下路径，比较符合java习惯&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/www/atlassian/jira/x.x.x&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;(x.x.x是版本号，在本文档中是&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;4.2.1&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;#&amp;nbsp;cp&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;-rp&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;atlassian-jira-enterprise-4.2.1-b588-standalon&lt;/span&gt;&amp;nbsp;&amp;nbsp;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;/www/atlassian/&lt;/span&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;jira/4.2.1&lt;/span&gt;&lt;/p&gt;   &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;3.2安装&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;3.2.1&amp;nbsp;在MySql中专将JIRA数据库&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;进入mysql输入&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;mysql&amp;gt;create&amp;nbsp;database&amp;nbsp;jira&amp;nbsp;character&amp;nbsp;set&amp;nbsp;&amp;nbsp;utf8;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;mysql&amp;gt;grant&amp;nbsp;all&amp;nbsp;on&amp;nbsp;jira.*&amp;nbsp;to&amp;nbsp;'jira'@'localhost'&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;'jira';&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;mysql&amp;gt;grant&amp;nbsp;all&amp;nbsp;on&amp;nbsp;jira.*&amp;nbsp;to&amp;nbsp;'jira'@'%'&amp;nbsp;identified&amp;nbsp;by&amp;nbsp;'jira';&lt;/span&gt;&lt;/p&gt;   &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;3.2.2安装JIRA&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;Jira的安装路径&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;$Install_Jira=/www/atlassian/jira/4.2.1&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;创建jira.home文件夹&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;cd&amp;nbsp;/www/atlassian/jira/&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;mkdir&amp;nbsp;&amp;nbsp;jira_home&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;useradd&amp;nbsp;&amp;nbsp;jira&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;passwd&amp;nbsp;&amp;nbsp;jira&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;chown&amp;nbsp;-R&amp;nbsp;jira:jira&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/www/atlassian/jira/&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;jira_home&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 16pt; font-weight: bold;"&gt;3.2.3修改Jira配置文件&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;修改&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;$Install_Jira&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/atlassian-jira/WEB-INF/classes/jira-application.properties&amp;nbsp;文件&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;找到jira.home&amp;nbsp;=&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;修改为&lt;/span&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;jira.home&amp;nbsp;=&lt;/span&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;/www/atlassian&lt;/span&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;/jira/jira_home&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;&amp;nbsp;绝对路径&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;注：jira.home文件夹不可以设置为jira根目录及其子目录，关于这个目录做什么用，我也不清楚，估计是jira程序放临时文件用的吧。如果启动失败会在这个目录下生成一个.jira.lock的文件，重启前切记要删掉，否则无法重启。&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;修改&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;$Install_Jira&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/conf/server.xml文件&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;修改成如下几项&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;username="jira"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;password="jira"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;driverClassName="com.mysql.jdbc.Driver"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;url="jdbc:mysql://localhost:3306/jira?autoReconnect=true&amp;amp;useUnicode=true&amp;amp;characterEncoding=UTF8"&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;删除以下两行&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;minEvictableIdleTimeMillis=&amp;nbsp;"4000"&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;timeBetweenEvictionRunsMillis="5000"&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;修改&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;$Install_Jira&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/atlassian-jira/WEB_INF/classes/entityengine.xml文件&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;将其中的hsql改成mysql&amp;nbsp;数据库类型&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;&amp;lt;datasource&amp;nbsp;name=&amp;nbsp;"defaultDS"&amp;nbsp;&amp;nbsp;field-type-name=&amp;nbsp;"hsql"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;改为：&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;&amp;lt;datasource&amp;nbsp;name="defaultDS"&amp;nbsp;&amp;nbsp;field-type-name=&amp;nbsp;"mysql"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;删除&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;schema-name="PUBLIC"&lt;/span&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;----------------------------------------------------------------以下windows版&lt;/p&gt;&lt;p&gt;从下面下载rar文件，在widnows下安装即可，破解过程linux和windws同下&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;a href="http://download.csdn.net/source/2775261"&gt;http://download.csdn.net/source/2775261&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://download.csdn.net/source/2775315"&gt;http://download.csdn.net/source/2775315&lt;/a&gt;&lt;/div&gt;&lt;div&gt;&lt;a href="http://download.csdn.net/source/2775261"&gt;http://download.csdn.net/source/2775261&lt;/a&gt;&lt;/div&gt;&amp;nbsp;&lt;br /&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;4、&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;破解&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;4.1&amp;nbsp;方法1&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;1.&amp;nbsp;下载破解补丁(jira_crack.zip)&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;(&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt; font-weight: bold;"&gt;jira4.2&amp;nbsp;破解补丁&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;)&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;下载地址：&lt;/span&gt;&lt;a href="http://down.51cto.com/data/156059"&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #108ac6; font-size: 10.5pt; text-decoration: underline;"&gt;jiar4.2.1破解文件及破解程序&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;2.用破解补丁中的JiraLicenseStoreImpl.class文件覆盖/&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;www/atlassian&lt;/span&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;/jira/atlassian-jira/WEB_INF/classes/com/atlassian/jira/license/JiraLicenseStoreImpl.class文件&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;3.&amp;nbsp;用破解补丁中的Version2LicenseDecoder.class文件覆盖/&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;www/atlassian&lt;/span&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;/jira/atlassian-jira/WEB_INF/lib/atlassian-extras-2.2.2.jar包中的atlassian-extras-2.2.2.jar\com\atlassian\extras\decoder\v2\Version2LicenseDecoder.class文件&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;注：jar包可以用WinRAR打开，并可以采用拖拽的方式覆盖文件&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;4.运行JIRA服务&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;$Install_Jira&lt;/span&gt;&lt;span style="font-family: 'Arial'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt;"&gt;/bin/startup.sh&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;5.WEB&amp;nbsp;配置&amp;nbsp;JIRA&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;在web浏览器中输入http://IP:8080进入安装配置页面&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;官方文档&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://www.atlassian.com/software/jira/docs/v3.13/setup.html"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt; text-decoration: underline;"&gt;http://www.atlassian.com/software/jira/docs/v3.13/setup.html&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;   &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;6.在注册码输入框处输入以下内容：&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;Description=JIRA\:&amp;nbsp;longmaster&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;CreationDate=2010-02-22&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;ContactName=tonyty163@766.com&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;jira.LicenseEdition=ENTERPRISE&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;ContactEMail=tonyty163@766.com&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;Evaluation=false&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;jira.LicenseTypeName=COMMERCIAL&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;jira.active=true&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;licenseVersion=2&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;MaintenanceExpiryDate=2099-10-24&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;Organisation=zzh&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;jira.NumberOfUsers=-1&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;ServerID=BVGH-1XEQ-1TVR-OO3O&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;LicenseID=LID&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;LicenseExpiryDate=2099-10-24&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;PurchaseDate=2010-10-25&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;（注意：以上的ServerID要根据license输入框上面的ServerID进行更改）&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;MaintenanceExpiryDate和LicenseExpiryDate可控制jira的到期时间&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;7.现行的破解方法如果不行，可下载解码器进行破解&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://download.csdn.net/source/2775357"&gt;&lt;span style="font-family: 'Times New Roman'; color: #0000ff; font-size: 9pt; font-weight: bold;"&gt;Atlassian.JIRA.v4.2破解程序和注册机（2010年10月22日更新）&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;（下载地址http://d.download.csdn.net/down/2775357/vb_dot_net）&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;随便找个装java的windows，运行下keygen.bat，输入相关信息，得到注册码&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;或者找到一个带图形界面的linux，运行下keygen.sh，同样得到注册码即可&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;4.3&amp;nbsp;方法2(推荐，不需要额外下载破解程序软件)&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;借鉴&lt;/span&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/463101"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;iNViSiBLE破解&amp;amp;补丁程序使用教程&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;安装即可&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;5、Jira汉化&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;网上下载的汉化包，目前能下载到的我搜了下，大概是4.0的&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://down.51cto.com/data/156065"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;jiar4.2.1-插件&amp;nbsp;汉化&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;由于jira新版本的汉化大部分都不完全，所以这里要用我给的包，那个是公司同事齐心协力汉化了很久后的杰作，经测试在4.2版本使用一切正常，极少数地方没有汉化。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;汉化流程是：&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;1.&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;先停止jira&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;#&amp;nbsp;$Install_Jira/bin/shutdown.sh&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;2.&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;把language_zh_CN.jar拷贝至，&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;$Install_Jira/&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;atlassian-jira&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;WEB-INF&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;/&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;lib下，由于目录下有同名，出于安全，应该先备份老的&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;，但是一定不要备份到生产环境的目录下，因为&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;java是不认文件后缀，只认目录下文件的，备份最好是另外备份一个目录&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;；&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; font-size: 10.5pt;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;3.启动jira，观察日志，如果没报错，就应该汉化完成了&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;4.&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;进去你的jira查看成果吧。&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://ip:8080/"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt; text-decoration: underline;"&gt;http://IP:8080&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;6、Jira自启动脚本&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;（详见&lt;/span&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/465698"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;Jira自启动脚本&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;）&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;7、Jira插件安装&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;7.1&amp;nbsp;GreenHopper插件安装&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;（详见&lt;/span&gt;&lt;a href="http://tonyty163.blog.51cto.com/721698/465703"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;Jira插件GreenHopper安装&amp;amp;破解&lt;/span&gt;&lt;/a&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;）&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '宋体'; font-size: 22pt; font-weight: bold;"&gt;8、排错&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;strong&gt;&lt;span style="font-family: '黑体'; font-size: 16pt; font-weight: bold;"&gt;8.1&amp;nbsp;启动后在面板右下角出现的数据库警告&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;出现如下错误&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; color: #ff0000; font-size: 10.5pt;"&gt;WARNING:&amp;nbsp;You&amp;nbsp;are&amp;nbsp;using&amp;nbsp;MySQL&amp;nbsp;but&amp;nbsp;do&amp;nbsp;not&amp;nbsp;have&amp;nbsp;a&amp;nbsp;validation&amp;nbsp;query&amp;nbsp;configured.&amp;nbsp;Because&amp;nbsp;of&amp;nbsp;MySQL&amp;nbsp;connection&amp;nbsp;timeouts,&amp;nbsp;this&amp;nbsp;situation&amp;nbsp;can&amp;nbsp;cause&amp;nbsp;data&amp;nbsp;corruption&amp;nbsp;in&amp;nbsp;JIRA.&amp;nbsp;For&amp;nbsp;more&amp;nbsp;information&amp;nbsp;please&amp;nbsp;see&amp;nbsp;this&amp;nbsp;bug&amp;nbsp;report.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;以下是节选自官方解决方案的方法&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a href="http://confluence.atlassian.com/display/JIRA/Surviving+Connection+Closures"&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10pt; text-decoration: underline;"&gt;http://confluence.atlassian.com/display/JIRA/Surviving+Connection+Closures&lt;/span&gt;&lt;/a&gt;&lt;/p&gt; &lt;p&gt;&lt;a name="SurvivingConnectionClosures-SettingthevalidationQueryparameter"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 15pt; font-weight: bold;"&gt;Setting&amp;nbsp;the&amp;nbsp;validationQuery&amp;nbsp;parameter&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;In&amp;nbsp;your&amp;nbsp;application&amp;nbsp;server,&amp;nbsp;where&amp;nbsp;the&amp;nbsp;JDBC&amp;nbsp;DataSource&amp;nbsp;is&amp;nbsp;configured,&amp;nbsp;a&amp;nbsp;parameter&amp;nbsp;needs&amp;nbsp;to&amp;nbsp;be&amp;nbsp;added&amp;nbsp;to&amp;nbsp;tell&amp;nbsp;the&amp;nbsp;Connection&amp;nbsp;Pool&amp;nbsp;to&amp;nbsp;use&amp;nbsp;a&amp;nbsp;validation&amp;nbsp;query&amp;nbsp;(determined&amp;nbsp;above)&amp;nbsp;to&amp;nbsp;validate&amp;nbsp;connections.&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;a name="SurvivingConnectionClosures-JIRAStandalone(afterversion3.2)orJIRAEAR/WARonTomcat5.5andTomcat6.0"&gt;&lt;/a&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 11pt; font-weight: bold;"&gt;JIRA&amp;nbsp;Standalone&amp;nbsp;(after&amp;nbsp;version&amp;nbsp;3.2)&amp;nbsp;or&amp;nbsp;JIRA&amp;nbsp;EAR/WAR&amp;nbsp;on&amp;nbsp;Tomcat&amp;nbsp;5.5&amp;nbsp;and&amp;nbsp;Tomcat&amp;nbsp;6.0&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;JIRA&amp;nbsp;Standalone,&amp;nbsp;edit&amp;nbsp;conf/server.xml&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;JIRA&amp;nbsp;EAR/WAR&amp;nbsp;on&amp;nbsp;Tomcat&amp;nbsp;5.5&amp;nbsp;or&amp;nbsp;Tomcat&amp;nbsp;6.0,&amp;nbsp;edit&amp;nbsp;conf/Catalina/localhost/jira.xml&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;Locate&amp;nbsp;the&amp;nbsp;section&amp;nbsp;where&amp;nbsp;the&amp;nbsp;'jdbc/JiraDS'&amp;nbsp;DataSource&amp;nbsp;is&amp;nbsp;set&amp;nbsp;up,&amp;nbsp;and&amp;nbsp;add&amp;nbsp;the&amp;nbsp;following:&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Symbol'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;&amp;#183;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: bold;"&gt;MySQL&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;&amp;nbsp;or&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: bold;"&gt;MS&amp;nbsp;SQL&amp;nbsp;Server&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;,&amp;nbsp;add&amp;nbsp;validationQuery="select&amp;nbsp;1"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Symbol'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;&amp;#183;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: bold;"&gt;Oracle&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;,&amp;nbsp;add&amp;nbsp;validationQuery="select&amp;nbsp;1&amp;nbsp;from&amp;nbsp;dual"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Symbol'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;&amp;#183;&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;If&amp;nbsp;you&amp;nbsp;are&amp;nbsp;using&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: bold;"&gt;Postgres&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt;"&gt;,&amp;nbsp;add&amp;nbsp;validationQuery="select&amp;nbsp;version();"&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;For&amp;nbsp;example&amp;nbsp;(for&amp;nbsp;MySQL):&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;lt;Resource&amp;nbsp;name="jdbc/JiraDS"&amp;nbsp;auth="Container"&amp;nbsp;type="javax.sql.DataSource"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;driverClassName="com.mysql.jdbc.Driver"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;url="jdbc:mysql://localhost/jiradb?useUnicode=true&amp;amp;characterEncoding=UTF8"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;username="jirauser"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;password="jirapassword"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;maxActive="20"&amp;nbsp;&lt;/span&gt;&lt;/p&gt;  &lt;p&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;validationQuery="select&amp;nbsp;1"&amp;nbsp;/&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt; &lt;p&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;按照以上文档所写，就是在&lt;/span&gt;&amp;nbsp;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;conf/server.xml&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt; font-weight: normal;"&gt;或者新版本中的&lt;/span&gt;&lt;span style="font-family: 'Times New Roman'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10pt; font-weight: normal;"&gt;conf/Catalina/localhost/jira.xml&lt;/span&gt;&lt;span style="font-family: '宋体'; background: none repeat scroll 0% 0% #ffffff; color: #000000; font-size: 10.5pt; font-weight: normal;"&gt;添加以上蓝色内容即可解。只要按照文档做下来的话，一般只要加入&lt;/span&gt;&lt;span style="font-family: '宋体'; color: #0000ff; font-size: 10.5pt;"&gt;validationQuery="select&amp;nbsp;1"&lt;/span&gt;&lt;span style="font-family: '宋体'; font-size: 10.5pt;"&gt;这段即可。&lt;/span&gt;&lt;/p&gt;&lt;/div&gt; &lt;p&gt;本文出自 &amp;#8220;&lt;a href="http://tonyty163.blog.51cto.com/"&gt;滕赖赖的技术小窝&lt;/a&gt;&amp;#8221;  博客，转载请与作者联系！&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1946103.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2011/01/27/1946103.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2011/01/17/1937515.html</id><title type="text">[z]windows下Svn服务器之必须提交修改注释篇</title><summary type="text">1. 强制添加注释信息 找到Respositories目录下对应项目里的hooks目录下建立pre-commit.bat文件，复制如下内容：@echo off set SVNLOOK="C:\Program Files\VisualSVN\bin\svnlook.exe" setlocal set REPOS=%1 set TXN=%2 rem check that logmessage contains at least 10 characters %SVNLOOK% log "%REPOS%" -t "%TXN%" | findstr ".........." &gt; nul if %e</summary><published>2011-01-17T08:04:00Z</published><updated>2011-01-17T08:04:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2011/01/17/1937515.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2011/01/17/1937515.html"/><content type="html">&lt;p&gt;&lt;div&gt;&lt;span style="color: #0001ff;"&gt;1.  强制添加注释信息&lt;/span&gt; &lt;/div&gt;找到Respositories目录下对应项目里的hooks目录下建立pre-commit.bat文件，复制如下内容：&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;@echo off&lt;/div&gt; &lt;div id="_mcePaste"&gt;set SVNLOOK="C:\Program Files\VisualSVN\bin\svnlook.exe"&lt;/div&gt; &lt;div id="_mcePaste"&gt;setlocal&lt;/div&gt; &lt;div id="_mcePaste"&gt;set REPOS=%1&lt;/div&gt; &lt;div id="_mcePaste"&gt;set TXN=%2&lt;/div&gt; &lt;div id="_mcePaste"&gt;rem check that logmessage contains at least 10  characters&lt;/div&gt; &lt;div id="_mcePaste"&gt;%SVNLOOK% log "%REPOS%" -t "%TXN%" |  findstr ".........." &amp;gt; nul&lt;/div&gt; &lt;div id="_mcePaste"&gt;if %errorlevel% gtr 0 goto err&lt;/div&gt; &lt;div id="_mcePaste"&gt;exit 0&lt;/div&gt; &lt;div id="_mcePaste"&gt;:err&lt;/div&gt; &lt;div id="_mcePaste"&gt;echo Empty log message not allowed. Commit aborted!  1&amp;gt;&amp;amp;2&lt;/div&gt; &lt;div id="_mcePaste"&gt;exit 1&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;div&gt;&lt;span style="color: #0001ff;"&gt;2. 允许用户修改注释信息&lt;/span&gt;&lt;/div&gt;&lt;p&gt;&lt;div&gt;&lt;div&gt;找到Respositories目录下对应项目里的hooks目录下建立pre-revpos-change.bat，复制如下内容：&lt;/div&gt;&lt;p&gt;&lt;div&gt;@ECHO  OFF  &lt;br /&gt; set repos=%1 &lt;br /&gt; set rev=%2 &lt;br /&gt; set user=%3 &lt;br /&gt; set propname=%4 &lt;br /&gt; set action=%5 &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; :: Only allow changes to svn:log. The author, date and other revision &lt;br /&gt; :: properties cannot be changed &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; if /I not '%propname%'=='svn:log' goto ERROR_PROPNAME &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; :: Only allow modifications to svn:log (no addition/overwrite or  deletion) &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; if /I not '%action%'=='M' goto ERROR_ACTION &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; :: Make sure that the new svn:log message contains some text. &lt;br /&gt; :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: &lt;br /&gt; set bIsEmpty=true &lt;br /&gt; for /f "tokens=*" %%g in ('find /V ""') do ( &lt;br /&gt; &amp;nbsp;set bIsEmpty=false &lt;br /&gt; ) &lt;br /&gt; if '%bIsEmpty%'=='true' goto ERROR_EMPTY &lt;br /&gt; &amp;nbsp; &lt;br /&gt; goto :eof &lt;br /&gt; &amp;nbsp; &lt;br /&gt; &amp;nbsp; &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :ERROR_EMPTY &lt;br /&gt; echo Empty svn:log properties are not allowed. &amp;gt;&amp;amp;2 &lt;br /&gt; goto ERROR_EXIT &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :ERROR_PROPNAME &lt;br /&gt; echo Only changes to svn:log revision properties are allowed. &amp;gt;&amp;amp;2 &lt;br /&gt; goto ERROR_EXIT &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :ERROR_ACTION &lt;br /&gt; echo Only modifications to svn:log revision properties are allowed.  &amp;gt;&amp;amp;2 &lt;br /&gt; goto ERROR_EXIT &lt;br /&gt; &amp;nbsp; &lt;br /&gt; :ERROR_EXIT &lt;br /&gt; exit /b 1 &lt;/div&gt;&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&amp;nbsp;&lt;/p&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1937515.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2011/01/17/1937515.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2011/01/07/1930271.html</id><title type="text">利用角摩电子书控件开发电子书生成网站源码，支持手机、PC和IPAD手持电脑的电子书格式</title><summary type="text">对原有的电子书生成代码进行了分离，做成dll供软件和网站使用。适合C#开发的各类阅读软件使用，对于各类资讯、博客、微博等信息类网站也非常适合使用，让用户能方便地将自己喜欢的内容定制成电子书方便地与朋友分享，或者放到手机中随时随地阅读。asp.net调用源码下载：（注意阅读使用必读）源码下载(网站版)在线制作演示：http://www.joymo.cn/bookonline/目前支持jar手机电子书，epub，umd，chm，pdf等5种电子书格式的生成！自动拆分大的文本文件为多个合适的章节！自动识别不同编码格式文本内容！Jar格式支持书签，搜索，进度条提示，换字体，换背景色功能！</summary><published>2011-01-07T11:25:00Z</published><updated>2011-01-07T11:25:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2011/01/07/1930271.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2011/01/07/1930271.html"/><content type="html">&lt;p&gt;对原有的电子书生成代码进行了分离，做成dll供软件和网站使用。&lt;/p&gt;&lt;p&gt;&lt;div&gt;适合C#开发的各类阅读软件使用，对于各类资讯、博客、微博等信息类网站也非常适合使用，让用户能方便地将自己喜欢的内容定制成&lt;a href="http://www.joymo.cn/" target="_blank"&gt;电子书&lt;/a&gt;方便地与朋友分享，或者放到手机中随时随地阅读。&lt;br /&gt;&lt;br /&gt;asp.net调用源码下载：（注意阅读使用必读）&lt;br /&gt;&lt;br /&gt;&lt;a href="http://mail.d5game.com.cn/en/bookmake.rar" target="_blank"&gt;源码下载&lt;/a&gt;(网站版)&lt;/div&gt;&lt;div&gt;在线制作演示：&lt;a href="http://www.joymo.cn/bookonline/"&gt;http://www.joymo.cn/bookonline/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;目前支持&lt;a href="http://www.joymo.cn/" target="_blank"&gt;jar手机电子书&lt;/a&gt;，epub，umd，chm，pdf等5种电子书格式的生成！&lt;br /&gt;自动拆分大的文本文件为多个合适的章节！&lt;br /&gt;自动识别不同编码格式文本内容！&lt;br /&gt;Jar格式支持书签，搜索，进度条提示，换字体，换背景色功能！&lt;/div&gt;&amp;nbsp;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1930271.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2011/01/07/1930271.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/09/25/1834509.html</id><title type="text">角摩网官方论坛蛙铺网开放</title><summary type="text">蛙铺网作为角摩网的官方论坛采用discuz1.5X，主要面向对角摩软件的答疑和合作，以及ipad和android的交流论坛。基于.cn域名的严重不靠谱，蛙铺网采用的域名http://www.iiwap.net，以后角摩的业务会慢慢调整到蛙铺网。蛙铺网会继续加强手机电子书在线制作功能，未来会添加网页直接生成epub电子书。</summary><published>2010-09-25T05:50:00Z</published><updated>2010-09-25T05:50:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/09/25/1834509.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/09/25/1834509.html"/><content type="html">&lt;p&gt;&lt;a href="http://www.iiwap.net/"&gt;蛙铺网&lt;/a&gt;作为角摩网的官方论坛采用discuz1.5X，主要面向对角摩软件的答疑和合作，以及ipad和android的交流论坛。基于.cn域名的严重不靠谱，蛙铺网采用的域名http://www.iiwap.net，以后角摩的业务会慢慢调整到蛙铺网。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;蛙铺网会继续加强&lt;a href="http://www.joymo.cn/"&gt;手机电子书&lt;/a&gt;在线制作功能，未来会添加网页直接生成epub电子书。&lt;br /&gt;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1834509.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/09/25/1834509.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/09/16/1828409.html</id><title type="text">新型的大型bbs架构（squid+nginx）</title><summary type="text">这个架构基于squid、nginx和lvs等技术，从架构上对bbs进行全面优化和保护，有如下特点： 1、高性能：所有的点击基本上全部由前端缓存负责，提供最快速的处理。 2、高保障度：不需考虑应用程序稳定与否、程序语言是何种、数据库是何种，都能从架构上保证稳定。 3、高可用性：对应用程序的修改达到最简化：在程序的某些地方加入清缓存的语句即可，当然还需要做页面静态化的工作和统计工作。 首先看图...</summary><published>2010-09-16T13:15:00Z</published><updated>2010-09-16T13:15:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828409.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828409.html"/><content type="html">这个架构基于squid、nginx和lvs等技术，从架构上对bbs进行全面优化和保护，有如下特点：&lt;br /&gt; &lt;br /&gt; 1、高性能：所有的点击基本上全部由前端缓存负责，提供最快速的处理。&lt;br /&gt; &lt;br /&gt; 2、高保障度：不需考虑应用程序稳定与否、程序语言是何种、数据库是何种，都能从架构上保证稳定。&lt;br /&gt; &lt;br /&gt; 3、高可用性：对应用程序的修改达到最简化：在程序的某些地方加入清缓存的语句即可，当然还需要做页面静态化的工作和统计工作。&lt;br /&gt; &lt;br /&gt; 首先看图，这个图比较大：&lt;br /&gt; &lt;br /&gt; &lt;img src="http://www.sudone.com/images/archi_bbs.png"  alt="" /&gt;&lt;br /&gt; &lt;br /&gt; 这个架构的特点和一些流程的说明：&lt;br /&gt; &lt;br /&gt; 1、主域名和图片域名分离&lt;br /&gt; &lt;br /&gt; 域名分离可以使流量分离，缓存策略分离等等，好处诸多。bbs初期一定要做好规划，将图片用另外的域名独立服务，即使没有足够机器，域名也要先分开。另 外，图片服务器可以使用有别于主域名的另一个域名，一个好处是可以减少读取cookie对图片服务器的压力，另一个是提高安全性，避免cookie泄露。&lt;br /&gt; &lt;br /&gt; 2、使用LVS作为前端、二级代理和数据库的访问入口&lt;br /&gt; &lt;br /&gt; 使用LVS作为入口，比其他任何一种方式都来得更优质。首先LVS的负载能力很强，因为它工作在网络协议的第4层，使用虚拟ip技术，所以它本身并不担负 任何流量的处理，仅仅是一个封包转发的功能；第二，LVS的配置相对简单而且稳定，一般去调整的几率比较低，也减少了因人为等因素而出现故障；第 三，LVS可以处理任何端口的负载均衡，所以它基本可以做所有服务的负载均衡和容错。在这个架构中，除了处理http的80端口之外，LVS也处理了数据 库mysql的3306端口，在数据库这个应用中是采用的双机热备策略。&lt;br /&gt; &lt;br /&gt; 3、使用nginx+squid作为最前端的缓存组合&lt;br /&gt; &lt;br /&gt; 在这个架构中，是最能体现app_nginx_squid_nginx架构的优势的。在这个架构中的bbs运行在缓存上，用户每发布一张帖子，都需要使用 purge指令清除该帖子的缓存，如果是squid在最前端，那么每次发布一张帖子，都需要在所有的squid中调用purge指令，这样在机器比较多的 时候，purge将成为一个巨大的压力。&lt;br /&gt; &lt;br /&gt; 所以在这里将nginx放在最前端并使用手工url_hash的方式分流，将经常需要purge的帖子页面和列表页面按一个url对应一台squid的策 略，分布到各台squid上，并提供了一台或一组backup的squid，个别squid出现异常时将自动使用backup的机器继续提供一段时间的服 务直到其正常。在这样的架构下，purge就不再是关键问题，因为一个url只会对应到一台机器上，所以purge的时候，后端app_server找到 对应的机器就可以了。&lt;br /&gt; &lt;br /&gt; 可以看到在前端中还有一台nginx(purge)的机器，这台机器是专用于purge的，只要发送purge指令和需要清除的url到这台机器，就可以 找到相应的服务器并清除缓存了。另外，purge时还需要清理backup机器上的缓存，所以无论前端机器增加到多少，purge指令只会在2台机器上执 行，如果backup机器使用到2-3台，purge指令就会在3-4台机器上执行，仍然在可接受范围之内。&lt;br /&gt; &lt;br /&gt; nginx作为前端，另有的好处：&lt;br /&gt; &lt;br /&gt; 1/使用nginx的日志统计点击量非常方便&lt;br /&gt; 2/nginx也可作为缓存，一般可以直接负责favicon.ico和logo等固定的小图片&lt;br /&gt; &lt;br /&gt; 4、基于nginx的中层代理&lt;br /&gt; &lt;br /&gt; nginx中层代理的优势，在：&lt;br /&gt; &lt;br /&gt; &lt;a href="http://www.sudone.com/archie/app_nginx_squid.html" target="_blank"&gt;nginx和squid配合搭建的web服务器前端系统&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 这篇文章中有解释。&lt;br /&gt; &lt;br /&gt; 在这个架构中，假如后端的app_server上把帖子页和列表页直接生成了静态页面，那么使用中层代理再做一次url_hash，将可以解决后端 app_server的硬盘容量的压力，但是如果使用到url_hash的话，那做容错就相对麻烦了。所以建议不要采用生成静态页的方式，后端的压力一般 不会非常的大，所以没有必要生成静态页。假如前端squid的命中率实在太低下，造成大量穿透，可以考虑使用二级代理暂顶。&lt;br /&gt; &lt;br /&gt; 5、基于LVS的数据库双机热备&lt;br /&gt; &lt;br /&gt; 在这个架构中，因为大量的并发和访问量都由前端的缓存处理掉了，所以后端的mysql主要压力来自于数据的写入，所以压力并不是非常大，并且负载比较稳 定，一般不会随着访问量上升而提高过快，估计目前一台64位的机器，加满内存并使用高速的硬盘，前端负载数亿访问量时数据库都不会出现性能问题。在数据库 这方面应主要考虑故障恢复，因为数据库崩溃的话，按照一般使用备份恢复的做法，耗时很长而且难免丢失数据，是很棘手的问题。使用双机热备的方案，出现故障 时首先可由一台时刻同步着的备用数据库即刻充当主数据库，然后卸下的数据库可以有充分的时间对其进行维修，所以是个很安全有效的办法。&lt;br /&gt; &lt;br /&gt; 当然，数据库的优化还是要细心做的，参考：&lt;br /&gt; &lt;br /&gt; &lt;a href="http://www.sudone.com/linux/mysql_debug.html" target="_blank"&gt;mysql性能的检查和调优方法&lt;/a&gt;&lt;br /&gt; &lt;br /&gt; 细心地调一遍，性能会好很多。&lt;br /&gt; &lt;br /&gt; 6、图片服务器&lt;br /&gt; &lt;br /&gt; 图片服务器我在这个架构中没有特别详细的介绍，在大型的bbs系统下，图片常常会出现容灾现象&amp;#8212;&amp;#8212;图片数量严重超过了单台前端服务器容纳能力，导致前端服务器命中率低下。处理容灾问题也是非常棘手的，往后会有更详细的介绍。&lt;br /&gt; &lt;br /&gt; 7、简单的点击量统计办法&lt;br /&gt; &lt;br /&gt; 1/使用js的script标签访问另一（台）组服务器的空文件，然后定期向数据库更新&lt;br /&gt; 2/在前端的nginx上直接开启日志功能，按需要统计点击量的链接规则进行记录，然后定期更新数据库&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1828409.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828409.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/09/16/1828406.html</id><title type="text">mysql性能的检查和调优方法</title><summary type="text">我一直是使用mysql这个数据库软件，它工作比较稳定，效率也很高。在遇到严重性能问题时，一般都有这么几种可能： 1、索引没有建好； 2、sql写法过于复杂； 3、配置错误； 4、机器实在负荷不了； 1、索引没有建好 如果看到mysql消耗的cpu很大，可以用mysql的client工具来检查。 在linux下执行 /usr/local/mysql/bin/mysql -hlocalhos...</summary><published>2010-09-16T13:08:00Z</published><updated>2010-09-16T13:08:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828406.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828406.html"/><content type="html">我一直是使用mysql这个数据库软件，它工作比较稳定，效率也很高。在遇到严重性能问题时，一般都有这么几种可能：&lt;br /&gt; &lt;br /&gt; 1、索引没有建好；&lt;br /&gt; 2、sql写法过于复杂；&lt;br /&gt; 3、配置错误；&lt;br /&gt; 4、机器实在负荷不了；&lt;br /&gt; &lt;br /&gt; 1、索引没有建好&lt;br /&gt; &lt;br /&gt; 如果看到mysql消耗的cpu很大，可以用mysql的client工具来检查。&lt;br /&gt; &lt;br /&gt; 在linux下执行&lt;br /&gt; &lt;br /&gt; /usr/local/mysql/bin/mysql -hlocalhost -uroot -p &lt;br /&gt; &lt;br /&gt; 输入密码，如果没有密码，则不用-p参数就可以进到客户端界面中。&lt;br /&gt; &lt;br /&gt; 看看当前的运行情况&lt;br /&gt; &lt;br /&gt; show full processlist&lt;br /&gt; &lt;br /&gt; 可以多运行几次&lt;br /&gt; &lt;br /&gt; 这个命令可以看到当前正在执行的sql语句，它会告知执行的sql、数据库名、执行的状态、来自的客户端ip、所使用的帐号、运行时间等信息&lt;br /&gt; &lt;br /&gt; 在我的cache后端，这里面大部分时间是看不到显示任何sql语句的，我认为这样才算比较正常。如果看到有很多sql语句，那么这台mysql就一定会有性能问题&lt;br /&gt; &lt;br /&gt; 如果出现了性能问题，则可以进行分析：&lt;br /&gt; &lt;br /&gt; 1、是不是有sql语句卡住了？&lt;br /&gt; &lt;br /&gt; 这是出现比较多的情况，如果数据库是采用myisam，那么有可能有一个写入的线程会把数据表给锁定了，如果这条语句不结束，则其它语句也无法运行。&lt;br /&gt; &lt;br /&gt; 查看processlist里的time这一项，看看有没有执行时间很长的语句，要留意这些语句。&lt;br /&gt; &lt;br /&gt; 2、大量相同的sql语句正在执行&lt;br /&gt; &lt;br /&gt; 如果出现这种情况，则有可能是该sql语句执行的效率低下，同样要留意这些语句。&lt;br /&gt; &lt;br /&gt; 然后把你所怀疑的语句统统集合一下，用desc（explain）来检查这些语句。&lt;br /&gt; &lt;br /&gt; 首先看看一个正常的desc输出：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where imgid=1651768337;&lt;br /&gt; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+&lt;br /&gt; | id | select_type | table | type&amp;nbsp;&amp;nbsp; | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | key_len | ref&amp;nbsp;&amp;nbsp;  | rows | Extra |&lt;br /&gt; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | const | PRIMARY&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | PRIMARY | 8&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | const |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 1 |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+-------+---------------+---------+---------+-------+------+-------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 注意key、rows和Extra这三项，这条语句返回的结果说明了该sql会使用PRIMARY主键索引来查询，结果集数量为1条，Extra没有显 示，证明没有用到排序或其他操作。由此结果可以推断，mysql会从索引中查询imgid=1651768337这条记录，然后再到真实表中取出所有字 段，是很简单的操作。&lt;br /&gt; &lt;br /&gt; key是指明当前sql会使用的索引，mysql执行一条简单语句时只能使用到一条索引，注意这个限制；rows是返回的结果集大小，结果集就是使用该索引进行一次搜索的所有匹配结果；Extra一般会显示查询和排序的方式，。&lt;br /&gt; &lt;br /&gt; 如果没有使用到key，或者rows很大而用到了filesort排序，一般都会影响到效率，例如：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where userid="7mini" order by clicks desc limit 10;&lt;br /&gt; +----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+&lt;br /&gt; | id | select_type | table | type | possible_keys | key&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp; | rows&amp;nbsp;&amp;nbsp; | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | ALL&amp;nbsp;&amp;nbsp; | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL | NULL&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | NULL | 12506 | Using where; Using filesort |&lt;br /&gt; +----+-------------+-------+------+---------------+------+---------+------+-------+-----------------------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 这条sql结果集会有12506条，用到了filesort，所以执行起来会非常消耗效率的。这时mysql执行时会把整个表扫描一遍，一条一条去找到匹 配userid="7mini"的记录，然后还要对这些记录的clicks进行一次排序，效率可想而知。真实执行时如果发现还比较快的话，那是因为服务器 内存还足够将12506条比较短小的记录全部读入内存，所以还比较快，但是并发多起来或者表大起来的话，效率问题就严重了。&lt;br /&gt; &lt;br /&gt; 这时我把userid加入索引：&lt;br /&gt; &lt;br /&gt; create index userid on imgs (userid);&lt;br /&gt; &lt;br /&gt; 然后再检查：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where userid="7mini" order by clicks desc limit 10;&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; | id | select_type | table | type | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp;  | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | ref&amp;nbsp;&amp;nbsp; | userid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | userid | 51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | const |&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; 8 | Using where; Using filesort |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 嗯，这时可以看到mysql使用了userid这个索引搜索了，用userid索引一次搜索后，结果集有8条。然后虽然使用了filesort一条一条排序，但是因为结果集只有区区8条，效率问题得以缓解。&lt;br /&gt; &lt;br /&gt; 但是，如果我用别的userid查询，结果又会有所不同：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where userid="admin" order by clicks desc limit 10;&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; | id | select_type | table | type | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp;  | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | ref&amp;nbsp;&amp;nbsp; | userid&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | userid | 51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | const | 2944 | Using where; Using filesort |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 这个结果和userid="7mini"的结果基本相同，但是mysql用userid索引一次搜索后结果集的大小达到2944条，这2944条记录都会 加入内存进行filesort，效率比起7mini那次来说就差很多了。这时可以有两种办法可以解决，第一种办法是再加一个索引和判断条件，因为我只需要 根据点击量取最大的10条数据，所以有很多数据我根本不需要加进来排序，比如点击量小于10的，这些数据可能占了很大部分。&lt;br /&gt; &lt;br /&gt; 我对clicks加一个索引，然后加入一个where条件再查询：&lt;br /&gt; &lt;br /&gt; create index clicks on imgs(clicks);&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where userid="admin" order by clicks desc limit 10;&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; | id | select_type | table | type | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp;  | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | ref&amp;nbsp;&amp;nbsp; | userid,clicks | userid | 51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | const | 2944 | Using where; Using filesort |&lt;br /&gt; +----+-------------+-------+------+---------------+--------+---------+-------+------+-----------------------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 这时可以看到possible_keys变成了userid,clicks，possible_keys是可以匹配的所有索引，mysql会从 possible_keys中自己判断并取用其中一个索引来执行语句，值得注意的是，mysql取用的这个索引未必是最优化的。这次查询mysql还是使 用userid这个索引来查询的，并没有按照我的意愿，所以结果还是没有什么变化。改一下sql加上use  index强制mysql使用clicks索引：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs use index (clicks) where userid='admin' and clicks&amp;gt;10 order by clicks desc limit 10&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; | id | select_type | table | type&amp;nbsp;&amp;nbsp; | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp; | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | range | clicks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | clicks | 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | NULL | 5455 | Using where |&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 这时mysql用到了clicks索引进行查询，但是结果集比userid还要大！看来还要再进行限制：&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs use index (clicks) where userid='admin' and clicks&amp;gt;1000 order by clicks desc limit 10&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; | id | select_type | table | type&amp;nbsp;&amp;nbsp; | possible_keys | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key_len | ref&amp;nbsp;&amp;nbsp; | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | range | clicks&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | clicks | 4&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | NULL |&amp;nbsp;&amp;nbsp; 312 | Using where |&lt;br /&gt; +----+-------------+-------+-------+---------------+--------+---------+------+------+-------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 加到1000的时候结果集变成了312条，排序效率应该是可以接受。&lt;br /&gt; &lt;br /&gt; 不过，采用换索引这种优化方式需要取一个采样点，比如这个例子中的1000这个数字，这样，对userid的每个数值，都要去找一个采样点，这样对程序来 说是很难办的。如果按1000取样的话，那么userid='7mini'这个例子中，取到的结果将不会是8条，而是2条，给用户造成了困惑。&lt;br /&gt; &lt;br /&gt; 当然还有另一种办法，加入双索引：&lt;br /&gt; &lt;br /&gt; create index userid_clicks on imgs (userid, clicks)&lt;br /&gt; &lt;br /&gt; mysql&amp;gt; desc select * from imgs where userid="admin" order by clicks desc limit 10;&lt;br /&gt; +----+-------------+-------+------+----------------------+---------------+---------+-------+------+-------------+&lt;br /&gt; | id | select_type | table | type | possible_keys&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | key&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  | key_len | ref&amp;nbsp;&amp;nbsp;  | rows | Extra&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;  |&lt;br /&gt; +----+-------------+-------+------+----------------------+---------------+---------+-------+------+-------------+&lt;br /&gt; |&amp;nbsp;&amp;nbsp; 1 | SIMPLE&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | imgs&amp;nbsp;&amp;nbsp; | ref&amp;nbsp;&amp;nbsp; | userid,userid_clicks | userid_clicks | 51&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; | const | 2944 | Using where |&lt;br /&gt; +----+-------------+-------+------+----------------------+---------------+---------+-------+------+-------------+&lt;br /&gt; 1 row in set (0.00 sec)&lt;br /&gt; &lt;br /&gt; 这时可以看到，结果集还是2944条，但是Extra中的filesort不见了。这时mysql使用userid_clicks这个索引去查询，这不但 能快速查询到userid="admin"的所有记录，并且结果是根据clicks排好序的！所以不用再把这个结果集读入内存一条一条排序了，效率上会高 很多。&lt;br /&gt; &lt;br /&gt; 但是用多字段索引这种方式有个问题，如果查询的sql种类很多的话，就得好好规划一下了，否则索引会建得非常多，不但会影响到数据insert和update的效率，而且数据表也容易损坏。&lt;br /&gt; &lt;br /&gt; 以上是对索引优化的办法，因为原因可能会比较复杂，所以写得比较的长，一般好好优化了索引之后，mysql的效率会提升n个档次，从而也不需要考虑增加机器来解决问题了。&lt;br /&gt; &lt;br /&gt; 但是，mysql甚至所有数据库，可能都不好解决limit的问题。在mysql中，limit 0,10只要索引合适，是没有问题的，但是limit  100000,10就会很慢了，因为mysql会扫描排好序的结果，然后找到100000这个点，取出10条返回。要找到100000这个点，就要扫描 100000条记录，这个循环是比较耗时的。不知道会不会有什么好的算法可以优化这个扫描引擎，我冥思苦想也想不出有什么好办法。对于limit，目前直 至比较久远的将来，我想只能通过业务、程序和数据表的规划来优化，我想到的这些优化办法也都还没有一个是万全之策，往后再讨论。&lt;br /&gt; &lt;br /&gt; 2、sql写法过于复杂&lt;br /&gt; &lt;br /&gt; sql写法假如用到一些特殊的功能，比如groupby、或者多表联合查询的话，mysql用到什么方式来查询也可以用desc来分析，我这边用复杂sql的情况还不算多，所以不常分析，暂时就没有好的建议。&lt;br /&gt; &lt;br /&gt; 3、配置错误&lt;br /&gt; &lt;br /&gt; 配置里主要参数是key_buffer、sort_buffer_size/myisam_sort_buffer_size，这两个参数意思是：&lt;br /&gt; &lt;br /&gt; key_buffer=128M：全部表的索引都会尽可能放在这块内存区域内，索引比较大的话就开稍大点都可以，我一般设为128M，有个好的建议是把很少用到并且比较大的表想办法移到别的地方去，这样可以显著减少mysql的内存占用。&lt;br /&gt; sort_buffer_size=1M：单个线程使用的用于排序的内存，查询结果集都会放进这内存里，如果比较小，mysql会多放几次，所以稍微开大一点就可以了，重要是优化好索引和查询语句，让他们不要生成太大的结果集。&lt;br /&gt; &lt;br /&gt; 另外一些配置：&lt;br /&gt; thread_concurrency=8：这个配置标配=cpu数量x2&lt;br /&gt; interactive_timeout=30&lt;br /&gt; wait_timeout=30：这两个配置使用10-30秒就可以了，这样会尽快地释放内存资源，注意：一直在使用的连接是不会断掉的，这个配置只是断掉了长时间不动的连接。&lt;br /&gt; query_cache：这个功能不要使用，现在很多人看到cache这几个字母就像看到了宝贝，这是不唯物主义的。mysql的query_cache 在每次表数据有变化的时候都会重新清理连至该表的所有缓存，如果更新比较频繁，query_cache不但帮不上忙，而且还会对效率影响很大。这个参数只 适合只读型的数据库，如果非要用，也只能用query_cache_type=2自行用SQL_CACHE指定一些sql进行缓存。&lt;br /&gt; max_connections：默认为100，一般情况下是足够用的，但是一般要开大一点，开到400-600就可以了，能超过600的话一般就有效率问题，得另找对策，光靠增加这个数字不是办法。&lt;br /&gt; &lt;br /&gt; 其它配置可以按默认就可以了，个人觉得问题还不是那么的大，提醒一下：1、配置虽然很重要，但是在绝大部分情况下都不是效率问题的罪魁祸首。2、mysql是一个数据库，对于数据库最重要考究的不应是效率，而是稳定性和数据准确性。&lt;br /&gt; &lt;br /&gt; 4、机器实在负荷不了&lt;br /&gt; &lt;br /&gt; 如果做了以上调整，服务器还是不能承受，那就只能通过架构级调整来优化了。&lt;br /&gt; &lt;br /&gt; 1、mysql同步。&lt;br /&gt; &lt;br /&gt; 通过mysql同步功能将数据同步到数台从数据库，由主数据库写入，从数据库提供读取。&lt;br /&gt; &lt;br /&gt; 我个人不是那么乐意使用mysql同步，因为这个办法会增加程序的复杂性，并常常会引起数据方面的错误。在高负荷的服务中，死机了还可以快速重启，但数据错误的话要恢复就比较麻烦。&lt;br /&gt; &lt;br /&gt; 2、加入缓存&lt;br /&gt; &lt;br /&gt; 加入缓存之后，就可以解决并发的问题，效果很明显。如果是实时系统，可以考虑用刷新缓存方式使缓存保持最新。&lt;br /&gt; &lt;br /&gt; 在前端加入squid的架构比较提倡使用，在命中率比较高的应用中，基本上可以解决问题。&lt;br /&gt; &lt;br /&gt; 如果是在程序逻辑层里面进行缓存，会增加很多复杂性，问题会比较多而且难解决，不建议在这一层面进行调整。&lt;br /&gt; &lt;br /&gt; 3、程序架构调整，支持同时连接多个数据库&lt;br /&gt; &lt;br /&gt; 如果web加入缓存后问题还是比较严重，只能通过程序架构调整，把应用拆散，用多台的机器同时提供服务。&lt;br /&gt; &lt;br /&gt; 如果拆散的话，对业务是有少许影响，如果业务当中有部分功能必须使用所有的数据，可以用一个完整库+n个分散库这样的架构，每次修改都在完整库和分散库各操作一次，或定期整理完整库。&lt;br /&gt; &lt;br /&gt; 当然，还有一种最笨的，把数据库整个完完整整的做拷贝，然后程序每次都把完整的sql在这些库执行一遍，访问时轮询访问，我认为这样要比mysql同步的方式安全。&lt;br /&gt; &lt;br /&gt; 4、使用 mysql proxy 代理&lt;br /&gt; &lt;br /&gt; mysql proxy 可以通过代理把数据库中的各个表分散到数台服务器，但是它的问题是没有能解决热门表的问题，如果热门内容散在多个表中，用这个办法是比较轻松就能解决问题。&lt;br /&gt; &lt;br /&gt; 我没有用过这个软件也没有认真查过，不过我对它的功能有一点点怀疑，就是它怎么实现多个表之间的联合查询？如果能实现，那么效率如何呢？&lt;br /&gt; &lt;br /&gt; 5、使用memcachedb&lt;br /&gt; &lt;br /&gt; 数据库换用支持mysql的memcachedb，是可以一试的想法，从memcachedb的实现方式和层面来看对数据没有什么影响，不会对用户有什么困扰。&lt;br /&gt; &lt;br /&gt; 为我现在因为数据库方面问题不多，没有试验过这个玩意。不过，只要它支持mysql的大部分主要的语法，而且本身稳定，可用性是无需置疑的。&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1828406.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/09/16/1828406.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/09/14/1825753.html</id><title type="text">做了个绿色小巧的jar电子书生成制作工具</title><summary type="text">根据一些网友对jar电子书制作的需求，专门改装了一个小巧的jar生成工具。只有115K，打开rar就可以使用！ 1.自动识别GBK、UTF_8和Unicode各种txt文件； 2.支持目录、单个文件、多文件拖入以及直接添加内容的方式； 3.自动对大尺寸内容进行拆分，拆分的内容大小为150K，拆分不会产生乱码； 4.支持目前市面绝大多数手机； 5.自动定位生成的Jar文件； 6.不需要ja...</summary><published>2010-09-14T03:43:00Z</published><updated>2010-09-14T03:43:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/09/14/1825753.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/09/14/1825753.html"/><content type="html">根据一些网友对jar电子书制作的需求，专门改装了一个小巧的jar生成工具。只有115K，打开rar就可以使用！&amp;nbsp; &lt;p&gt;1.自动识别GBK、UTF_8和Unicode各种txt文件；&lt;br /&gt; &amp;nbsp; 2.支持目录、单个文件、多文件拖入以及直接添加内容的方式；&lt;br /&gt; &amp;nbsp; 3.自动对大尺寸内容进行拆分，拆分的内容大小为150K，拆分不会产生乱码；&lt;br /&gt; &amp;nbsp; 4.支持目前市面绝大多数手机；&lt;br /&gt; &amp;nbsp; 5.自动定位生成的Jar文件；&lt;br /&gt; &amp;nbsp; 6.不需要java环境支持；&lt;br /&gt; &amp;nbsp; 7.支持中文文件名。&lt;br /&gt; &amp;nbsp;8.直接将UMD格式转化为JAR。图片格式的UMD文件，会将图片提取到软件所在的目录。&lt;/p&gt;&lt;div align="center"&gt;&lt;img src="http://www.joymo.cn/UpFiles/DownLoad/DownPhoto/201009/2010091317115599725_S.jpg" alt="" border="0" height="200" width="250" /&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1825753.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/09/14/1825753.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/08/08/1795124.html</id><title type="text">jar共存制作器（网站版）开发完成</title><summary type="text">为智能手机网站提供实时jar共存软件的生成制作！使用非常方便1）通过软件配置好相关目录后，按保存，生成asp源代码，上传到网站任意目录；2）提供本地jar、远程jar和下拉框选择三种模式的制作方式，可以任意选择组合。下载：http://www.joymo.cn/upfiles/iiwap.net-jar.rar</summary><published>2010-08-08T06:13:00Z</published><updated>2010-08-08T06:13:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/08/08/1795124.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/08/08/1795124.html"/><content type="html">&lt;p&gt;为智能手机网站提供实时jar共存软件的生成制作！&lt;/p&gt;&lt;p&gt;&lt;img src="http://images.cnblogs.com/cnblogs_com/freemobile/jarmake.JPG" width="386" height="322" alt="" /&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;使用非常方便&lt;/p&gt;&lt;p&gt;1）通过软件配置好相关目录后，按保存，生成asp源代码，上传到网站任意目录；&lt;/p&gt;&lt;p&gt;2）提供本地jar、远程jar和下拉框选择三种模式的制作方式，可以任意选择组合。&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;下载：http://www.joymo.cn/upfiles/iiwap.net-jar.rar&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1795124.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/08/08/1795124.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/freemobile/archive/2010/07/13/1776828.html</id><title type="text">joymobiler V2.7发布，支持pdf文档的生成</title><summary type="text">采用pdflib控件，生成速度相当快。支持打开zip里的文件。界面如下</summary><published>2010-07-13T14:48:00Z</published><updated>2010-07-13T14:48:00Z</updated><author><name>freemobile</name><uri>http://www.cnblogs.com/freemobile/</uri></author><link rel="alternate" href="http://www.cnblogs.com/freemobile/archive/2010/07/13/1776828.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/freemobile/archive/2010/07/13/1776828.html"/><content type="html">&lt;p&gt;采用pdflib控件，生成速度相当快。&lt;/p&gt;&lt;p&gt;支持打开zip里的文件。&lt;br /&gt;&lt;/p&gt;&lt;p&gt;界面如下&lt;/p&gt;&lt;p&gt;&lt;img alt="" src="http://images.cnblogs.com/cnblogs_com/freemobile/jm.JPG" height="521" width="769" /&gt;&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/freemobile/aggbug/1776828.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/freemobile/archive/2010/07/13/1776828.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
