<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>温室小花.技术.博客 --纯粹的unix技术博客 &#187; 数据库</title>
	<atom:link href="http://www.evanjiang.net.cn/archives/category/database/feed" rel="self" type="application/rss+xml" />
	<link>http://www.evanjiang.net.cn</link>
	<description>红颜弹指老，刹那芳华，与其天涯思君，恋恋不舍，莫若相忘于江湖！</description>
	<lastBuildDate>Sun, 05 Sep 2010 14:51:18 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0.1</generator>
		<item>
		<title>DB2双机安装过程</title>
		<link>http://www.evanjiang.net.cn/archives/1473.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1473.html#comments</comments>
		<pubDate>Sun, 11 Apr 2010 03:41:55 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1473</guid>
		<description><![CDATA[<p>


 <p>DB2版本：8.2
操作系统：5.3
主机名：A机:H80a   B机:H80b </p>
<p>用户：
A机
user            user id       group            groupid              home directory
db2inst1   [...]]]></description>
			<content:encoded><![CDATA[<p style="float: left;margin: 4px;"><script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 160x600, 创建于 10-2-7 */
google_ad_slot = "8970910006";
google_ad_width = 160;
google_ad_height = 600;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script></p> <p>DB2版本：8.2<br />
操作系统：5.3<br />
主机名：A机:H80a   B机:H80b </p>
<p>用户：<br />
A机<br />
user            user id       group            groupid              home directory<br />
db2inst1        209           db2iadm1          206                 /home/db2inst1<br />
db2fenc1        210           db2fgrp1          103                 /home/db2fenc1<br />
dasusr1         110           dasadm1           101                 /home/dasusr1（本地） </p>
<p>B机<br />
user            user id       group            groupid              home directory<br />
db2inst1        209           db2iadm1          206                 /home/db2inst1<br />
db2fenc1        210           db2fgrp1          103                 /home/db2fenc1<br />
dasusr1         111           dasadm1           102                 /home/dasusr1(本地） </p>
<p>两边的das用户主目录都在本地，instance用户和fence用户的主目录都在共享卷组上<br />
注意：两台机的instance用户和fence用户的ID号，组的ID号都要一样<br />
<span id="more-1473"></span><br />
共享vg: 7133vg<br />
lv name                    mount point<br />
db2inst1lv                /home/db2inst1<br />
db2fenc1lv                /home/db2fenc1<br />
lv05                      /db2log             &#8212;&#8212;&#8212;-db2日志文件<br />
db2databa                 /db2data            &#8212;&#8212;&#8212;-db2inst1的数据库文件 </p>
<p>实例名：db2inst1<br />
数据库：testdb </p>
<p><a href="http://ad.zanox.com/ppc/?15139536C65181673T"><img src="http://ad.zanox.com/ppv/?15139536C65181673" align="bottom" width="728" height="90" border="0" hspace="1" alt="bookair b008 728x90"></a><br />
配置过程： </p>
<p>以下操作在A机上完成： </p>
<p>1. 建立共享卷组7133vg<br />
   创建lv:db2inst1lv,db2fenc1lv,db2databa<br />
   创建文件系统：/home/db2inst1,/home/db2fenc1,/db2log,/db2data<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
2. 创建用户db2inst1和db2fenc1<br />
   创建组db2iadm1,db2fgrp1 </p>
<p>3. 安装数据库<br />
   建立光驱文件系统<br />
   mount /cdrom<br />
   cd /cdrom<br />
   ./db2setup<br />
   安装过程中建立dasusr1用户和dasadm1组<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
4. 将相关路径的权限设定到指定用户<br />
   chown -R db2inst1:db2iadm1 /home/db2inst1<br />
   chown -R db2fenc1:db2fgrp1 /home/db2fenc1<br />
   chown -R db2inst1:db2iadm1 /db2data<br />
   chown -R db2inst1:db2iadm1 /db2log </p>
<p>5. 创建实例db2inst1<br />
   cd /usr/opt/db2_08_01/instance<br />
   ./db2icrt -u db2fenc1 db2inst1 </p>
<p>6. 创建数据库testdb<br />
   su &#8211; db2inst1<br />
   db2start<br />
   db2 create database testdb on /db2data<br />
   db2 update db cfg for testdb using newlogpath /db2log<br />
   db2 terminate<br />
   db2stop<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
7. unmount /home/db2inst1<br />
   unmount /home/db2fenc1<br />
   unmount /db2log<br />
   unmount /db2data<br />
   varyoffvg 7133vg </p>
<p>以下操作在B机完成： </p>
<p>1. 同步共享卷组<br />
   importvg -y 7133vg hdiskX<br />
   mount /home/db2inst1<br />
   mount /home/db2fenc1<br />
   mount /db2log<br />
   mount /db2data<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
2. 创建用户db2inst1和db2fenc1<br />
   创建组db2iadm1,db2fgrp1<br />
   注意：以上用户和组的ID号都要和A机上的相同 </p>
<p>3. 安装数据库<br />
   建立光驱文件系统<br />
   mount /cdrom<br />
   cd /cdrom<br />
   ./db2setup<br />
   安装过程中建立dasusr1用户和dasadm1组<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
4. 创建实例db2inst1<br />
   mv /home/db2inst1/sqllib /home/db2inst1/sqllib.a<br />
   cd /usr/opt/db2_08_01/instance<br />
   ./db2icrt -u db2fenc1 db2inst1<br />
   rm -R /home/db2inst1/sqllib<br />
   mv /home/db2inst1/sqllib.a /home/db2inst1/sqllib<br />
   cp /home/db2inst1/sqllib/db2nodes.cfg.b /home/db2inst1/sqllib/db2nodes.cfg(在hacmp环境中把该命令加到ha的启动脚本里） </p>
<p>5. 修改/etc/services文件<br />
   对照A机的/etc/services文件添加db2的端口号，两台机的端口号要保持一致 </p>
<p>6. 启动数据库<br />
   su &#8211; db2inst1<br />
   db2start<br />
   db2 connect to testdb<br />
   安装成功 </p>
<p>注意：db2nodes.cfg文件中的主机名必须和运行DB2的主机名保持一致，因此可以在两台机的本地保存一个db2nodes.cfg的备份<br />
      在hacmp的脚本中加入用本地db2nodes.cfg文件覆盖/home/db2inst1/sqllib/db2nodes.cfg的命令 </p>
<p>以上安装过程省略了hacmp的安装配置过程 </p>
<p>A机db2nodes.cfg.a的内容为：<br />
0 H80a 0 </p>
<p>B机db2nodes.cfg.b的内容为：<br />
0 H80b 0</p>
<p><script type="text/javascript"><!--
  google_ad_client = "pub-8438729971248494";
  google_ad_format = "js_sdo";
  google_cts_mode ="rs";
  google_num_cts = "8";
  google_searchbox_color_border = "0066CC";
  google_searchbox_width = 585;
  google_searchbox_height = 26;
  google_link_target = 2;
  google_logo_pos = "left";
  google_rs_pos = "below";
  google_ad_height = 90;
  google_ad_width = 728;
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_sdo.js">
</script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1473.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据的切分与应用方案</title>
		<link>http://www.evanjiang.net.cn/archives/1466.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1466.html#comments</comments>
		<pubDate>Sun, 11 Apr 2010 03:17:21 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1466</guid>
		<description><![CDATA[<p style="float: right;margin: 4px;">


</p> <p>数据的切分分为两种模式，一种是按照不同的表(或者schema)来切分到不同的数据库(主机)上，这种切分可以称之为垂直（纵向）切分；另外一种是根据数据的逻辑关系，将同一个表中的数据按照某种条件拆分到多台数据库（主机）上，这种切分称之为数据的水平（横向）切分。</p>
<p>一个架构较好的应用系统，其总体功能肯定是由多个功能模块所组成的，而每一个功能模块所需要的数据对应到数据库中就是一个或多个表。而在架构设计中，各个功能模块相互之间的交互点越统一，越少，系统的耦合度就越低，系统各个模块的维护性及扩展性就越好。这样的系统，实现数据的垂直切分也就越容易。</p>
<p>数据的垂直切分基本上可以简单地理解为按照表或模块来切分数据，而水平切分则不同。一般来说，简单的水平切分主要是将某个访问及其平凡的表再按照某个字段的某种规则分散到多个表中，每个表包含一部分数据。就是将表中的某些行切分到一个数据库，而另外的某些行又切分到其他数据库中。为了容易地判定各行数据被切分到哪个数据库了，切分总是要按照某种特定的规则来进行的：如根据某个数据类型字段基于特定数据取模，某个时间类型字段的范围

方案一
________________________________________</p>
<p>水平切分，比如按照用户id进行切分，把不同用户的数据分散到不同的表或不同的数据库或不同的数据库服务器上，然后进行主从复制数据



a.一个Mysql集群(这儿所说的集群就是Mysql的Master/Slave方式，不是Mysql Cluster),所有用户的各种数据(bbs,blog,user)保存于某一台服务器的某一个数据库上，下面的n表示子表的数据(用户所在的子表根据用户id % n计算出来，这个可以根据需要定一个值例如10，如果以后发现数据量过大，可以增大n的值比如20，此时则需要进行数据迁移，因为n的值已经变了，用户所在子表的值也随之发生了变化，所以必须进行数据移动，数据迁移前停止网站的各种服务，备份mysql的数据，然后进行数据迁移，其实写一个脚本就可以了，也不是很复杂。



Master  Slave(Slave服务器数量可以根据需要进行适当的扩充)
sns(数据库名称)
bbs0
bbs1
&#8230;
bbsn
blog0
blog1
&#8230;
blogn
user0
user1
&#8230;
usern</p>
<p>b.多个Mysql集群，不同用户的数据保存到不同的数据库服务器上



假如一共有3个节点，散列算法是用户ID模以服务器节点数，假设有三个用户id分别为1,3,5，则保存数据的服务器节点为1,0,2
用户3的数据保存在Master0
master0 slave0
sns(数据库名称)
bbs
blog
user</p>
<p>用户1的数据保存在master1
master1 slave1
sns(数据库名称)
bbs
blog
user</p>
<p>用户5的数据保存在master2
master2 slave2
sns(数据库名称)
bbs
blog
user</p>
<p>方案二
________________________________________

垂直切分，就是按照网站的功能来进行切分，某个SNS网站，按照用户数据、博客数据、照片数据、标签数据等每个模块一个独立的数据库或数据库服务器，此种方案可以根据情况来看是否要做Master/Slave复制



其实下面的例子是垂直切分加上水平切分，这种切分方式的缺点就是如果需要进行关联查询时要跨数据库进行操作，非常的麻烦
db server1
sns(数据库名称)
user0
&#8230;
usern</p>
<p>db server2
sns(数据库名称)
blog0
&#8230;
blogn</p>
<p>db server3
sns(数据库名称)
photo0
&#8230;
photon</p>
<p>垂直切分及水平切分的缺点
________________________________________




由于采用了垂直切分或水平切分，数据分散在不同节点机器上，无法进行全局查找和统计。解决方案一是对主要的基础数据存储在全局表中(或者将全局数据保存在Memcache、BerkeleyDB中)，便于查找和统计，但这类数据不宜太多，部分核心数据。




</p>
]]></description>
			<content:encoded><![CDATA[<p>数据的切分分为两种模式，一种是按照不同的表(或者schema)来切分到不同的数据库(主机)上，这种切分可以称之为垂直（纵向）切分；另外一种是根据数据的逻辑关系，将同一个表中的数据按照某种条件拆分到多台数据库（主机）上，这种切分称之为数据的水平（横向）切分。</p>
<p>一个架构较好的应用系统，其总体功能肯定是由多个功能模块所组成的，而每一个功能模块所需要的数据对应到数据库中就是一个或多个表。而在架构设计中，各个功能模块相互之间的交互点越统一，越少，系统的耦合度就越低，系统各个模块的维护性及扩展性就越好。这样的系统，实现数据的垂直切分也就越容易。</p>
<p>数据的垂直切分基本上可以简单地理解为按照表或模块来切分数据，而水平切分则不同。一般来说，简单的水平切分主要是将某个访问及其平凡的表再按照某个字段的某种规则分散到多个表中，每个表包含一部分数据。就是将表中的某些行切分到一个数据库，而另外的某些行又切分到其他数据库中。为了容易地判定各行数据被切分到哪个数据库了，切分总是要按照某种特定的规则来进行的：如根据某个数据类型字段基于特定数据取模，某个时间类型字段的范围<br />
<span id="more-1466"></span><br />
方案一<br />
________________________________________</p>
<p>水平切分，比如按照用户id进行切分，把不同用户的数据分散到不同的表或不同的数据库或不同的数据库服务器上，然后进行主从复制数据<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>a.一个Mysql集群(这儿所说的集群就是Mysql的Master/Slave方式，不是Mysql Cluster),所有用户的各种数据(bbs,blog,user)保存于某一台服务器的某一个数据库上，下面的n表示子表的数据(用户所在的子表根据用户id % n计算出来，这个可以根据需要定一个值例如10，如果以后发现数据量过大，可以增大n的值比如20，此时则需要进行数据迁移，因为n的值已经变了，用户所在子表的值也随之发生了变化，所以必须进行数据移动，数据迁移前停止网站的各种服务，备份mysql的数据，然后进行数据迁移，其实写一个脚本就可以了，也不是很复杂。<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>Master  Slave(Slave服务器数量可以根据需要进行适当的扩充)<br />
sns(数据库名称)<br />
bbs0<br />
bbs1<br />
&#8230;<br />
bbsn<br />
blog0<br />
blog1<br />
&#8230;<br />
blogn<br />
user0<br />
user1<br />
&#8230;<br />
usern</p>
<p>b.多个Mysql集群，不同用户的数据保存到不同的数据库服务器上<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>假如一共有3个节点，散列算法是用户ID模以服务器节点数，假设有三个用户id分别为1,3,5，则保存数据的服务器节点为1,0,2<br />
用户3的数据保存在Master0<br />
master0 slave0<br />
sns(数据库名称)<br />
bbs<br />
blog<br />
user</p>
<p>用户1的数据保存在master1<br />
master1 slave1<br />
sns(数据库名称)<br />
bbs<br />
blog<br />
user</p>
<p>用户5的数据保存在master2<br />
master2 slave2<br />
sns(数据库名称)<br />
bbs<br />
blog<br />
user</p>
<p>方案二<br />
________________________________________<br />
<br />
垂直切分，就是按照网站的功能来进行切分，某个SNS网站，按照用户数据、博客数据、照片数据、标签数据等每个模块一个独立的数据库或数据库服务器，此种方案可以根据情况来看是否要做Master/Slave复制<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, 创建于 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>其实下面的例子是垂直切分加上水平切分，这种切分方式的缺点就是如果需要进行关联查询时要跨数据库进行操作，非常的麻烦<br />
db server1<br />
sns(数据库名称)<br />
user0<br />
&#8230;<br />
usern</p>
<p>db server2<br />
sns(数据库名称)<br />
blog0<br />
&#8230;<br />
blogn</p>
<p>db server3<br />
sns(数据库名称)<br />
photo0<br />
&#8230;<br />
photon</p>
<p>垂直切分及水平切分的缺点<br />
________________________________________<br />
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x15, 创建于 10-3-23 */
google_ad_slot = "9129041183";
google_ad_width = 728;
google_ad_height = 15;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script><br />
由于采用了垂直切分或水平切分，数据分散在不同节点机器上，无法进行全局查找和统计。解决方案一是对主要的基础数据存储在全局表中(或者将全局数据保存在Memcache、BerkeleyDB中)，便于查找和统计，但这类数据不宜太多，部分核心数据。<br />
<script type="text/javascript"><!--
  google_ad_client = "pub-8438729971248494";
  google_ad_format = "js_sdo";
  google_cts_mode ="rs";
  google_num_cts = "8";
  google_searchbox_color_border = "0066CC";
  google_searchbox_width = 585;
  google_searchbox_height = 26;
  google_link_target = 2;
  google_logo_pos = "left";
  google_rs_pos = "below";
  google_ad_height = 90;
  google_ad_width = 728;
//-->
</script>
<script type="text/javascript"
  src="http://pagead2.googlesyndication.com/pagead/show_sdo.js">
</script>
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1466.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB2安装手册 For IBM Aix</title>
		<link>http://www.evanjiang.net.cn/archives/1455.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1455.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 13:33:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1455</guid>
		<description><![CDATA[<p>DB2安装手册 (IBM AIX 环境下）
一、安装前的准备
1．	检查操作系统的版本，确保AIX系统已经打上最新的补丁：
#oslevel –r
#instfix –i &#124;grep ML
如果没有安装最新补丁，请使用补丁光盘，安装补丁文件；
2．	查看/usr文件系统的可用空间，确保可用空间>100MB：
#df –k
如果/usr可用空间不够，使用chfs –a size=+256000 /usr增加128MB空间；
3．	建议安装前，停止其他繁忙的应用程序的运行，以确保安装的性能。
二、安装过程
1．	注册为具有超级用户权限的用户(root以下所有操作均在root用户下完成）；
2．	将 标有“DB2通用数据库企业版”的软件光盘插入驱动器（DB2 UNIVERSAL DATABASE ENTERPRISE SERVER EDITION VERSION 8.1 AT THE FIXPAK 1LEVEL）；
3．	加载光盘文件系统：#mount –rv cdrfs /dev/cd0 /mnt;
4．	进入光盘文件系统# cd /cdrom;  （cd mnt）
5．	将光盘上压缩文件拷贝至/db2temp ,命令为cp;（db2temp是一存放解压缩文件的临时文件夹）
6．	解压缩uncompress 文件名;
7．	继续解压缩tar –xvf  文件名
8．	进入解压后的文件夹，找到db2setup文件，运行 ./db2setup命令以启动 DB2 安装程序,安装 DB2 V6 窗口打开;
9．	 按 Tab 键或用鼠标更改突出显示的选项，按 Enter 键或鼠标选择或取消选择选项;</p>
<p>10．	点击Install Products，并选择安装DB2 UDB Enterprise Server Edition</p>
<p>11．	点击Next，进入DB2 Setup [...]]]></description>
			<content:encoded><![CDATA[<p>DB2安装手册 (IBM AIX 环境下）<br />
一、安装前的准备<br />
1．	检查操作系统的版本，确保AIX系统已经打上最新的补丁：<br />
#oslevel –r<br />
#instfix –i |grep ML<br />
如果没有安装最新补丁，请使用补丁光盘，安装补丁文件；<br />
2．	查看/usr文件系统的可用空间，确保可用空间>100MB：<br />
#df –k<br />
如果/usr可用空间不够，使用chfs –a size=+256000 /usr增加128MB空间；<br />
3．	建议安装前，停止其他繁忙的应用程序的运行，以确保安装的性能。<br />
二、安装过程<br />
1．	注册为具有超级用户权限的用户(root以下所有操作均在root用户下完成）；<br />
2．	将 标有“DB2通用数据库企业版”的软件光盘插入驱动器（DB2 UNIVERSAL DATABASE ENTERPRISE SERVER EDITION VERSION 8.1 AT THE FIXPAK 1LEVEL）；<br />
3．	加载光盘文件系统：#mount –rv cdrfs /dev/cd0 /mnt;<br />
4．	进入光盘文件系统# cd /cdrom;  （cd mnt）<br />
5．	将光盘上压缩文件拷贝至/db2temp ,命令为cp;（db2temp是一存放解压缩文件的临时文件夹）<br />
6．	解压缩uncompress 文件名;<br />
7．	继续解压缩tar –xvf  文件名<br />
8．	进入解压后的文件夹，找到db2setup文件，运行 ./db2setup命令以启动 DB2 安装程序,安装 DB2 V6 窗口打开;<br />
9．	 按 Tab 键或用鼠标更改突出显示的选项，按 Enter 键或鼠标选择或取消选择选项;</p>
<p>10．	点击Install Products，并选择安装DB2 UDB Enterprise Server Edition</p>
<p>11．	点击Next，进入DB2 Setup wizard；</p>
<p>12．	点击Next，进入Software License Agreement；<br />
<span id="more-1455"></span><br />
选择Agree，并点击Next;<br />
13．	选择安装类型：为Custom自定义安装，并点击Next；</p>
<p>14．	选择在本机上安装DB2，并点击Next；</p>
<p>15．	选择DB2组件，添加Application Development Tools选项，并点击Next；</p>
<p>16．	选择DB2 产品语言，缺省为English，并点击Next；</p>
<p>17．	创建DB2 Administration Server User，设定password，其他使用缺省配置，并点击Next；</p>
<p>18．	选择DB2 Instance，选择32bit Instance，并点击Next（此时会出现一个提示说需要支持32位的JDK，此JDK在DEVELOPE KIT随机光盘中能够找到，最后一步详细说明安装步骤）</p>
<p>19．	选择Single-partition Instance，并点击Next；</p>
<p>20．	创建DB2 Instance owner User，设定password，其他使用缺省配置，并点击Next；</p>
<p>21．	创建DB2 Instance fenced User，设定password，其他使用缺省配置，并点击Next；</p>
<p>22．	配置DB2 Instance TCP/IP 通讯，选择Configure，使用缺省值，并点击Next；</p>
<p>23．	设置Instance属性，使用缺省值，并点击Next；</p>
<p>24．	准备DB2 tools catalog，选择不使用，并点击Next；</p>
<p>25．	设置Administration联系表，使用缺省值，并点击Next；</p>
<p>26．	设置健康监视联系人，使用缺省值，并点击Next；</p>
<p>27．	当前配置总结，并点击Next，开始复制文件；</p>
<p>28．	安装过程；</p>
<p>29．	安装完毕，并点击Finish；</p>
<p>安装完成之后检查三个帐户（dasusr1，db2inst1，db2fenc）是否全部建立，使用smitty user命令查看，或者使用su命令分别进入三个帐户，如果三个帐户存在并且可以su进去，证明帐户添加成功。如发现帐户没有建立，重新执行安装程序，再次安装，帐户添加成功。<br />
三、数据库测试<br />
1．	安装完以后重启机器； shutdown -F<br />
2．	安装结果：数据库程序安装完成后，DB2的软件程序安装在/usr/lpp目录中，DB2DIR = /usr/lpp/DB2_08_01；<br />
3．	执行 ./home/db2inst1/sqllib/db2profile;<br />
4．	使用db2inst1登入系统，运行$db2sampl 创建sample数据库；<br />
5．	使用$db2 list db directory查看数据库catalog；<br />
6．	使用$db2 connect to sample连接到Sample数据库；使用$db2 list tables查看表，并使用select * from sales查看Sales表里的内容，结果如下：<br />
$ db2 connect to sample;<br />
   Database Connection Information<br />
 Database server        = DB2/AIX64 8.1.0<br />
 SQL authorization ID   = DB2INST1<br />
 Local database alias   = SAMPLE</p>
<p>$ db2 list tables</p>
<p>Table/View                      Schema          Type  Creation time<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8211; &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
CL_SCHED                        DB2INST1        T     2005-04-17-10.53.31.235846<br />
DEPARTMENT                      DB2INST1        T     2005-04-17-10.53.26.255031<br />
EMP_ACT                         DB2INST1        T     2005-04-17-10.53.26.685151<br />
EMP_PHOTO                       DB2INST1        T     2005-04-17-10.53.27.169439<br />
EMP_RESUME                      DB2INST1        T     2005-04-17-10.53.30.242825<br />
EMPLOYEE                        DB2INST1        T     2005-04-17-10.53.26.395867<br />
IN_TRAY                         DB2INST1        T     2005-04-17-10.53.31.351258<br />
ORG                             DB2INST1        T     2005-04-17-10.53.25.699546<br />
PROJECT                         DB2INST1        T     2005-04-17-10.53.26.970160<br />
SALES                           DB2INST1        T     2005-04-17-10.53.31.042355<br />
STAFF                           DB2INST1        T     2005-04-17-10.53.26.047395</p>
<p>  11 record(s) selected.</p>
<p>$ db2 &#8220;select * from sales&#8221;;</p>
<p>SALES_DATE SALES_PERSON    REGION          SALES<br />
&#8212;&#8212;&#8212;- &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8212;&#8212; &#8212;&#8212;&#8212;&#8211;<br />
12/31/1995 LUCCHESSI       Ontario-South             1<br />
12/31/1995 LEE             Ontario-South             3<br />
12/31/1995 LEE             Quebec                    1<br />
12/31/1995 LEE             Manitoba                  2<br />
12/31/1995 GOUNOT          Quebec                    1<br />
03/29/1996 LUCCHESSI       Ontario-South             3<br />
03/29/1996 LUCCHESSI       Quebec                    1<br />
03/29/1996 LEE             Ontario-South             2<br />
03/29/1996 LEE             Ontario-North             2<br />
03/29/1996 LEE             Quebec                    3<br />
03/29/1996 LEE             Manitoba                  5<br />
03/29/1996 GOUNOT          Ontario-South             3<br />
03/29/1996 GOUNOT          Quebec                    1<br />
03/29/1996 GOUNOT          Manitoba                  7<br />
03/30/1996 LUCCHESSI       Ontario-South             1<br />
03/30/1996 LUCCHESSI       Quebec                    2<br />
03/30/1996 LUCCHESSI       Manitoba                  1<br />
03/30/1996 LEE             Ontario-South             7<br />
03/30/1996 LEE             Ontario-North             3<br />
03/30/1996 LEE             Quebec                    7<br />
03/30/1996 LEE             Manitoba                  4<br />
03/30/1996 GOUNOT          Ontario-South             2<br />
03/30/1996 GOUNOT          Quebec                   18<br />
03/30/1996 GOUNOT          Manitoba                  1<br />
03/31/1996 LUCCHESSI       Manitoba                  1<br />
03/31/1996 LEE             Ontario-South            14<br />
03/31/1996 LEE             Ontario-North             3<br />
03/31/1996 LEE             Quebec                    7<br />
03/31/1996 LEE             Manitoba                  3<br />
03/31/1996 GOUNOT          Ontario-South             2<br />
03/31/1996 GOUNOT          Quebec                    1<br />
04/01/1996 LUCCHESSI       Ontario-South             3<br />
04/01/1996 LUCCHESSI       Manitoba                  1<br />
04/01/1996 LEE             Ontario-South             8<br />
04/01/1996 LEE             Ontario-North             -<br />
04/01/1996 LEE             Quebec                    8<br />
04/01/1996 LEE             Manitoba                  9<br />
04/01/1996 GOUNOT          Ontario-South             3<br />
04/01/1996 GOUNOT          Ontario-North             1<br />
04/01/1996 GOUNOT          Quebec                    3<br />
04/01/1996 GOUNOT          Manitoba                  7</p>
<p>  41 record(s) selected.</p>
<p>四、安装补丁<br />
安装 DB2 补丁前的注意事项：<br />
由于补丁解压后单个文件大于2G，因此需在/etc/security/limits中将参数fsize的值改为-1<br />
注：1、使用root帐户进行解压缩必须把fsize的值改为-1，用db2inst1帐户进行解压缩需用root帐户把压缩文件的权限改为777。<br />
# chmod –R 777 压缩文件名<br />
2、在安装补丁之前最好先创建数据库<br />
在建立数据库之后，运行db2set DB2CODEPAGE=1386<br />
开始安装之前，请先确实停止所有的 DB2 程序。<br />
1. 执行 su &#8211; root 命令以切换至 root 权限。<br />
2. 针对每个实例执行下列命令：<br />
           su – iname（db2inst1）<br />
       . $HOME/sqllib/db2profile<br />
       db2 force applications all<br />
       db2 terminate<br />
       db2stop<br />
       exit<br />
   其中 iname 代表实例拥有者名称。<br />
   如果您是 hacmp 使用者，则必须使用 ha_db2stop 命令停止 DB2，而不应使用<br />
   db2stop 命令。不然，db2stop 命令会触发失败事件。<br />
3. 执行下列命令：<br />
        su – aname(dasusr1)<br />
       . $HOME/das/dasprofile<br />
        db2admin stop<br />
        exit<br />
   其中 aname 代表 DAS 拥有者名称。<br />
4. 在 AIX 上，您也应执行 slibclean，以从内存中卸载未使用的共享档案<br />
   库，然后才进行安装：<br />
       /usr/sbin/slibclean<br />
5. 停止所有正在使用 DB2 第 8 版的实例。若有正在使用 DB2 第 8 版的「错误<br />
   监督程序」，也必须加以停用。<br />
安装DB2补丁<br />
从 IBM 匿名 FTP 服务器下载第 8 版替代 FixPak，下载后的文件名为：FP9a_U800780.tar.Z<br />
解压缩的步骤：<br />
1、	uncompress FP9a_U800789.tar.Z,执行后生成的文件为FP9a_U800789.tar<br />
2、	tar –tvf  FP9a_U800789.tar,执行后生成的文件OD_14086<br />
若要安装 DB2 补丁：<br />
1. 进入OD_14086文件夹。<br />
2. 输入 ./installFixPak 命令以启动安装。<br />
./installFixPak –y  (执行的命令)<br />
注: 根据默认值，installFixPak命令将会确定 AIX 上所有已更新的档案集。<br />
更新实例以使用新的 DB2 层次<br />
在安装新的 DB2 层次之后，必须更新所有实例。<br />
您必须以 root 身份登入来更新实例。针对每个实例，发出下列命令：<br />
      INSTHOME(/usr/opt/db2_08_01)/instance/db2iupdt iname(db2inst1)<br />
 其中 iname 代表实例名称，INSTHOME 代表适合您操作系统的安装目录。<br />
当数据库管理服务器 (DAS) 实例存在，并且是 DB2 第 8 版 DAS 实例时，请执行<br />
dasupdt 命令。若要更新 DAS 实例，请发出下列命令：<br />
    INSTHOME/instance/dasupdt dasname(dasusr1)<br />
其中 dasname 代表 DAS 拥有者名称，INSTHOME 代表适合您操作系统的安装目录。<br />
如需 db2iupdt 或 dasupdt 命令进一步的相关信息，请以 -h 选项执行这些命令。<br />
重新启动实例<br />
1. 以实例拥有者身份登入，然后输入 db2start 命令。<br />
2. 在每一个实例重复。<br />
若要重新启动管理服务器，请以 DAS 拥有者登入，然后执行 db2admin start 命令。<br />
重新连结连结档案<br />
您必须在安装之后，将 DB2 公用程序连结至所有的数据库。完成这个步骤，修正程序安装即完成，并会确保程序代码层次的正确使用。每个数据库只需执行一次连结的程序 (如下所述)。<br />
重新连结 DB2 UDB 数据库<br />
引用修正程序之后，您必须执行下列命令集之一：<br />
在命令提示下输入：<br />
    db2 terminate<br />
       db2 CONNECT TO <dbname><br />
       db2 BIND
<path>/@db2ubind.lst BLOCKING ALL GRANT PUBLIC<br />
       db2 BIND
<path>/@db2cli.lst BLOCKING ALL GRANT PUBLIC<br />
    db2 terminate<br />
    或<br />
在 DB2 命令行下输入：<br />
       TERMINATE<br />
       CONNECT TO <dbname><br />
       BIND
<path>/@db2ubind.lst BLOCKING ALL GRANT PUBLIC<br />
       BIND
<path>/@db2cli.lst BLOCKING ALL GRANT PUBLIC<br />
       TERMINATE<br />
其中 <dbname> 代表公用程序应连接的数据库名称，
<path> 代表连结档案所在<br />
目录的完整路径名称 (如 $HOME(/home/db2inst1)/sqllib/bnd，其中 $HOME 代表数据库服务器的实例之起始目录)。 db2ubind.lst 与 db2cli.lst包含用于 DB2 UDB 所必要的连<br />
结档案清单。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1455.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DB2 for RH linux的详细的安装步骤</title>
		<link>http://www.evanjiang.net.cn/archives/1453.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1453.html#comments</comments>
		<pubDate>Sun, 07 Feb 2010 13:31:33 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1453</guid>
		<description><![CDATA[<p>安装
(1) 操作系统安装
本次测试的操作系统环境为RedHat Linux7.2 Professional，内核 2.2.12 或更新版本 </p>
<p>安装过程基本上点选“next”即可，有以下几点需要注意
1． 在选择要安装的产品包时，要选中安装“开发工具包”，因为DB2运行环境需要其中的两个库：glibc 版本 2.1.2 或更新版本，libstdc++ 版本 2.9.0。
2． 可以在安装过程中设置网络参数，如IP地址、网关等，当然你也可以在安装完成后在操作系统命令行完成。 </p>
<p>(2) DB2产品安装
本次使用的安装介质为DB2 for Linux安装光盘，其中包括
1． DB2 UDB for Linux Enterprise Edition
2． DB2 Connect Enterprise Edition
3． DB2 Application Development Development Tool
4． DB2 Administration Client </p>
<p>本次测试的目的是希望通过DB2 的产品连上社保局的AS/400下的DB2数据库并能存取数据库，所有我们只需安装Connect产品。 </p>
<p>在安装DB2产品之前，你必须安装公用域程序包pdksh，该包可以从Linux安装盘中获得(目前使用的版本为第二张安装盘)，安装步骤如下：
#mkdir db2
#mount –t iso9660 –o ro /dev/cdrom db2
#rpm –ivh /root/db2/RedHat/RPMS/pdksh…rpm
#umount db2

然后就可以安装DB2产品。
如果系统提示找不到共享库：libncurses.so.4，进行如下操作：
#ln –sf /usr/lib/libncurses.so.5 /usr/lib/libncurses.so.4  </p>
<p>#mount /dev/cdrom [...]]]></description>
			<content:encoded><![CDATA[<p>安装<br />
(1) 操作系统安装<br />
本次测试的操作系统环境为RedHat Linux7.2 Professional，内核 2.2.12 或更新版本 </p>
<p>安装过程基本上点选“next”即可，有以下几点需要注意<br />
1． 在选择要安装的产品包时，要选中安装“开发工具包”，因为DB2运行环境需要其中的两个库：glibc 版本 2.1.2 或更新版本，libstdc++ 版本 2.9.0。<br />
2． 可以在安装过程中设置网络参数，如IP地址、网关等，当然你也可以在安装完成后在操作系统命令行完成。 </p>
<p>(2) DB2产品安装<br />
本次使用的安装介质为DB2 for Linux安装光盘，其中包括<br />
1． DB2 UDB for Linux Enterprise Edition<br />
2． DB2 Connect Enterprise Edition<br />
3． DB2 Application Development Development Tool<br />
4． DB2 Administration Client </p>
<p>本次测试的目的是希望通过DB2 的产品连上社保局的AS/400下的DB2数据库并能存取数据库，所有我们只需安装Connect产品。 </p>
<p>在安装DB2产品之前，你必须安装公用域程序包pdksh，该包可以从Linux安装盘中获得(目前使用的版本为第二张安装盘)，安装步骤如下：<br />
#mkdir db2<br />
#mount –t iso9660 –o ro /dev/cdrom db2<br />
#rpm –ivh /root/db2/RedHat/RPMS/pdksh…rpm<br />
#umount db2<br />
<span id="more-1453"></span><br />
然后就可以安装DB2产品。<br />
如果系统提示找不到共享库：libncurses.so.4，进行如下操作：<br />
#ln –sf /usr/lib/libncurses.so.5 /usr/lib/libncurses.so.4  </p>
<p>#mount /dev/cdrom db2<br />
#/root/db2/db2setup </p>
<p>选择安装DB2 Connect EE，根据提示完成安装。 </p>
<p>安装完Connect 产品后，就要创建一个DB2的实例用来生成连接环境，在安装界面选择”create”实例，随后的选择均可采用缺省。 </p>
<p>实例创建完成后，系统会生成一个登录用户db2inst1，缺省密码ibmdb2，我们将会用这个帐号/密码登录到操作系统并连接到AS/400。 </p>
<p>设置<br />
(1) 必须完成相关的网络设置以保证到社保局的物理链路畅通<br />
相关的命令：<br />
#ifconfig eth0 132.92.21.204 netmask 255.255.0.0 //设置IP<br />
#route add default gw 132.92.21.254 //设置缺省路由<br />
#traceroute 97.0.0.1 //跟踪到目的主机的路由<br />
#ping 97.0.0.1 //测试网络<br />
#route  //查看路由 </p>
<p>网络配置文件(每次操作系统启动时自动从该文件加载)<br />
/etc/sysconfig/network-scripts/ifcfg-eth0 </p>
<p>(2) 更新hosts和services文件<br />
编辑/etc/hosts文件，增加一行<br />
97.0.0.8  as400<br />
编辑/etc/services文件，增加一行<br />
ddm 446/tcp<br />
(3) 以db2inst1帐号登录<br />
(4) 启动db2，在命令行进行如下设置：<br />
db2=>;catalog tcpip node zstax remote as400 server ddm<br />
db2=>;catalog dcs db localdb as s653p86m<br />
db2=>;catalog database localdb as zsins at node zstax authentication dcs<br />
db2=>;terminate </p>
<p>(5) 测试到AS400的连接<br />
db2=>;connect to zsins user XXXXX using XXXXXX<br />
如果成功连接，会返回AS400的服务器的有关信息 </p>
<p>(6) 存取数据库<br />
如果提示”NULLID.****”包未找到，在DB2的安装包目录找到相应的文件，这里我们需要安装db2clpcs.bnd<br />
db2=>;bind /usr/IBMdb2/V7.1/bnd/db2clpcs.bnd blocking all grant public </p>
<p>然后你就可以对数据库进行存取操作</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1453.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Linux上实现DB2双机HA完整方案</title>
		<link>http://www.evanjiang.net.cn/archives/1449.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1449.html#comments</comments>
		<pubDate>Sat, 30 Jan 2010 14:58:08 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>
		<category><![CDATA[suse linux]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1449</guid>
		<description><![CDATA[<p>1. 摘要 </p>
<p>　　本文档介绍在SuSE Linux Enterprise Server v8.0(SLES 8)上安装配置DB2 UDB Enterprise Serverv8.2双机互备的高可靠性方案的基本步骤。该方案配合采用SLES的卷管理器(LVM)和Veritas Cluster Server v2.2(VCS 2.2)作为HA实现组件。 </p>
<p>2. 概述 </p>
<p>　本文档假定读者已经理解双机互备的HA方案的基本概念。 </p>
<p>2.1. 双机互备HA方案的基本步骤 </p>
<p>　　建立一个双机互备方案的基本步骤是：
1. 确定基本参数(如IP地址、存储空间，等等。本方案的参数均为示范参数，读者需要根据实际环境替换)
2. 配置共享存储(本方案不涉及共享存储方案的配置)
3. 在两台节点上分别安装应用(在本方案中是DB2 UDB)
4. 在一台节点上对应用作初始配置(在本方案中是在共享存储上建立DB2数据库)
5. 在另一台节点上引入共享存储上的配置(在本方案中是对共享存储上的数据库做catalog操作)
6. 在两台节点上分别手动测试应用
7. 配置HA Cluster管理软件(在本方案中是VCS)
8. 测试HA Cluster管理软件可以成功接管资源</p>
<p>2.2. 假设 </p>
<p>　　本文档假定采用以下示例环境，SLES与VCS已在节点上正确安装，SLES的共享存储已经正确连接，VCS的心跳连接已经正确配置。

2.2.1. 存储 </p>
<p>　　各节点上需要足够的本地磁盘空间，来安装DB2 UDB的可执行代码及实例。 </p>
<p>　　本方案需要足够的共享存储空间，来放置数据库数据。 </p>
<p>　　假定共享存储上分配给DB2数据库的卷组名为/dev/datavg1，逻辑卷名为/dev/datavg1/db2lv1(使用SLES的LVM服务)，在两个节点上的挂接点名为/home/db2data，且已正确格式化为合适的文件系统(Veritas工程师指出在SLES 8上VCS 2.2不支持ext3文件系统，建议格式化时指定ext2，在SLES 9和VCS 4.1上不存在这个问题)。注意这个挂接点要在fstab文件中配置为启动时不自动挂接。 </p>
<p>　　数据库其他表空间可以建立在共享存储的其他卷上，如果是文件系统，同样要配置为不自动挂接。本文档暂不讨论。 </p>
<p>2.2.2. 节点 </p>
<p>　　本HA方案采用两个服务器节点做主从互备，以下分别称为Active节点和Passive节点。这两个节点具有相同的硬件和操作系统配置。 </p>
<p>2.2.3. 网络 </p>
<p>　　对外的IP网络。假定该方案中DB2 UDB对外提供服务使用的浮动IP(Floating IP)为192.168.10.110，Active节点的物理IP为192.168.10.11，Passive节点的物理IP为192.168.10.12。 </p>
<p>　HA管理软件需要一组内部IP来管理双机间的心跳连接。心跳IP不在本文档范围内。 </p>
<p>3. 配置步骤 [...]]]></description>
			<content:encoded><![CDATA[<p>1. 摘要 </p>
<p>　　本文档介绍在SuSE Linux Enterprise Server v8.0(SLES 8)上安装配置DB2 UDB Enterprise Serverv8.2双机互备的高可靠性方案的基本步骤。该方案配合采用SLES的卷管理器(LVM)和Veritas Cluster Server v2.2(VCS 2.2)作为HA实现组件。 </p>
<p>2. 概述 </p>
<p>　本文档假定读者已经理解双机互备的HA方案的基本概念。 </p>
<p>2.1. 双机互备HA方案的基本步骤 </p>
<p>　　建立一个双机互备方案的基本步骤是：<br />
1. 确定基本参数(如IP地址、存储空间，等等。本方案的参数均为示范参数，读者需要根据实际环境替换)<br />
2. 配置共享存储(本方案不涉及共享存储方案的配置)<br />
3. 在两台节点上分别安装应用(在本方案中是DB2 UDB)<br />
4. 在一台节点上对应用作初始配置(在本方案中是在共享存储上建立DB2数据库)<br />
5. 在另一台节点上引入共享存储上的配置(在本方案中是对共享存储上的数据库做catalog操作)<br />
6. 在两台节点上分别手动测试应用<br />
7. 配置HA Cluster管理软件(在本方案中是VCS)<br />
8. 测试HA Cluster管理软件可以成功接管资源</p>
<p>2.2. 假设 </p>
<p>　　本文档假定采用以下示例环境，SLES与VCS已在节点上正确安装，SLES的共享存储已经正确连接，VCS的心跳连接已经正确配置。<br />
<span id="more-1449"></span><br />
2.2.1. 存储 </p>
<p>　　各节点上需要足够的本地磁盘空间，来安装DB2 UDB的可执行代码及实例。 </p>
<p>　　本方案需要足够的共享存储空间，来放置数据库数据。 </p>
<p>　　假定共享存储上分配给DB2数据库的卷组名为/dev/datavg1，逻辑卷名为/dev/datavg1/db2lv1(使用SLES的LVM服务)，在两个节点上的挂接点名为/home/db2data，且已正确格式化为合适的文件系统(Veritas工程师指出在SLES 8上VCS 2.2不支持ext3文件系统，建议格式化时指定ext2，在SLES 9和VCS 4.1上不存在这个问题)。注意这个挂接点要在fstab文件中配置为启动时不自动挂接。 </p>
<p>　　数据库其他表空间可以建立在共享存储的其他卷上，如果是文件系统，同样要配置为不自动挂接。本文档暂不讨论。 </p>
<p>2.2.2. 节点 </p>
<p>　　本HA方案采用两个服务器节点做主从互备，以下分别称为Active节点和Passive节点。这两个节点具有相同的硬件和操作系统配置。 </p>
<p>2.2.3. 网络 </p>
<p>　　对外的IP网络。假定该方案中DB2 UDB对外提供服务使用的浮动IP(Floating IP)为192.168.10.110，Active节点的物理IP为192.168.10.11，Passive节点的物理IP为192.168.10.12。 </p>
<p>　HA管理软件需要一组内部IP来管理双机间的心跳连接。心跳IP不在本文档范围内。 </p>
<p>3. 配置步骤 </p>
<p>3.1. DB2 UDB安装、配置步骤 </p>
<p>3.1.1. 建立用户和组 </p>
<p>　　在两台节点上分别在root下执行以下命令:<br />
　　groupadd –g 900 db2iadm1<br />
　　groupadd –g 901 db2fadm1<br />
　　groupadd –g 902 dasadm1<br />
　　useradd –g db2iadm1 –u 800 –d /home/db2inst1 –s /bin/bash db2inst1<br />
　　useradd –g db2fadm1 –u 801 –d /home/db2fenc1 –s /bin/bash db2fenc1<br />
　　useradd –g dasadm1 –u 802 –d /home/dasusr1 –s /bin/bash dasusr1<br />
　　组ID和用户ID可以根据实际情况选择，但务必保证在两台节点上相同的用户名/组名具有相同的ID。</p>
<p>3.1.2. 安装DB2 UDB产品代码<br />
　　在两台节点上分别在root用户下执行以下命令:<br />
　　cd<br />
　　./db2install –p DB2.ESE<br />
　　cd /opt/IBM/db2/V8.1/adm<br />
　　./db2licm –a /db2/license/db2ese.lic</p>
<p>　　其中，是DB2 UDB ESE安装介质所在目录。 </p>
<p>3.1.3. 建立实例 </p>
<p>　　在两台节点上分别在root用户下执行以下命令: </p>
<p>　　cd /opt/IBM/db2/V8.1/instance </p>
<p>　　./db2icrt –p 50000 –u db2fenc1 db2inst1 </p>
<p>3.1.4. 建立DAS </p>
<p>　　在两台节点上分别在root用户下执行以下命令: </p>
<p>　　cd /opt/IBM/db2/V8.1/instance </p>
<p>　　./dascrt –u dasusr1 </p>
<p>3.1.5. 建立数据库 </p>
<p>　　在Active节点上在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 create database on /home/db2data<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　　其中，是数据库名。</p>
<p>3.1.6. Catalog数据库<br />
　　在Passive节点上在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 catalog database on /home/db2data<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　其中，是上一步骤建立的数据库名</p>
<p>3.1.7. 检验DB2配置<br />
　　在Active节点上，在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 connect to<br />
　　db2 create table T (ID INTEGER)<br />
　db2 connect reset<br />
　db2stop<br />
　　exit<br />
　umount /home/db2data<br />
　　检验上述命令均无出错信息。</p>
<p>　　在Passive节点上，在root用户下执行以下命令:<br />
　　mount /dev/datavg1/db2lv1 /home/db2data<br />
　　su – db2inst1<br />
　　db2start<br />
　　db2 connect to<br />
　　db2 drop table T<br />
　　db2 connect reset<br />
　　db2stop<br />
　　exit<br />
　　umount /home/db2data<br />
　　检验上述命令均无出错信息。</p>
<p>3.2. VCS配置<br />
　在VCS中，建立DB2资源组，在组中配置浮动IP、Application等资源，将Application的启动、停止等命令脚本配置为db2start、db2stop、db2admin start和db2admin stop，将Application的监视命令脚本配置为ps命令，监视db2sysc和db2dasrrm进程。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1449.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>老生常谈  SCO 安装 Informix</title>
		<link>http://www.evanjiang.net.cn/archives/1381.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1381.html#comments</comments>
		<pubDate>Mon, 07 Dec 2009 01:22:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[informix]]></category>
		<category><![CDATA[sco unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1381</guid>
		<description><![CDATA[<p>informix for sco 系统安装
1.  建立informix 用户组及用户。 </p>
<p>    1.
    2.  scoadmin -> account manager -> group -> add new group
        加入 informix 组</p>
<p>   scoadmin -> account manager -> user -> add    new     [...]]]></description>
			<content:encoded><![CDATA[<p>informix for sco 系统安装<br />
1.  建立informix 用户组及用户。 </p>
<p>    1.<br />
    2.  scoadmin -> account manager -> group -> add new group<br />
        加入 informix 组</p>
<p>   scoadmin -> account manager -> user -> add    new        加入  用户，注 意 home directory 应该是你希望安装 informix 的地方，<br />
        使用 /usr/informix .<br />
        Login group 改为 informix , membership 中加入 informix 组</p>
<p>    当然以上步骤可以用命令行的方式 实现，在此就不在重复</p>
<p>    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一定要先建 informix 组，再建 informix 用户，其中道理不言而喻。<br />
     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;                                                        核心参数</p>
<p>    1.  Login in as root<br />
    2.  scoadmin -> hardware manager/kernel -> parameters<br />
        修改以下参数<br />
        SHMMAX        134217728<br />
        SHMMIN        1<br />
        SEMMSL                150<br />
        MAXUP                2048</p>
<p>        然后 relink kernel, 重新启动。<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一般的值，必须根据实际调整，根据他人介绍 可以参照<br />
    /etc/conf/cf.d/mtune 中各项的最大值修改，也可添加到与mtune<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>3.  修改 informix 用户的 .profile 文件</p>
<p>    1.  Login in as informix<br />
    2.  vi .profile<br />
        加入如下环境变量<br />
        INFORMIXDIR=/usr/informix            # informix 用户的绝对路径<br />
        ONCONFIG=onconfig                      # informix 数据库配置文件名称<br />
        INFORMIXSERVER=online                # informix 数据库server的名称<br />
                                                              # 在 onconfig 文件中也有定义，需要使用相同名称<br />
        LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql<br />
                                                              # esql 编译 .ec 需要使用的 Lib 库文件目录<br />
        PATH 中计入 /usr/informix/bin           # informix 命令所在路径 </p>
<p>        最后，export 以上各项。<br />
<span id="more-1381"></span><br />
    For example:<br />
    我安装的服务器配置为<br />
    INFORMIXDIR=/usr/informix<br />
    INFORMIXSERVER=online<br />
    TERMCAP=$INFORMIXDIR/etc/termcap<br />
    ONCONFIG=onconfig<br />
    PATH=$INFORMIXDIR/bin:$PATH<br />
    LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH<br />
    export INFORMIXDIR INFORMIXSERVER ONCONFIG TERMCAP PATH LD_LIBRARY_PATH </p>
<p>     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:*  一般的值，必须根据实际调整，根据他人介绍 可以参照<br />
    /etc/conf/cf.d/mtune 中各项的最大值修改，也可添加到与mtune<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>4.  安装 informix 系统应用程序 </p>
<p>    1.  Login in as informix,<br />
        确认 .profile 的环境变量已经导入，可以通过 &#8220;env | more&#8221; 方式查看。</p>
<p>    2.  如果安装文件为 *.cpi 方式，假设文件存放在 /tmp/file.cpi, 在 informix 用户目录下执行<br />
        $ cpio -iBdumcv -I /tmp/file.cpi        # 也可以通过 &#8220;cpio -iBdumcv < /tmp/file.cpi" 执行<br />
        $  ./installserver                              # 安装应用程序<br />
                                                             # 输入序列号 AA#****** ,  KEY ***** (注意大小写)</p>
<p>5.  准备数据库存储空间(下面描述均已建立chunk 名为 rootdbs）</p>
<p>    5.1 文件方式</p>
<p>        1.  Login in as informix</p>
<p>        2.  文件型数据库存储位置 ( 我习惯使用 /usr/informix/dbs 目录 )<br />
            $ cat /dev/null > rootdbs                     # rootdbs 使用，这个是必须的，但是名字可以随便<br />
               以下的 ***dbs 都是可选的，但是 phydbs(物理日志)、logdbs(逻辑日志)、tmpdbs(临时表)、idxdbs(索引) 等都<br />
               独立出来可以提升系统的性能<br />
            $ cat /dev/null > datadbs<br />
            &#8230;&#8230;<br />
            $ chmod 660 rootdbs<br />
            $ chown informix:informix rootdbs</p>
<p>            *NOTE:* ***dbs就是文件，怎么生成都可以， > rootdbs,  vi 、touch 都可以</p>
<p>    5.2 裸设备方式<br />
         裸设备的效能更好一些，但是相对于设置就比较的麻烦了。</p>
<p>         1. Login in as root</p>
<p>         2. 建立裸设备</p>
<p>            # divvy -m /dev/hd0a<br />
            hd0a 为第一块硬盘第一个分区， hd1 代表第二块硬盘，如果是 sas 等串口硬盘，估计是 rhd0 等等了(可能不对)</p>
<p>                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        | Name              | Type       | New FS | # | First Block | Last Block |<br />
                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        | boot              | EAFS       |  no    | 0 |            0|       30719|<br />
                        | swap              | NON FS     |  no    | 1 |        30720|      816127|<br />
                        | root              | HTFS       |  no    | 2 |       816128|     8329691|<br />
                        |                   | NOT USED   |  no    | 3 |            -|           -|<br />
                        |                   | NOT USED   |  no    | 4 |            -|           -|<br />
                        |                   | NOT USED   |  no    | 5 |            -|           -|<br />
                        | recover           | NON FS     |  no    | 6 |      8329692|     8329701|<br />
                        | hd0a              | WHOLE DISK |  no    | 7 |            0|     8377865|<br />
                        +&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8211;+&#8212;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+<br />
                        8329702 1K blocks for divisions, 48163 1K blocks reserved for the system</p>
<p>                         n[ame]       Name or rename a division.<br />
                         c[reate]     Create a new file system on this division.<br />
                         d[elete]     Delete a file system on this division.<br />
                         t[ype]       Select or change filesystem type on new filesystems.<br />
                         p[revent]    Prevent a new file system from being created on this division.<br />
                         s[tart]      Start a division on a different block.<br />
                         e[nd]        End a division on a different block.<br />
                         r[estore]    Restore the original division table.</p>
<p>                        Enter your choice or q to quit:</p>
<p>            Type 选择 non fs, Name 填写 rootdbs, </p>
<p>                    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
            *NOTE:* divvy 内的 Block 大小为 1K, 据说 chunk(或者说是dbs)的大小不能超过<br />
             2G, 建议每一个都设置为 2000000, 也就是 End &#8211; Start + 1 = 2000000。<br />
             Informix 9.4 的版本支持 Big chunk了，通过 &#8216;onmode -BC 1&#8242; or &#8216;onmode -BC 2&#8242; 使用新的页空间<br />
                      &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>            按照上述分割好裸设备后，在 /dev 目录下面会自动生成chunk名为 Name 的设备名，比如我分割裸设备为 rootdbs<br />
            /dev 目录下面会有 /dev/rootdbs 文件。</p>
<p>            # chmod 660 rootdbs<br />
            # chown informix:informix rootdbs<br />
            # su &#8211; informix<br />
            $ mkdir dbs                 # 数据库连接文件放此目录<br />
            $ cd dbs<br />
            $ ln -s /dev/rootdbs rootdbs</p>
<p>                     &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
           *NOTE:* 关于这里,必须说两句,大家应该养成良好的习惯,就是chunk的路径用链接.<br />
                   &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>6.  编辑各种配置文件 </p>
<p>    6.1 编辑 onconfig 文件</p>
<p>        Login in as informix</p>
<p>        $ cp onconfig.std onconfig</p>
<p>        *NOTE:* 这里的 onconfig 名称需要和 .profile 内的 ONCONFIG=onconfig 设置保持一致.</p>
<p>        $ vi onconfig<br />
        修改如下参数<br />
        ROOTPATH    /usr/informix/dbs/rootdbs<br />
        ROOTSIZE        2000000<br />
        MSGPATH     /usr/informix/online.log<br />
        TAPEDEV     /dev/null<br />
        LTAPEDEV    /dev/null<br />
        DBSERVERNAME    online</p>
<p>        *NOTE:* DBSERVERNAME 同.profile中INFORMIXSERVER名字，和sqlhosts 第三个字段保持一致，<br />
        这点非常重要.</p>
<p>    6.2 编辑 sqlhosts 文件</p>
<p>        原来一般为<br />
        demo_on        onipcshm        on_hostname     on_servername<br />
        demo_se        seipcpip        se_hostname     sqlexec</p>
<p>        更改为<br />
        demo_on        onipcshm        on_hostname     on_servername<br />
        #demo_se        seipcpip        se_hostname     sqlexec<br />
        online         ontlitcp        hostname        online_service</p>
<p>        &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
        *NOTE:* 这几个字段&#8217;online&#8217;是SERVER名，在onconfig 中&#8217;DBSERVERNAME&#8217;,<br />
        .profile 中&#8217;INFORMIXSERVER&#8217; 是一个名称，ontlitcp 表示通过 tcp/ip 方式,<br />
        &#8216;hostname&#8217; 是在 /etc/hostname 中设置的名称,<br />
        &#8216;online_service&#8217; 是在 /etc/services 中的 tcp/ip 端口名称。<br />
        这里要注意的是这个配置和在linux下的是完全不一样的,linux下的不是ontlitcp.(没玩过Linux上的informix，不清楚是什么)<br />
        &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>    6.2 编辑/etc/services 文件</p>
<p>        在 /etc/services 中加入 online_service  8888/tcp 即可，再次强调 online_service<br />
        这个名称一定要 sqlhosts 的保持一致，数字可选，但是请使用 文件中没有的端口号，<br />
        1-1024是系统端口号，不要大于 65535 (2的16次方)</p>
<p>7.  检查上述设置并初始化</p>
<p>    1.  Login in as informix</p>
<p>    2.  通过字符界面<br />
        $ onmonitor<br />
        Parameters -> Initialize 方式可以初始化。</p>
<p>    3.  命令方式<br />
        $ oninit -ivy<br />
        -i 表示初始化 (这个参数可别用在已经有数据的生产上，那会死人的)<br />
        -v verbose (这个单词不知道怎么解释，反正你能看到启动的各种信息输出，比较直观)<br />
        -y 全部提示问题都回答 y</p>
<p>    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
    *NOTE:* 2,3 可选任意一种, 建议选择命令方式。如果出错了可以查看<br />
    online.log 日志文件看到底什么出错了。<br />
    &#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>按照上述过程，全部安装完毕！</p>
<p>ONLINE的运行及基本监控  </p>
<p>    1. 启动<br />
       $ oninit<br />
    2. 关闭<br />
       $ onmode -ky<br />
    3. 状态<br />
       $ onstat -<br />
       你可以 &#8216;onstat &#8211;help&#8217; 看一下，仔细研究onstat .</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1381.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库在Linux下二进制日志恢复方法</title>
		<link>http://www.evanjiang.net.cn/archives/1374.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1374.html#comments</comments>
		<pubDate>Thu, 03 Dec 2009 03:27:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1374</guid>
		<description><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog：用于处理二进制日志文件的实用工具”。</p>
<p>　　要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句：</p>
<p>　　SHOW BINLOG EVENTS \G</p>
<p>　　你还可以从命令行输入下面的内容：</p>
<p>　　mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS \G&#8217;</p>
<p>　　将密码my_pwd替换为服务器的root密码。</p>
<p>　　1. 指定恢复时间</p>
<p>　　对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入：</p>
<p>　　mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd</p>
<p>
　　该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd \</p>
<p>　　在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。</p>
<p>　　2. 指定恢复位置</p>
<p>　　也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243; \
　　/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql</p>
<p>　　该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容：</p>
<p>　　mysqlbinlog &#8211;stop-position=&#8221;368312&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root -pmypwd
　　mysqlbinlog &#8211;start-position=&#8221;368315&#8243; /var/log/mysql/bin.123456 \
　　&#124; mysql -u root [...]]]></description>
			<content:encoded><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。“mysqlbinlog：用于处理二进制日志文件的实用工具”。</p>
<p>　　要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句：</p>
<p>　　SHOW BINLOG EVENTS \G</p>
<p>　　你还可以从命令行输入下面的内容：</p>
<p>　　mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS \G&#8217;</p>
<p>　　将密码my_pwd替换为服务器的root密码。</p>
<p>　　1. 指定恢复时间</p>
<p>　　对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入：</p>
<p>　　mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd</p>
<p><span id="more-1374"></span><br />
　　该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd \</p>
<p>　　在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。</p>
<p>　　2. 指定恢复位置</p>
<p>　　也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为：</p>
<p>　　mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243; \<br />
　　/var/log/mysql/bin.123456 > /tmp/mysql_restore.sql</p>
<p>　　该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容：</p>
<p>　　mysqlbinlog &#8211;stop-position=&#8221;368312&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd<br />
　　mysqlbinlog &#8211;start-position=&#8221;368315&#8243; /var/log/mysql/bin.123456 \<br />
　　| mysql -u root -pmypwd \</p>
<p>　　上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句，恢复的数据和相关MySQL日志将反应事务执行的原时间。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1374.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL允许远程连接的设置总结</title>
		<link>http://www.evanjiang.net.cn/archives/1363.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1363.html#comments</comments>
		<pubDate>Wed, 25 Nov 2009 02:45:34 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1363</guid>
		<description><![CDATA[<p>1.修改MySQL配置文件（/etc/mysql/my.cnf），注释以下行：
#bind-address = 127.0.0.1</p>
<p>2.重启mysql数据库，对于Ubuntu系统，执行如下命令
sudo /etc/init.d/mysql restart</p>
<p>3.以root用户登录mysql后，执行如下命令：
grant all privileges on *.* to root@’允许登录的远程机器ip’
identified by ‘密码’</p>
<p>其中，*.*表示该主机中所有数据库的所有表。（数据库.表）
“给某IP地址上登录的root用户授予访问所有数据库中的所有表的所有权限”　 </p>
]]></description>
			<content:encoded><![CDATA[<p>1.修改MySQL配置文件（/etc/mysql/my.cnf），注释以下行：<br />
#bind-address = 127.0.0.1</p>
<p>2.重启mysql数据库，对于Ubuntu系统，执行如下命令<br />
sudo /etc/init.d/mysql restart</p>
<p>3.以root用户登录mysql后，执行如下命令：<br />
grant all privileges on *.* to root@’允许登录的远程机器ip’<br />
identified by ‘密码’</p>
<p>其中，*.*表示该主机中所有数据库的所有表。（数据库.表）<br />
“给某IP地址上登录的root用户授予访问所有数据库中的所有表的所有权限”　 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1363.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MYSQL修改密码的几种方式</title>
		<link>http://www.evanjiang.net.cn/archives/1352.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1352.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:49:05 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1352</guid>
		<description><![CDATA[<p>方法一:</p>
<p>(适用于管理员或者有全局权限的用户重设其它用户的密码)
进入命令行模式
mysql -u root mysql
mysql> UPDATE user SET password=PASSWORD(&#8220;new password&#8221;) WHERE user=&#8217;name&#8217;;
　　mysql> FLUSH PRIVILEGES;
　　mysql> QUIT </p>
<p>方法二:
(应用同上,只是方法不同)
 mysql -u root mysql
　　mysql> SET PASSWORD FOR name=PASSWORD(&#8216;new password&#8217;);
　　mysql> QUIT </p>
<p>(以上两种方法我不常用,如果是管理员,我会用其它如phpmyadmin或者MYSQL-front 等工具来管理用户权限,比较直观又方便)

最后必杀技:</p>
<p>mysqladmin -u root &#8220;old password&#8221; &#8220;new password&#8221; </p>
<p>解:以上有name的,请用你的用户名来替代.有new password请输入你想要设置的密码.</p>
<p>如果 MySQL 正在运行，
首先杀之： killall -TERM mysqld(如果是windows,直接调出进程管理器,结束之)
以安全模式启动 MySQL ：
/usr/bin/safe_mysqld &#8211;skip-grant-tables &#038;
(windows 下 mysql安装所以盘/mysql/bin/safe_mysqld &#8211;skip-grant-tables )
就可以不需要密码就进入 MySQL 了。
然后就是
>use mysql
>update user set password=password(&#8220;new_pass&#8221;) where [...]]]></description>
			<content:encoded><![CDATA[<p>方法一:</p>
<p>(适用于管理员或者有全局权限的用户重设其它用户的密码)<br />
进入命令行模式<br />
mysql -u root mysql<br />
mysql> UPDATE user SET password=PASSWORD(&#8220;new password&#8221;) WHERE user=&#8217;name&#8217;;<br />
　　mysql> FLUSH PRIVILEGES;<br />
　　mysql> QUIT </p>
<p>方法二:<br />
(应用同上,只是方法不同)<br />
 mysql -u root mysql<br />
　　mysql> SET PASSWORD FOR name=PASSWORD(&#8216;new password&#8217;);<br />
　　mysql> QUIT </p>
<p>(以上两种方法我不常用,如果是管理员,我会用其它如phpmyadmin或者MYSQL-front 等工具来管理用户权限,比较直观又方便)<br />
<span id="more-1352"></span><br />
最后必杀技:</p>
<p>mysqladmin -u root &#8220;old password&#8221; &#8220;new password&#8221; </p>
<p>解:以上有name的,请用你的用户名来替代.有new password请输入你想要设置的密码.</p>
<p>如果 MySQL 正在运行，<br />
首先杀之： killall -TERM mysqld(如果是windows,直接调出进程管理器,结束之)<br />
以安全模式启动 MySQL ：<br />
/usr/bin/safe_mysqld &#8211;skip-grant-tables &#038;<br />
(windows 下 mysql安装所以盘/mysql/bin/safe_mysqld &#8211;skip-grant-tables )<br />
就可以不需要密码就进入 MySQL 了。<br />
然后就是<br />
>use mysql<br />
>update user set password=password(&#8220;new_pass&#8221;) where user=&#8221;root&#8221;;<br />
>flush privileges;<br />
重新杀 MySQL ，用正常方法启动 MySQL 。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1352.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL配置文件my.cnf中文版</title>
		<link>http://www.evanjiang.net.cn/archives/1342.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1342.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:45:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1342</guid>
		<description><![CDATA[<p>#BEGIN CONFIG INFO
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大
#TYPE: SYSTEM
#END CONFIG INFO</p>
<p>#
# 此mysql配置文件例子针对4G内存
# 主要使用INNODB
#处理复杂队列并且连接数量较少的mysql服务器
#
# 将此文件复制到/etc/my.cnf 作为全局设置,
# mysql-data-dir/my.cnf 作为服务器指定设置
# (@localstatedir@ for this installation) 或者放入
# ~/.my.cnf 作为用户设置.
#
# 在此配置文件中, 你可以使用所有程序支持的长选项.
# 如果想获悉程序支持的所有选项
# 请在程序后加上&#8221;&#8211;help&#8221;参数运行程序.
#
# 关于独立选项更多的细节信息可以在手册内找到
#</p>
<p>#
# 以下选项会被MySQL客户端应用读取.
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.
# 如果你想你自己的MySQL应用程序获取这些值
# 需要在MySQL客户端库初始化的时候指定这些选项</p>
<p>#
[client]
#password = [your_password]
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@</p>
<p># *** 应用定制选项 ***</p>
<p>#
#  MySQL 服务端
#
[mysqld]</p>
<p># 一般配置选项
port = @MYSQL_TCP_PORT@
socket = @MYSQL_UNIX_ADDR@</p>
<p># back_log 是操作系统在监听队列中所能保持的连接数,
# 队列保存了在MySQL连接管理器线程处理之前的连接.
# 如果你有非常高的连接率并且出现&#8221;connection [...]]]></description>
			<content:encoded><![CDATA[<p>#BEGIN CONFIG INFO<br />
#DESCR: 4GB RAM, 只使用InnoDB, ACID, 少量的连接, 队列负载大<br />
#TYPE: SYSTEM<br />
#END CONFIG INFO</p>
<p>#<br />
# 此mysql配置文件例子针对4G内存<br />
# 主要使用INNODB<br />
#处理复杂队列并且连接数量较少的mysql服务器<br />
#<br />
# 将此文件复制到/etc/my.cnf 作为全局设置,<br />
# mysql-data-dir/my.cnf 作为服务器指定设置<br />
# (@localstatedir@ for this installation) 或者放入<br />
# ~/.my.cnf 作为用户设置.<br />
#<br />
# 在此配置文件中, 你可以使用所有程序支持的长选项.<br />
# 如果想获悉程序支持的所有选项<br />
# 请在程序后加上&#8221;&#8211;help&#8221;参数运行程序.<br />
#<br />
# 关于独立选项更多的细节信息可以在手册内找到<br />
#</p>
<p>#<br />
# 以下选项会被MySQL客户端应用读取.<br />
# 注意只有MySQL附带的客户端应用程序保证可以读取这段内容.<br />
# 如果你想你自己的MySQL应用程序获取这些值<br />
# 需要在MySQL客户端库初始化的时候指定这些选项</p>
<p>#<br />
[client]<br />
#password = [your_password]<br />
port = @MYSQL_TCP_PORT@<br />
socket = @MYSQL_UNIX_ADDR@</p>
<p># *** 应用定制选项 ***</p>
<p>#<br />
#  MySQL 服务端<br />
#<br />
[mysqld]</p>
<p># 一般配置选项<br />
port = @MYSQL_TCP_PORT@<br />
socket = @MYSQL_UNIX_ADDR@</p>
<p># back_log 是操作系统在监听队列中所能保持的连接数,<br />
# 队列保存了在MySQL连接管理器线程处理之前的连接.<br />
# 如果你有非常高的连接率并且出现&#8221;connection refused&#8221; 报错,<br />
# 你就应该增加此处的值.<br />
# 检查你的操作系统文档来获取这个变量的最大值.<br />
# 如果将back_log设定到比你操作系统限制更高的值,将会没有效果<br />
back_log = 50<br />
<span id="more-1342"></span><br />
# 不在TCP/IP端口上进行监听.<br />
# 如果所有的进程都是在同一台服务器连接到本地的mysqld,<br />
# 这样设置将是增强安全的方法<br />
# 所有mysqld的连接都是通过Unix sockets 或者命名管道进行的.<br />
# 注意在windows下如果没有打开命名管道选项而只是用此项<br />
# (通过 &#8220;enable-named-pipe&#8221; 选项) 将会导致mysql服务没有任何作用!<br />
#skip-networking</p>
<p># MySQL 服务所允许的同时会话数的上限<br />
# 其中一个连接将被SUPER权限保留作为管理员登录.<br />
# 即便已经达到了连接数的上限.<br />
max_connections = 100</p>
<p># 每个客户端连接最大的错误允许数量,如果达到了此限制.<br />
# 这个客户端将会被MySQL服务阻止直到执行了&#8221;FLUSH HOSTS&#8221; 或者服务重启<br />
# 非法的密码以及其他在链接时的错误会增加此值.<br />
# 查看 &#8220;Aborted_connects&#8221; 状态来获取全局计数器.<br />
max_connect_errors = 10</p>
<p># 所有线程所打开表的数量.<br />
# 增加此值就增加了mysqld所需要的文件描述符的数量<br />
# 这样你需要确认在[mysqld_safe]中 &#8220;open-files-limit&#8221; 变量设置打开文件数量允许至少4096<br />
table_cache = 2048</p>
<p># 允许外部文件级别的锁. 打开文件锁会对性能造成负面影响<br />
# 所以只有在你在同样的文件上运行多个数据库实例时才使用此选项(注意仍会有其他约束!)<br />
# 或者你在文件层面上使用了其他一些软件依赖来锁定MyISAM表<br />
#external-locking</p>
<p># 服务所能处理的请求包的最大大小以及服务所能处理的最大的请求大小(当与大的BLOB字段一起工作时相当必要)<br />
# 每个连接独立的大小.大小动态增加<br />
max_allowed_packet = 16M</p>
<p># 在一个事务中binlog为了记录SQL状态所持有的cache大小<br />
# 如果你经常使用大的,多声明的事务,你可以增加此值来获取更大的性能.<br />
# 所有从事务来的状态都将被缓冲在binlog缓冲中然后在提交后一次性写入到binlog中<br />
# 如果事务比此值大, 会使用磁盘上的临时文件来替代.<br />
# 此缓冲在每个连接的事务第一次更新状态时被创建<br />
binlog_cache_size = 1M</p>
<p># 独立的内存表所允许的最大容量.<br />
# 此选项为了防止意外创建一个超大的内存表导致永尽所有的内存资源.<br />
max_heap_table_size = 64M</p>
<p># 排序缓冲被用来处理类似ORDER BY以及GROUP BY队列所引起的排序<br />
# 如果排序后的数据无法放入排序缓冲,<br />
# 一个用来替代的基于磁盘的合并分类会被使用<br />
# 查看 &#8220;Sort_merge_passes&#8221; 状态变量.<br />
# 在排序发生时由每个线程分配<br />
sort_buffer_size = 8M</p>
<p># 此缓冲被使用来优化全联合(full JOINs 不带索引的联合).<br />
# 类似的联合在极大多数情况下有非常糟糕的性能表现,<br />
# 但是将此值设大能够减轻性能影响.<br />
# 通过 &#8220;Select_full_join&#8221; 状态变量查看全联合的数量<br />
# 当全联合发生时,在每个线程中分配<br />
join_buffer_size = 8M</p>
<p># 我们在cache中保留多少线程用于重用<br />
# 当一个客户端断开连接后,如果cache中的线程还少于thread_cache_size,<br />
# 则客户端线程被放入cache中.<br />
# 这可以在你需要大量新连接的时候极大的减少线程创建的开销<br />
# (一般来说如果你有好的线程模型的话,这不会有明显的性能提升.)<br />
thread_cache_size = 8</p>
<p># 此允许应用程序给予线程系统一个提示在同一时间给予渴望被运行的线程的数量.<br />
# 此值只对于支持 thread_concurrency() 函数的系统有意义( 例如Sun Solaris).<br />
# 你可可以尝试使用 [CPU数量]*(2..4) 来作为thread_concurrency的值<br />
thread_concurrency = 8</p>
<p># 查询缓冲常被用来缓冲 SELECT 的结果并且在下一次同样查询的时候不再执行直接返回结果.<br />
# 打开查询缓冲可以极大的提高服务器速度, 如果你有大量的相同的查询并且很少修改表.<br />
# 查看 &#8220;Qcache_lowmem_prunes&#8221; 状态变量来检查是否当前值对于你的负载来说是否足够高.<br />
# 注意: 在你表经常变化的情况下或者如果你的查询原文每次都不同,<br />
# 查询缓冲也许引起性能下降而不是性能提升.<br />
query_cache_size = 64M</p>
<p># 只有小于此设定值的结果才会被缓冲<br />
# 此设置用来保护查询缓冲,防止一个极大的结果集将其他所有的查询结果都覆盖.<br />
query_cache_limit = 2M</p>
<p># 被全文检索索引的最小的字长.<br />
# 你也许希望减少它,如果你需要搜索更短字的时候.<br />
# 注意在你修改此值之后,<br />
# 你需要重建你的 FULLTEXT 索引<br />
ft_min_word_len = 4</p>
<p># 如果你的系统支持 memlock() 函数,你也许希望打开此选项用以让运行中的mysql在在内存高度紧张的时候,数据在内存中保持锁定并且防止可能被swapping out<br />
# 此选项对于性能有益<br />
#memlock</p>
<p># 当创建新表时作为默认使用的表类型,<br />
# 如果在创建表示没有特别执行表类型,将会使用此值<br />
default_table_type = MYISAM</p>
<p># 线程使用的堆大小. 此容量的内存在每次连接时被预留.<br />
# MySQL 本身常不会需要超过64K的内存<br />
# 如果你使用你自己的需要大量堆的UDF函数<br />
# 或者你的操作系统对于某些操作需要更多的堆,<br />
# 你也许需要将其设置的更高一点.<br />
thread_stack = 192K</p>
<p># 设定默认的事务隔离级别.可用的级别如下:<br />
# READ-UNCOMMITTED, READ-COMMITTED, REPEATABLE-READ, SERIALIZABLE<br />
transaction_isolation = REPEATABLE-READ</p>
<p># 内部(内存中)临时表的最大大小<br />
# 如果一个表增长到比此值更大,将会自动转换为基于磁盘的表.<br />
# 此限制是针对单个表的,而不是总和.<br />
tmp_table_size = 64M</p>
<p># 打开二进制日志功能.<br />
# 在复制(replication)配置中,作为MASTER主服务器必须打开此项<br />
# 如果你需要从你最后的备份中做基于时间点的恢复,你也同样需要二进制日志.<br />
log-bin=mysql-bin</p>
<p># 如果你在使用链式从服务器结构的复制模式 (A->B->C),<br />
# 你需要在服务器B上打开此项.<br />
# 此选项打开在从线程上重做过的更新的日志,<br />
# 并将其写入从服务器的二进制日志.<br />
#log_slave_updates</p>
<p># 打开全查询日志. 所有的由服务器接收到的查询 (甚至对于一个错误语法的查询)<br />
# 都会被记录下来. 这对于调试非常有用, 在生产环境中常常关闭此项.<br />
#log</p>
<p># 将警告打印输出到错误log文件.  如果你对于MySQL有任何问题<br />
# 你应该打开警告log并且仔细审查错误日志,查出可能的原因.<br />
#log_warnings</p>
<p># 记录慢速查询. 慢速查询是指消耗了比 &#8220;long_query_time&#8221; 定义的更多时间的查询.<br />
# 如果 log_long_format 被打开,那些没有使用索引的查询也会被记录.<br />
# 如果你经常增加新查询到已有的系统内的话. 一般来说这是一个好主意,<br />
log_slow_queries</p>
<p># 所有的使用了比这个时间(以秒为单位)更多的查询会被认为是慢速查询.<br />
# 不要在这里使用&#8221;1&#8243;, 否则会导致所有的查询,甚至非常快的查询页被记录下来(由于MySQL 目前时间的精确度只能达到秒的级别).<br />
long_query_time = 2</p>
<p># 在慢速日志中记录更多的信息.<br />
# 一般此项最好打开.<br />
# 打开此项会记录使得那些没有使用索引的查询也被作为到慢速查询附加到慢速日志里<br />
log_long_format</p>
<p># 此目录被MySQL用来保存临时文件.例如,<br />
# 它被用来处理基于磁盘的大型排序,和内部排序一样.<br />
# 以及简单的临时表.<br />
# 如果你不创建非常大的临时文件,将其放置到 swapfs/tmpfs 文件系统上也许比较好<br />
# 另一种选择是你也可以将其放置在独立的磁盘上.<br />
# 你可以使用&#8221;;&#8221;来放置多个路径<br />
# 他们会按照roud-robin方法被轮询使用.<br />
#tmpdir = /tmp</p>
<p># ***  复制有关的设置</p>
<p># 唯一的服务辨识号,数值位于 1 到 2^32-1之间.<br />
# 此值在master和slave上都需要设置.<br />
# 如果 &#8220;master-host&#8221; 没有被设置,则默认为1, 但是如果忽略此选项,MySQL不会作为master生效.<br />
server-id = 1</p>
<p># 复制的Slave (去掉master段的注释来使其生效)<br />
#<br />
# 为了配置此主机作为复制的slave服务器,你可以选择两种方法:<br />
#<br />
# 1) 使用 CHANGE MASTER TO 命令 (在我们的手册中有完整描述) -<br />
#    语法如下:<br />
#<br />
#    CHANGE MASTER TO MASTER_HOST=<host>, MASTER_PORT=
<port>,<br />
#    MASTER_USER=<user>, MASTER_PASSWORD=
<password> ;<br />
#<br />
#    你需要替换掉 <host>, <user>,
<password> 等被尖括号包围的字段以及使用master的端口号替换
<port> (默认3306).<br />
#<br />
#    例子:<br />
#<br />
#    CHANGE MASTER TO MASTER_HOST=&#8217;125.564.12.1&#8242;, MASTER_PORT=3306,<br />
#    MASTER_USER=&#8217;joe&#8217;, MASTER_PASSWORD=&#8217;secret&#8217;;<br />
#<br />
# 或者<br />
#<br />
# 2) 设置以下的变量. 不论如何, 在你选择这种方法的情况下, 然后第一次启动复制(甚至不成功的情况下,<br />
#     例如如果你输入错密码在master-password字段并且slave无法连接),<br />
#    slave会创建一个 master.info 文件,并且之后任何对于包含在此文件内的参数的变化都会被忽略<br />
#    并且由 master.info 文件内的内容覆盖, 除非你关闭slave服务, 删除 master.info 并且重启slave 服务.<br />
#    由于这个原因,你也许不想碰一下的配置(注释掉的) 并且使用 CHANGE MASTER TO (查看上面) 来代替<br />
#<br />
# 所需要的唯一id号位于 2 和 2^32 &#8211; 1之间<br />
# (并且和master不同)<br />
# 如果master-host被设置了.则默认值是2<br />
# 但是如果省略,则不会生效<br />
#server-id = 2<br />
#<br />
# 复制结构中的master &#8211; 必须<br />
#master-host = <hostname><br />
#<br />
# 当连接到master上时slave所用来认证的用户名 &#8211; 必须<br />
#master-user = <username><br />
#<br />
# 当连接到master上时slave所用来认证的密码 &#8211; 必须<br />
#master-password =
<password>
#<br />
# master监听的端口.<br />
# 可选 &#8211; 默认是3306<br />
#master-port =
<port>
<p># 使得slave只读.只有用户拥有SUPER权限和在上面的slave线程能够修改数据.<br />
# 你可以使用此项去保证没有应用程序会意外的修改slave而不是master上的数据<br />
#read_only</p>
<p>#*** MyISAM 相关选项</p>
<p># 关键词缓冲的大小, 一般用来缓冲MyISAM表的索引块.<br />
# 不要将其设置大于你可用内存的30%,<br />
# 因为一部分内存同样被OS用来缓冲行数据<br />
# 甚至在你并不使用MyISAM 表的情况下, 你也需要仍旧设置起 8-64M 内存由于它同样会被内部临时磁盘表使用.<br />
key_buffer_size = 32M</p>
<p># 用来做MyISAM表全表扫描的缓冲大小.<br />
# 当全表扫描需要时,在对应线程中分配.<br />
read_buffer_size = 2M</p>
<p># 当在排序之后,从一个已经排序好的序列中读取行时,行数据将从这个缓冲中读取来防止磁盘寻道.<br />
# 如果你增高此值,可以提高很多ORDER BY的性能.<br />
# 当需要时由每个线程分配<br />
read_rnd_buffer_size = 16M</p>
<p># MyISAM 使用特殊的类似树的cache来使得突发插入<br />
# (这些插入是,INSERT &#8230; SELECT, INSERT &#8230; VALUES (&#8230;), (&#8230;), &#8230;, 以及 LOAD DATA<br />
# INFILE) 更快. 此变量限制每个进程中缓冲树的字节数.<br />
# 设置为 0 会关闭此优化.<br />
# 为了最优化不要将此值设置大于 &#8220;key_buffer_size&#8221;.<br />
# 当突发插入被检测到时此缓冲将被分配.<br />
bulk_insert_buffer_size = 64M</p>
<p># 此缓冲当MySQL需要在 REPAIR, OPTIMIZE, ALTER 以及 LOAD DATA INFILE 到一个空表中引起重建索引时被分配.<br />
# 这在每个线程中被分配.所以在设置大值时需要小心.<br />
myisam_sort_buffer_size = 128M</p>
<p># MySQL重建索引时所允许的最大临时文件的大小 (当 REPAIR, ALTER TABLE 或者 LOAD DATA INFILE).<br />
# 如果文件大小比此值更大,索引会通过键值缓冲创建(更慢)<br />
myisam_max_sort_file_size = 10G</p>
<p># 如果被用来更快的索引创建索引所使用临时文件大于制定的值,那就使用键值缓冲方法.<br />
# 这主要用来强制在大表中长字串键去使用慢速的键值缓冲方法来创建索引.<br />
myisam_max_extra_sort_file_size = 10G</p>
<p># 如果一个表拥有超过一个索引, MyISAM 可以通过并行排序使用超过一个线程去修复他们.<br />
# 这对于拥有多个CPU以及大量内存情况的用户,是一个很好的选择.<br />
myisam_repair_threads = 1</p>
<p># 自动检查和修复没有适当关闭的 MyISAM 表.<br />
myisam_recover</p>
<p># 默认关闭 Federated<br />
skip-federated</p>
<p># *** BDB 相关选项 ***</p>
<p># 如果你运行的MySQL服务有BDB支持但是你不准备使用的时候使用此选项. 这会节省内存并且可能加速一些事.<br />
skip-bdb</p>
<p># *** INNODB 相关选项 ***</p>
<p># 如果你的MySQL服务包含InnoDB支持但是并不打算使用的话,<br />
# 使用此选项会节省内存以及磁盘空间,并且加速某些部分<br />
#skip-innodb</p>
<p># 附加的内存池被InnoDB用来保存 metadata 信息<br />
# 如果InnoDB为此目的需要更多的内存,它会开始从OS这里申请内存.<br />
# 由于这个操作在大多数现代操作系统上已经足够快, 你一般不需要修改此值.<br />
# SHOW INNODB STATUS 命令会显示当先使用的数量.<br />
innodb_additional_mem_pool_size = 16M</p>
<p># InnoDB使用一个缓冲池来保存索引和原始数据, 不像 MyISAM.<br />
# 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少.<br />
# 在一个独立使用的数据库服务器上,你可以设置这个变量到服务器物理内存大小的80%<br />
# 不要设置过大,否则,由于物理内存的竞争可能导致操作系统的换页颠簸.<br />
# 注意在32位系统上你每个进程可能被限制在 2-3.5G 用户层面内存限制,<br />
# 所以不要设置的太高.<br />
innodb_buffer_pool_size = 2G</p>
<p># InnoDB 将数据保存在一个或者多个数据文件中成为表空间.<br />
# 如果你只有单个逻辑驱动保存你的数据,一个单个的自增文件就足够好了.<br />
# 其他情况下.每个设备一个文件一般都是个好的选择.<br />
# 你也可以配置InnoDB来使用裸盘分区 &#8211; 请参考手册来获取更多相关内容<br />
innodb_data_file_path = ibdata1:10M:autoextend</p>
<p># 设置此选项如果你希望InnoDB表空间文件被保存在其他分区.<br />
# 默认保存在MySQL的datadir中.<br />
#innodb_data_home_dir = <directory></p>
<p># 用来同步IO操作的IO线程的数量. This value is<br />
# 此值在Unix下被硬编码为4,但是在Windows磁盘I/O可能在一个大数值下表现的更好.<br />
innodb_file_io_threads = 4</p>
<p># 如果你发现InnoDB表空间损坏, 设置此值为一个非零值可能帮助你导出你的表.<br />
# 从1开始并且增加此值知道你能够成功的导出表.<br />
#innodb_force_recovery=1</p>
<p># 在InnoDb核心内的允许线程数量.<br />
# 最优值依赖于应用程序,硬件以及操作系统的调度方式.<br />
# 过高的值可能导致线程的互斥颠簸.<br />
innodb_thread_concurrency = 16</p>
<p># 如果设置为1 ,InnoDB会在每次提交后刷新(fsync)事务日志到磁盘上,<br />
# 这提供了完整的ACID行为.<br />
# 如果你愿意对事务安全折衷, 并且你正在运行一个小的食物, 你可以设置此值到0或者2来减少由事务日志引起的磁盘I/O<br />
# 0代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘.<br />
# 2代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上.<br />
innodb_flush_log_at_trx_commit = 1</p>
<p># 加速InnoDB的关闭. 这会阻止InnoDB在关闭时做全清除以及插入缓冲合并.<br />
# 这可能极大增加关机时间, 但是取而代之的是InnoDB可能在下次启动时做这些操作.<br />
#innodb_fast_shutdown</p>
<p># 用来缓冲日志数据的缓冲区的大小.<br />
# 当此值快满时, InnoDB将必须刷新数据到磁盘上.<br />
# 由于基本上每秒都会刷新一次,所以没有必要将此值设置的太大(甚至对于长事务而言)</p>
<p>innodb_log_buffer_size = 8M</p>
<p># 在日志组中每个日志文件的大小.<br />
# 你应该设置日志文件总合大小到你缓冲池大小的25%~100%<br />
# 来避免在日志文件覆写上不必要的缓冲池刷新行为.<br />
# 不论如何, 请注意一个大的日志文件大小会增加恢复进程所需要的时间.<br />
innodb_log_file_size = 256M</p>
<p># 在日志组中的文件总数.<br />
# 通常来说2~3是比较好的.<br />
innodb_log_files_in_group = 3</p>
<p># InnoDB的日志文件所在位置. 默认是MySQL的datadir.<br />
# 你可以将其指定到一个独立的硬盘上或者一个RAID1卷上来提高其性能<br />
#innodb_log_group_home_dir</p>
<p># 在InnoDB缓冲池中最大允许的脏页面的比例.<br />
# 如果达到限额, InnoDB会开始刷新他们防止他们妨碍到干净数据页面.<br />
# 这是一个软限制,不被保证绝对执行.<br />
innodb_max_dirty_pages_pct = 90</p>
<p># InnoDB用来刷新日志的方法.<br />
# 表空间总是使用双重写入刷新方法<br />
# 默认值是 &#8220;fdatasync&#8221;, 另一个是 &#8220;O_DSYNC&#8221;.<br />
#innodb_flush_method=O_DSYNC</p>
<p># 在被回滚前,一个InnoDB的事务应该等待一个锁被批准多久.<br />
# InnoDB在其拥有的锁表中自动检测事务死锁并且回滚事务.<br />
# 如果你使用 LOCK TABLES 指令, 或者在同样事务中使用除了InnoDB以外的其他事务安全的存储引擎<br />
# 那么一个死锁可能发生而InnoDB无法注意到.<br />
# 这种情况下这个timeout值对于解决这种问题就非常有帮助.<br />
innodb_lock_wait_timeout = 120</p>
<p>[mysqldump]<br />
# 不要在将内存中的整个结果写入磁盘之前缓存. 在导出非常巨大的表时需要此项<br />
quick</p>
<p>max_allowed_packet = 16M</p>
<p>[mysql]<br />
no-auto-rehash</p>
<p># 仅仅允许使用键值的 UPDATEs 和 DELETEs .<br />
#safe-updates</p>
<p>[isamchk]<br />
key_buffer = 512M<br />
sort_buffer_size = 512M<br />
read_buffer = 8M<br />
write_buffer = 8M</p>
<p>[myisamchk]<br />
key_buffer = 512M<br />
sort_buffer_size = 512M<br />
read_buffer = 8M<br />
write_buffer = 8M</p>
<p>[mysqlhotcopy]<br />
interactive-timeout</p>
<p>[mysqld_safe]<br />
# 增加每个进程的可打开文件数量.<br />
# 警告: 确认你已经将全系统限制设定的足够高!<br />
# 打开大量表需要将此值设高<br />
open-files-limit = 8192 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1342.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL 数据库的备份和恢复</title>
		<link>http://www.evanjiang.net.cn/archives/1347.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1347.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:43:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1347</guid>
		<description><![CDATA[<p>本文讨论 MySQL 的备份和恢复机制，以及如何维护数据表，包括最主要的两种表类型：MyISAM 和 Innodb，文中设计的 MySQL 版本为 5.0.22。</p>
<p>目前 MySQL 支持的免费备份工具有：mysqldump、mysqlhotcopy，还可以用 SQL 语法进行备份：BACKUP TABLE 或者 SELECT INTO OUTFILE，又或者备份二进制日志（binlog），还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式，因此相对比较容易备份，上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中（也可能是多个文件，或者是独立的表空间文件），相对来说比较不好备份，免费的方案可以是拷贝数据文件、备份 binlog，或者用 mysqldump。</p>
<p>1、mysqldump
1.1 备份
mysqldump 是采用SQL级别的备份机制，它将数据表导成 SQL 脚本文件，在不同的 MySQL 版本之间升级时相对比较合适，这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数：</p>
<p>&#8211;compatible=name
它告诉 mysqldump，导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等，要使用几个值，用逗号将它们隔开。当然了，它并不保证能完全兼容，而是尽量兼容。

&#8211;complete-insert，-c
导出的数据采用包含字段名的完整 INSERT 方式，也就是把所有的值都写在一行。这么做能提高插入效率，但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此，需要谨慎使用该参数，至少我不推荐。 </p>
<p>&#8211;default-character-set=charset
指定导出数据时采用何种字符集，如果数据表不是采用默认的 latin1 字符集的话，那么导出时必须指定该选项，否则再次导入数据后将产生乱码问题。</p>
<p>&#8211;disable-keys
告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 [...]]]></description>
			<content:encoded><![CDATA[<p>本文讨论 MySQL 的备份和恢复机制，以及如何维护数据表，包括最主要的两种表类型：MyISAM 和 Innodb，文中设计的 MySQL 版本为 5.0.22。</p>
<p>目前 MySQL 支持的免费备份工具有：mysqldump、mysqlhotcopy，还可以用 SQL 语法进行备份：BACKUP TABLE 或者 SELECT INTO OUTFILE，又或者备份二进制日志（binlog），还可以是直接拷贝数据文件和相关的配置文件。MyISAM 表是保存成文件的形式，因此相对比较容易备份，上面提到的几种方法都可以使用。Innodb 所有的表都保存在同一个数据文件 ibdata1 中（也可能是多个文件，或者是独立的表空间文件），相对来说比较不好备份，免费的方案可以是拷贝数据文件、备份 binlog，或者用 mysqldump。</p>
<p>1、mysqldump<br />
1.1 备份<br />
mysqldump 是采用SQL级别的备份机制，它将数据表导成 SQL 脚本文件，在不同的 MySQL 版本之间升级时相对比较合适，这也是最常用的备份方法。现在来讲一下 mysqldump 的一些主要参数：</p>
<p>&#8211;compatible=name<br />
它告诉 mysqldump，导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、no_tables_options、no_field_options 等，要使用几个值，用逗号将它们隔开。当然了，它并不保证能完全兼容，而是尽量兼容。<br />
<span id="more-1347"></span><br />
&#8211;complete-insert，-c<br />
导出的数据采用包含字段名的完整 INSERT 方式，也就是把所有的值都写在一行。这么做能提高插入效率，但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此，需要谨慎使用该参数，至少我不推荐。 </p>
<p>&#8211;default-character-set=charset<br />
指定导出数据时采用何种字符集，如果数据表不是采用默认的 latin1 字符集的话，那么导出时必须指定该选项，否则再次导入数据后将产生乱码问题。</p>
<p>&#8211;disable-keys<br />
告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句，这能大大提高插入语句的速度，因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。</p>
<p>&#8211;extended-insert = true|false<br />
默认情况下，mysqldump 开启 &#8211;complete-insert 模式，因此不想用它的的话，就使用本选项，设定它的值为 false 即可。 </p>
<p>&#8211;hex-blob<br />
使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、BLOB。</p>
<p>&#8211;lock-all-tables，-x<br />
在开始导出之前，提交请求锁定所有数据库中的所有表，以保证数据的一致性。这是一个全局读锁，并且自动关闭 &#8211;single-transaction 和 &#8211;lock-tables 选项。</p>
<p>&#8211;lock-tables<br />
它和 &#8211;lock-all-tables 类似，不过是锁定当前导出的数据表，而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表，如果是 Innodb 表可以用 &#8211;single-transaction 选项。</p>
<p>&#8211;no-create-info，-t<br />
只导出数据，而不添加 CREATE TABLE 语句。</p>
<p>&#8211;no-data，-d<br />
不导出任何数据，只导出数据库表结构。</p>
<p>&#8211;opt<br />
这只是一个快捷选项，等同于同时添加 &#8211;add-drop-tables &#8211;add-locking &#8211;create-option &#8211;disable-keys &#8211;extended-insert &#8211;lock-tables &#8211;quick &#8211;set-charset 选项。本选项能让 mysqldump 很快的导出数据，并且导出的数据能很快导回。该选项默认开启，但可以用 &#8211;skip-opt 禁用。注意，如果运行 mysqldump 没有指定 &#8211;quick 或 &#8211;opt 选项，则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。</p>
<p>&#8211;quick，-q<br />
该选项在导出大表时很有用，它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。</p>
<p>&#8211;routines，-R<br />
导出存储过程以及自定义函数。</p>
<p>&#8211;single-transaction<br />
该选项在导出数据之前提交一个 BEGIN SQL语句，BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表，例如 InnoDB 和 BDB。本选项和 &#8211;lock-tables 选项是互斥的，因为 LOCK TABLES 会使任何挂起的事务隐含提交。要想导出大表的话，应结合使用 &#8211;quick 选项。 </p>
<p>&#8211;triggers<br />
同时导出触发器。该选项默认启用，用 &#8211;skip-triggers 禁用它。</p>
<p>其他参数详情请参考手册，我通常使用以下 SQL 来备份 MyISAM 表： </p>
<p>/usr/local/mysql/bin/mysqldump -uyejr -pyejr &#8211;default-character-set=utf8 &#8211;opt &#8211;extended-insert=false \<br />
&#8211;triggers -R &#8211;hex-blob -x db_name > db_name.sql<br />
使用以下 SQL 来备份 Innodb 表： </p>
<p>/usr/local/mysql/bin/mysqldump -uyejr -pyejr &#8211;default-character-set=utf8 &#8211;opt &#8211;extended-insert=false \<br />
&#8211;triggers -R &#8211;hex-blob &#8211;single-transaction db_name > db_name.sql</p>
<p>1.2 还原<br />
用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本，有两种方法可以将数据导入。</p>
<p>直接用 mysql 客户端<br />
例如： </p>
<p>/usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql</p>
<p>用 SOURCE 语法<br />
其实这不是标准的 SQL 语法，而是 mysql 客户端提供的功能，例如： </p>
<p>SOURCE /tmp/db_name.sql;<br />
这里需要指定文件的绝对路径，并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。 </p>
<p>2、 mysqlhotcopy<br />
2.1 备份<br />
mysqlhotcopy 是一个 PERL 程序，最初由Tim Bunce编写。它使用 LOCK TABLES、FLUSH TABLES 和 cp 或 scp 来快速备份数据库。它是备份数据库或单个表的最快的途径，但它只能运行在数据库文件（包括数据表定义文件、数据文件、索引文件）所在的机器上。mysqlhotcopy 只能用于备份 MyISAM，并且只能运行在 类Unix 和 NetWare 系统上。</p>
<p>mysqlhotcopy 支持一次性拷贝多个数据库，同时还支持正则表达。以下是几个例子： </p>
<p>root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name /tmp (把数据库目录 db_name 拷贝到 /tmp 下)<br />
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name_1 ... db_name_n /tmp<br />
root#/usr/local/mysql/bin/mysqlhotcopy -h=localhost -u=yejr -p=yejr db_name./regex/ /tmp<br />
更详细的使用方法请查看手册，或者调用下面的命令来查看 mysqlhotcopy 的帮助： </p>
<p>perldoc /usr/local/mysql/bin/mysqlhotcopy<br />
注意，想要使用 mysqlhotcopy，必须要有 SELECT、RELOAD(要执行 FLUSH TABLES) 权限，并且还必须要能够有读取 datadir/db_name 目录的权限。 </p>
<p>2.2 还原<br />
mysqlhotcopy 备份出来的是整个数据库目录，使用时可以直接拷贝到 mysqld 指定的 datadir (在这里是 /usr/local/mysql/data/)目录下即可，同时要注意权限的问题，如下例： </p>
<p>root#cp -rf db_name /usr/local/mysql/data/<br />
root#chown -R nobody:nobody /usr/local/mysql/data/ (将 db_name 目录的属主改成 mysqld 运行用户)</p>
<p>3、 SQL 语法备份<br />
3.1 备份<br />
BACKUP TABLE 语法其实和 mysqlhotcopy 的工作原理差不多，都是锁表，然后拷贝数据文件。它能实现在线备份，但是效果不理想，因此不推荐使用。它只拷贝表结构文件和数据文件，不同时拷贝索引文件，因此恢复时比较慢。例子： </p>
<p>BACK TABLE tbl_name TO '/tmp/db_name/';<br />
注意，必须要有 FILE 权限才能执行本SQL，并且目录 /tmp/db_name/ 必须能被 mysqld 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。 </p>
<p>SELECT INTO OUTFILE 则是把数据导出来成为普通的文本文件，可以自定义字段间隔的方式，方便处理这些数据。例子： </p>
<p>SELECT INTO OUTFILE '/tmp/db_name/tbl_name.txt' FROM tbl_name;<br />
注意，必须要有 FILE 权限才能执行本SQL，并且文件 /tmp/db_name/tbl_name.txt 必须能被 mysqld 用户可写，导出的文件不能覆盖已经存在的文件，以避免安全问题。 </p>
<p>3.2 恢复<br />
用 BACKUP TABLE 方法备份出来的文件，可以运行 RESTORE TABLE 语句来恢复数据表。例子： </p>
<p>RESTORE TABLE FROM '/tmp/db_name/';<br />
权限要求类似上面所述。 </p>
<p>用 SELECT INTO OUTFILE 方法备份出来的文件，可以运行 LOAD DATA INFILE 语句来恢复数据表。例子： </p>
<p>LOAD DATA INFILE '/tmp/db_name/tbl_name.txt' INTO TABLE tbl_name;<br />
权限要求类似上面所述。倒入数据之前，数据表要已经存在才行。如果担心数据会发生重复，可以增加 REPLACE 关键字来替换已有记录或者用 IGNORE 关键字来忽略他们。 </p>
<p>补充:</p>
<p>shell> mysqldump &#8211;quick db_name | gzip > db_name.contents.gz(该例子中创建的文件是压缩格式）。</p>
<p>恢复/转移到另一台的命令如下:</p>
<p>shell> gunzip < db_name.contents.gz | mysql db_name以上命令,适用于*nix 操作系统的机器</p>
<p>4、 启用二进制日志(binlog)<br />
采用 binlog 的方法相对来说更灵活，省心省力，而且还可以支持增量备份。</p>
<p>启用 binlog 时必须要重启 mysqld。首先，关闭 mysqld，打开 my.cnf，加入以下几行： </p>
<p>server-id	= 1<br />
log-bin		= binlog<br />
log-bin-index	= binlog.index<br />
然后启动 mysqld 就可以了。运行过程中会产生 binlog.000001 以及 binlog.index，前面的文件是 mysqld 记录所有对数据的更新操作，后面的文件则是所有 binlog 的索引，都不能轻易删除。关于 binlog 的信息请查看手册。 </p>
<p>需要备份时，可以先执行一下 SQL 语句，让 mysqld 终止对当前 binlog 的写入，就可以把文件直接备份，这样的话就能达到增量备份的目的了： </p>
<p>FLUSH LOGS;如果是备份复制系统中的从服务器，还应该备份 master.info 和 relay-log.info 文件。 </p>
<p>备份出来的 binlog 文件可以用 MySQL 提供的工具 mysqlbinlog 来查看，如： </p>
<p>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001<br />
该工具允许你显示指定的数据库下的所有 SQL 语句，并且还可以限定时间范围，相当的方便，详细的请查看手册。 </p>
<p>恢复时，可以采用类似以下语句来做到： </p>
<p>/usr/local/mysql/bin/mysqlbinlog /tmp/binlog.000001 | mysql -uyejr -pyejr db_name<br />
把 mysqlbinlog 输出的 SQL 语句直接作为输入来执行它。 </p>
<p>如果你有空闲的机器，不妨采用这种方式来备份。由于作为 slave 的机器性能要求相对不是那么高，因此成本低，用低成本就能实现增量备份而且还能分担一部分数据查询压力，何乐而不为呢？</p>
<p>5、 直接备份数据文件<br />
相较前几种方法，备份数据文件最为直接、快速、方便，缺点是基本上不能实现增量备份。为了保证数据的一致性，需要在靠背文件前，执行以下 SQL 语句： </p>
<p>FLUSH TABLES WITH READ LOCK;也就是把内存中的数据都刷新到磁盘中，同时锁定数据表，以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单，直接拷贝回原来的数据库目录下即可。 </p>
<p>注意，对于 Innodb 类型表来说，还需要备份其日志文件，即 ib_logfile* 文件。因为当 Innodb 表损坏时，就可以依靠这些日志文件来恢复。</p>
<p>6、 备份策略<br />
对于中等级别业务量的系统来说，备份策略可以这么定：第一次全量备份，每天一次增量备份，每周再做一次全量备份，如此一直重复。而对于重要的且繁忙的系统来说，则可能需要每天一次全量备份，每小时一次增量备份，甚至更频繁。为了不影响线上业务，实现在线备份，并且能增量备份，最好的办法就是采用主从复制机制(replication)，在 slave 机器上做备份。</p>
<p>7、 数据维护和灾难恢复<br />
作为一名DBA(我目前还不是，呵呵)，最重要的工作内容之一是保证数据表能安全、稳定、高速使用。因此，需要定期维护你的数据表。以下 SQL 语句就很有用： </p>
<p>CHECK TABLE 或 REPAIR TABLE，检查或维护 MyISAM 表<br />
OPTIMIZE TABLE，优化 MyISAM 表<br />
ANALYZE TABLE，分析 MyISAM 表<br />
当然了，上面这些命令起始都可以通过工具 myisamchk 来完成，在这里不作详述。 </p>
<p>Innodb 表则可以通过执行以下语句来整理碎片，提高索引速度： </p>
<p>ALTER TABLE tbl_name ENGINE = Innodb;<br />
这其实是一个 NULL 操作，表面上看什么也不做，实际上重新整理碎片了。 </p>
<p>通常使用的 MyISAM 表可以用上面提到的恢复方法来完成。如果是索引坏了，可以用 myisamchk 工具来重建索引。而对于 Innodb 表来说，就没这么直接了，因为它把所有的表都保存在一个表空间了。不过 Innodb 有一个检查机制叫 模糊检查点，只要保存了日志文件，就能根据日志文件来修复错误。可以在 my.cnf 文件中，增加以下参数，让 mysqld 在启动时自动检查日志文件： </p>
<p>innodb_force_recovery	= 4<br />
关于该参数的信息请查看手册。 </p>
<p>8、 总结<br />
做好数据备份，定只好合适的备份策略，这是一个DBA所做事情的一小部分，万事开头难，就从现在开始吧！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1347.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mssql数据库系统崩溃后的一般处理步骤</title>
		<link>http://www.evanjiang.net.cn/archives/1345.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1345.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:42:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sqlserver]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1345</guid>
		<description><![CDATA[<p>情况描述：</p>
<p>SQL Server 2000崩溃，重新安装数据库。</p>
<p>有以下准备：</p>
<p>1, 三个系统库（master,msdb,model）的完全备份:</p>
<p>2  两个用户数据库(user01,user02)的备份（周日的完全备份+除周日外每天的差异备份）:</p>
<p>三个系统数据库是早期备份的，之间没有更新过帐号信息，没有增减过作业等等。</p>
<p>两个用户数据库在上周日晚做过完全备份（user01.bak和user02.bak）</p>
<p>准备重新安装数据库,希望能一次性恢复到用户数据库最后一个备份前的状态。</p>
<p>常规恢复过程大致如下
</p>
<p>1. 备份可用的数据, 包含所有系统数据库和用户数据库的数据文件和日志文件(*.mdf/ldf/ndf)</p>
<p>2. 卸载原来的安装</p>
<p>3. 系统表查找和删除所有的MSSQLServer项</p>
<p>4. 磁盘上删除安装SQL SErver产生的所有文件</p>
<p>5. 重新安装SQL Server，所需安装的补丁的版本要求保持与备份系统数据库时安装的补丁版本一致</p>
<p>6. 单用户模式下恢复master数据库</p>
<p>7. 恢复其他系统数据库</p>
<p>8. 恢复用户数据库</p>
<p>可以做的尝试</p>
<p>如果时间比较充分,而且想尽量恢复数据到最近的时间点, 可以在上述步骤中做下面的尝试</p>
<p>1. 把6,7两步改为:</p>
<p>a. 停止MSSQL服务</p>
<p>b. 用步骤1备份的系统数据库的数据文件和日志文件替换安装后生成的系统数据库的对应文件</p>
<p>c. 建立与SQL Server系统崩溃之前一样的用户数据库的存放目录, 并且把用户数据库文件按原来的位置存放</p>
<p>d. 启动MSSQL服务</p>
<p>e. 如果MSSQL服务成功, 在企业管理看看用户数据库有没有置疑, 如果没有置疑, 则其他操作都不用做了, 数据已经恢复</p>
<p>注意:</p>
<p>    在做上面的步骤b之前, 先备份准备覆盖的文件</p>
<p>2. 如果步骤1的尝试不成功, 则再做下面的尝试, 把步骤8修改为下面的:</p>
<p>a. 停止MSSQL服务</p>
<p>b. 用备份的文件还原被覆盖的文件</p>
<p>c. 尝试用附加的方式恢复用户数据库</p>
<p>d. 如果成功, 则修复各用户数据库中的孤立用户</p>
<p>恢复过程会涉及到的一些具体处理</p>
<p>1. 恢复系统数据库:</p>
<p>在SQL Server数据库中，系统信息存储在系统数据库中，主要的系统数据库包括： </p>
<p>master-从整体上控制用户数据库和SQL Server操作，在创建了任何用户定义的对象后，都要备份它</p>
<p>model-为新数据库提供模版和原型 </p>
<p>msdb-包含了有关作业、报警及操作员等信息</p>
<p>如果包含系统数据库的介质变了，那么必须重建系统数据库，如果你仍然可以启动SQL Server服务，则可以通过RESTORE语句从系统数据库的备份中恢复数据库。 </p>
<p>如果master坏了，不能启动系统,可以按照下面步骤进行恢复 </p>
<p>1. 重建系统数据库 运行c:mssql7binnrebuildm.exe，按照提示进行即可，</p>
<p>过程中需要系统数据库样本的路径，可在安装光盘中找到； </p>
<p>2  [...]]]></description>
			<content:encoded><![CDATA[<p>情况描述：</p>
<p>SQL Server 2000崩溃，重新安装数据库。</p>
<p>有以下准备：</p>
<p>1, 三个系统库（master,msdb,model）的完全备份:</p>
<p>2  两个用户数据库(user01,user02)的备份（周日的完全备份+除周日外每天的差异备份）:</p>
<p>三个系统数据库是早期备份的，之间没有更新过帐号信息，没有增减过作业等等。</p>
<p>两个用户数据库在上周日晚做过完全备份（user01.bak和user02.bak）</p>
<p>准备重新安装数据库,希望能一次性恢复到用户数据库最后一个备份前的状态。</p>
<p>常规恢复过程大致如下<br />
<span id="more-1345"></span></p>
<p>1. 备份可用的数据, 包含所有系统数据库和用户数据库的数据文件和日志文件(*.mdf/ldf/ndf)</p>
<p>2. 卸载原来的安装</p>
<p>3. 系统表查找和删除所有的MSSQLServer项</p>
<p>4. 磁盘上删除安装SQL SErver产生的所有文件</p>
<p>5. 重新安装SQL Server，所需安装的补丁的版本要求保持与备份系统数据库时安装的补丁版本一致</p>
<p>6. 单用户模式下恢复master数据库</p>
<p>7. 恢复其他系统数据库</p>
<p>8. 恢复用户数据库</p>
<p>可以做的尝试</p>
<p>如果时间比较充分,而且想尽量恢复数据到最近的时间点, 可以在上述步骤中做下面的尝试</p>
<p>1. 把6,7两步改为:</p>
<p>a. 停止MSSQL服务</p>
<p>b. 用步骤1备份的系统数据库的数据文件和日志文件替换安装后生成的系统数据库的对应文件</p>
<p>c. 建立与SQL Server系统崩溃之前一样的用户数据库的存放目录, 并且把用户数据库文件按原来的位置存放</p>
<p>d. 启动MSSQL服务</p>
<p>e. 如果MSSQL服务成功, 在企业管理看看用户数据库有没有置疑, 如果没有置疑, 则其他操作都不用做了, 数据已经恢复</p>
<p>注意:</p>
<p>    在做上面的步骤b之前, 先备份准备覆盖的文件</p>
<p>2. 如果步骤1的尝试不成功, 则再做下面的尝试, 把步骤8修改为下面的:</p>
<p>a. 停止MSSQL服务</p>
<p>b. 用备份的文件还原被覆盖的文件</p>
<p>c. 尝试用附加的方式恢复用户数据库</p>
<p>d. 如果成功, 则修复各用户数据库中的孤立用户</p>
<p>恢复过程会涉及到的一些具体处理</p>
<p>1. 恢复系统数据库:</p>
<p>在SQL Server数据库中，系统信息存储在系统数据库中，主要的系统数据库包括： </p>
<p>master-从整体上控制用户数据库和SQL Server操作，在创建了任何用户定义的对象后，都要备份它</p>
<p>model-为新数据库提供模版和原型 </p>
<p>msdb-包含了有关作业、报警及操作员等信息</p>
<p>如果包含系统数据库的介质变了，那么必须重建系统数据库，如果你仍然可以启动SQL Server服务，则可以通过RESTORE语句从系统数据库的备份中恢复数据库。 </p>
<p>如果master坏了，不能启动系统,可以按照下面步骤进行恢复 </p>
<p>1. 重建系统数据库 运行c:mssql7binnrebuildm.exe，按照提示进行即可，</p>
<p>过程中需要系统数据库样本的路径，可在安装光盘中找到； </p>
<p>2  重建系统数据库后，启动SQL Server服务，用系统数据库的备份恢复数据库</p>
<p>就行了通常恢复顺序为master->msdb->model </p>
<p>在恢复master的备份时要注意：必须在单用户(single user)模式下进行</p>
<p>进入单用户模式的方法： </p>
<p>a. 在命令行模式下输入：sqlservr -c -f -m或者输入sqlservr -m </p>
<p>其中：-c 可以缩短启动时间，SQL Server 不作为Windows NT的服务启动 </p>
<p>-f 用最小配置启动SQL Server </p>
<p>-m 单用户模式启动SQL Server </p>
<p>b. 可以在控制面板-服务-MSSQLServer的启动参数中输入-c -f -m或者输入-m,点击开始 </p>
<p>3. 进行master数据库的恢复</p>
<p>a. 直接进入查询分析器,有个提示不要理会它</p>
<p>输入恢复语句进行数据库恢复:</p>
<p>RESTORE DATABASE master from disk=&#8217;c:具体的备份文件名&#8217;</p>
<p>b. 或者用这个,在命令提示符下输入,注意大小写</p>
<p>使用&#8221;windows身份验证&#8221;的,输入:isql /E</p>
<p>使用&#8221;sql server和windows身份验证&#8221;的,输入:isql /U&#8221;用户名&#8221; /P&#8221;密码&#8221;</p>
<p>然后在出现的提示符下输入(注意1>,2>是提示符):</p>
<p>1>RESTORE DATABASE master from disk=&#8217;c:具体的备份文件名&#8217;</p>
<p>2>GO</p>
<p>2. 还原数据库的具体步骤:</p>
<p>1. 恢复最近一次的完整备份</p>
<p>企业管理器&#8211;右键&#8221;数据库&#8221;&#8211;所有任务&#8211;还原数据库</p>
<p>&#8211;&#8221;还原为数据库库&#8221;中输入还原后的数据库名,设为:test</p>
<p>&#8211;还原选择&#8221;从设备&#8221;&#8211;选择设备&#8211;添加&#8211;添加你的备份文件</p>
<p>&#8211;确定,回到数据库还原的界面</p>
<p>&#8211;&#8221;还原备份集&#8221;,选择&#8221;数据库&#8211;完全&#8221;</p>
<p>&#8211;选项&#8211;将&#8221;移至物理文件名&#8221;中的物理文件名修改为你的数据文件要存放的文件名</p>
<p>&#8211;如果要还原的数据库已经存在,选择&#8221;在现有数据库上强制还原&#8221;</p>
<p>&#8211;&#8221;恢复完成状态&#8221;,选择&#8221;使数据库不再运行，但能还原其它事务日志&#8221;</p>
<p>&#8211;确定</p>
<p>&#8211;或用SQL语句:</p>
<p>RESTORE DATABASE 数据库名</p>
<p>FROM DISK = &#8216;c:你的完全备份文件名&#8217; </p>
<p>WITH NORECOVERY</p>
<p>2. 恢复完全备份后, 最近一次的差异备份(如果有的话)</p>
<p>企业管理器&#8211;右键&#8221;数据库&#8221;&#8211;所有任务&#8211;还原数据库</p>
<p>&#8211;&#8221;还原为数据库库&#8221;中选择数据库名:test</p>
<p>&#8211;还原选择&#8221;从设备&#8221;&#8211;选择设备&#8211;添加&#8211;添加你的备份文件</p>
<p>&#8211;确定,回到数据库还原的界面</p>
<p>&#8211;&#8221;还原备份集&#8221;,选择&#8221;数据库&#8211;差异&#8221;</p>
<p>&#8211;&#8221;恢复完成状态&#8221;,选择&#8221;使数据库不再运行，但能还原其它事务日志&#8221;</p>
<p>&#8211;确定</p>
<p>&#8211;或用SQL语句:</p>
<p>&#8211;或用SQL语句:</p>
<p>RESTORE DATABASE 数据库名</p>
<p>FROM DISK = &#8216;c:你的差异备份文件名&#8217; </p>
<p>WITH NORECOVERY</p>
<p>3. 按时间先后, 恢复差异备份后(如果没有差异备份,则是完全备份)的所有日志备份</p>
<p>企业管理器&#8211;右键&#8221;数据库&#8221;&#8211;所有任务&#8211;还原数据库</p>
<p>&#8211;&#8221;还原为数据库库&#8221;中选择数据库名:test</p>
<p>&#8211;还原选择&#8221;从设备&#8221;&#8211;选择设备&#8211;添加&#8211;添加你的备份文件</p>
<p>&#8211;确定,回到数据库还原的界面</p>
<p>&#8211;&#8221;还原备份集&#8221;,选择&#8221;事务日志&#8221;</p>
<p>&#8211;&#8221;恢复完成状态&#8221;</p>
<p>   如果是恢复最后一个日志文件,选择&#8221;使数据库可以继续运行，但无法还原其它事务日志&#8221;</p>
<p>   否则选择&#8221;使数据库不再运行，但能还原其它事务日志&#8221;</p>
<p>&#8211;确定</p>
<p>&#8211;或用SQL语句:</p>
<p>RESTORE DATABASE 数据库名</p>
<p>FROM DISK = &#8216;c:你的日志文件名&#8217; </p>
<p>WITH RECOVERY</p>
<p>3. 解决孤立用户:</p>
<p>1. 查看某个数据库的孤立用户:</p>
<p>USE 库名</p>
<p>EXEC sp_change_users_login &#8216;Report&#8217;</p>
<p>2. 自动修复某个孤立用户:</p>
<p>USE 库名</p>
<p>EXEC sp_change_users_login &#8216;Auto_Fix&#8217;, &#8216;孤立用户名&#8217;, NULL, &#8216;密码&#8217;  </p>
<p>  &#8211;密码指用户对应的登录不存在时, 系统自动建立登录, 为登录分配的密码</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1345.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>利用mysqlbinlog工具恢复MySQL数据库</title>
		<link>http://www.evanjiang.net.cn/archives/1343.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1343.html#comments</comments>
		<pubDate>Sat, 17 Oct 2009 07:38:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1343</guid>
		<description><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。关于启用二进制日志的信息，参见5.11.3节，“二进制日志”。对于 mysqlbinlog的详细信息，参见mysql手册8.6节，“mysqlbinlog：用于处理二进制日志文件的实用工具”。 </p>
<p>要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句： </p>
<p>SHOW BINLOG EVENTS G</p>
<p>你还可以从命令行输入下面的内容： </p>
<p>mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS G&#8217;</p>
<p>
将密码my_pwd替换为服务器的root密码。 </p>
<p>1. 指定恢复时间 </p>
<p>对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入： </p>
<p>mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456
  &#124; mysql -u root -pmypwd</p>
<p>该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog： </p>
<p>mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456
  &#124; mysql -u root -pmypwd </p>
<p>在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。 </p>
<p>2. 指定恢复位置 </p>
<p>也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为： </p>
<p>mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243;
  /var/log/mysql/bin.123456 > [...]]]></description>
			<content:encoded><![CDATA[<p>如果MySQL服务器启用了二进制日志，你可以使用mysqlbinlog工具来恢复从指定的时间点开始 (例如，从你最后一次备份)直到现在或另一个指定的时间点的数据。关于启用二进制日志的信息，参见5.11.3节，“二进制日志”。对于 mysqlbinlog的详细信息，参见mysql手册8.6节，“mysqlbinlog：用于处理二进制日志文件的实用工具”。 </p>
<p>要想从二进制日志恢复数据，你需要知道当前二进制日志文件的路径和文件名。一般可以从选项文件(即my.cnf or my.ini，取决于你的系统)中找到路径。如果未包含在选项文件中，当服务器启动时，可以在命令行中以选项的形式给出。启用二进制日志的选项为&#8211; log-bin。要想确定当前的二进制日志文件的文件名，输入下面的MySQL语句： </p>
<p>SHOW BINLOG EVENTS G</p>
<p>你还可以从命令行输入下面的内容： </p>
<p>mysql &#8211;user=root -pmy_pwd -e &#8216;SHOW BINLOG EVENTS G&#8217;</p>
<p><span id="more-1343"></span><br />
将密码my_pwd替换为服务器的root密码。 </p>
<p>1. 指定恢复时间 </p>
<p>对于MySQL 4.1.4，可以在mysqlbinlog语句中通过&#8211;start-date和&#8211;stop-date选项指定DATETIME格式的起止时间。举例说明，假设在今天上午10:00(今天是2005年4月20日)，执行SQL语句来删除一个大表。要想恢复表和数据，你可以恢复前晚上的备份，并输入： </p>
<p>mysqlbinlog &#8211;stop-date=&#8221;2005-04-20 9:59:59&#8243; /var/log/mysql/bin.123456<br />
  | mysql -u root -pmypwd</p>
<p>该命令将恢复截止到在&#8211;stop-date选项中以DATETIME格式给出的日期和时间的所有数据。如果你没有检测到几个小时后输入的错误的SQL语句，可能你想要恢复后面发生的活动。根据这些，你可以用起使日期和时间再次运行mysqlbinlog： </p>
<p>mysqlbinlog &#8211;start-date=&#8221;2005-04-20 10:01:00&#8243; /var/log/mysql/bin.123456<br />
  | mysql -u root -pmypwd </p>
<p>在该行中，从上午10:01登录的SQL语句将运行。组合执行前夜的转储文件和mysqlbinlog的两行可以将所有数据恢复到上午10:00前一秒钟。你应检查日志以确保时间确切。下一节介绍如何实现。 </p>
<p>2. 指定恢复位置 </p>
<p>也可以不指定日期和时间，而使用mysqlbinlog的选项&#8211;start-position和&#8211;stop-position来指定日志位置。它们的作用与起止日选项相同，不同的是给出了从日志起的位置号。使用日志位置是更准确的恢复方法，特别是当由于破坏性SQL语句同时发生许多事务的时候。要想确定位置号，可以运行mysqlbinlog寻找执行了不期望的事务的时间范围，但应将结果重新指向文本文件以便进行检查。操作方法为： </p>
<p>mysqlbinlog &#8211;start-date=&#8221;2005-04-20 9:55:00&#8243; &#8211;stop-date=&#8221;2005-04-20 10:05:00&#8243;<br />
  /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql</p>
<p>该命令将在/tmp目录创建小的文本文件，将显示执行了错误的SQL语句时的SQL语句。你可以用文本编辑器打开该文件，寻找你不要想重复的语句。如果二进制日志中的位置号用于停止和继续恢复操作，应进行注释。用log_pos加一个数字来标记位置。使用位置号恢复了以前的备份文件后，你应从命令行输入下面内容： </p>
<p>mysqlbinlog &#8211;stop-position=&#8221;368312&#8243; /var/log/mysql/bin.123456<br />
 | mysql -u root -pmypwd<br />
mysqlbinlog &#8211;start-position=&#8221;368315&#8243; /var/log/mysql/bin.123456<br />
 | mysql -u root -pmypwd </p>
<p>上面的第1行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置直到二进制日志结束的所有事务。因为mysqlbinlog的输出包括每个SQL语句记录之前的SET TIMESTAMP语句，恢复的数据和相关MySQL日志将反应事务执行的原时间。 </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1343.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos4.2 下yum 安装apache2 mysql4 php4 笔记</title>
		<link>http://www.evanjiang.net.cn/archives/1310.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1310.html#comments</comments>
		<pubDate>Fri, 09 Oct 2009 04:13:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1310</guid>
		<description><![CDATA[<p>由于网站国庆中秋假期出了点问题，是网站服务器管理员人为因素造成的网站不能访问。俺深思之下，决定外迁网站，就跟其它相熟的网友伸请一个免费的VPS主机，空间不大那种。，但空间完全让俺管理，没有其它网站服务的。而且环境还是裸机环境，也就是除了基本系统，以及一个yum外。没有其它网络服务在运行。也就是apache mysql,php环境要自已完全搭建。在搭建apache mysql php环境虽遇到一些波折。但也学习懂得许多，也了解到更多，同时，也精进俺在linux/unix的服务器维护以及以及数据库维护持术。由于俺很久没用linux，以往也少用yum这种软件版本升级安装工具。所以，俺也借此环境搭建，熟悉了yum这种软件版本升级安装工具，以及相关命令。。。。
由于服友的vps 系统是centos 4.2 所以，也只能安装apache2,mysql4,php4 ，可能由yum源的限制，centos 4只能安装apache2,mysql4,php4 ,暂时没有找到可以在centos4.安装apache2,mysql5,php5的源。当然，俺从中也懂得如何修改yum的源。俺之前都说，俺很少用yum。这些也顺便熟悉yum源的设置与相关命令使用。。　
俺在安装apache2,mysql4,php4时，借鉴一些网上的文档，由于网上的文档千篇一律，大同小异，并且都没有什么验证过。致使俺在安装amp环境时，遇到一些疑惑或者问题，但后来都懂过经验来判断解决。。。下面就是俺的安装笔记。跟网上一些文档有些区别，算是俺的修订版吧。。。</p>
<p>
centos  用yum来管理安装Apache+PHP+Mysql的基本安装。
1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件。
yum -y install httpd php mysql mysql-server php-mysql
Yum  -y install mysql*
2. 配置开机启动服务
/sbin/chkconfig httpd on             [设置apache服务器httpd服务开机启动]
/sbin/chkconfig &#8211;add mysqld         [在服务清单中添加mysql服务]
/sbin/chkconfig mysqld [...]]]></description>
			<content:encoded><![CDATA[<p>由于网站国庆中秋假期出了点问题，是网站服务器管理员人为因素造成的网站不能访问。俺深思之下，决定外迁网站，就跟其它相熟的网友伸请一个免费的VPS主机，空间不大那种。，但空间完全让俺管理，没有其它网站服务的。而且环境还是裸机环境，也就是除了基本系统，以及一个yum外。没有其它网络服务在运行。也就是apache mysql,php环境要自已完全搭建。在搭建apache mysql php环境虽遇到一些波折。但也学习懂得许多，也了解到更多，同时，也精进俺在linux/unix的服务器维护以及以及数据库维护持术。由于俺很久没用linux，以往也少用yum这种软件版本升级安装工具。所以，俺也借此环境搭建，熟悉了yum这种软件版本升级安装工具，以及相关命令。。。。<br />
由于服友的vps 系统是centos 4.2 所以，也只能安装apache2,mysql4,php4 ，可能由yum源的限制，centos 4只能安装apache2,mysql4,php4 ,暂时没有找到可以在centos4.安装apache2,mysql5,php5的源。当然，俺从中也懂得如何修改yum的源。俺之前都说，俺很少用yum。这些也顺便熟悉yum源的设置与相关命令使用。。　<br />
俺在安装apache2,mysql4,php4时，借鉴一些网上的文档，由于网上的文档千篇一律，大同小异，并且都没有什么验证过。致使俺在安装amp环境时，遇到一些疑惑或者问题，但后来都懂过经验来判断解决。。。下面就是俺的安装笔记。跟网上一些文档有些区别，算是俺的修订版吧。。。</p>
<p><span id="more-1310"></span><br />
centos  用yum来管理安装Apache+PHP+Mysql的基本安装。<br />
1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件。<br />
yum -y install httpd php mysql mysql-server php-mysql<br />
Yum  -y install mysql*<br />
2. 配置开机启动服务<br />
/sbin/chkconfig httpd on             [设置apache服务器httpd服务开机启动]<br />
/sbin/chkconfig &#8211;add mysqld         [在服务清单中添加mysql服务]<br />
/sbin/chkconfig mysqld on             [设置mysql服务开机启动]<br />
/sbin/service httpd start            [启动httpd服务,与开机启动无关]<br />
/sbin/service mysqld start           [启动mysql服务,与开机无关]</p>
<p>Yum 安装的mysql下自动生成my.cnf没法正常使用。致使mysql无法正常启动。必需手工编辑一个新的my.cnf 文件。<br />
但就是在这点花费大量时间去排查与查文档。查了大量文档，都没有查到，最后才在一个外国网站查到有人说，centos4　默认yum安装mysql 所产生的my.cnf有问题。所以，俺才将排查重点放在my.cnf　上面。最后，在网上顺便找一个my.cnf配置代替原有的my.cnf ，之后，mysql就启动成功。。<br />
 My.cnf内容如下：<br />
[client]<br />
#password      = your_password<br />
port            = 3306<br />
socket          = /var/lib/mysql/mysql.sock </p>
<p>[mysqld]<br />
port            = 3306<br />
socket          = /var/lib/mysql/mysql.sock<br />
skip-locking<br />
key_buffer = 16M<br />
max_allowed_packet = 1M<br />
table_cache = 64<br />
sort_buffer_size = 512K<br />
net_buffer_length = 8K<br />
read_buffer_size = 256K<br />
read_rnd_buffer_size = 512K<br />
myisam_sort_buffer_size = 8M<br />
skip-innodb </p>
<p>log-bin<br />
server-id      = 1<br />
[mysqldump]<br />
quick<br />
max_allowed_packet = 16M </p>
<p>[mysql]<br />
no-auto-rehash<br />
# Remove the next comment character if you are not familiar with SQL<br />
#safe-updates </p>
<p>[isamchk]<br />
key_buffer = 20M<br />
sort_buffer_size = 20M<br />
read_buffer = 2M<br />
write_buffer = 2M </p>
<p>[myisamchk]<br />
key_buffer = 20M<br />
sort_buffer_size = 20M<br />
read_buffer = 2M<br />
write_buffer = 2M </p>
<p>[mysqlhotcopy]<br />
interactive-timeout<br />
再运行 /sbin/service mysqld start  mysql 就运行成功。<br />
3.设置mysql数据库root帐号密码。<br />
mysqladmin -u root password &#8216;newpassword&#8217;           [引号内填密码]<br />
4. 让mysql数据库更安全<br />
mysql -u root -p<br />
mysql> DROP DATABASE test;                            [删除test数据库]<br />
mysql> DELETE FROM mysql.user WHERE user = &#8221;;        [删除匿名帐户]<br />
mysql> FLUSH PRIVILEGES;                              [重载权限]<br />
5. 按照以上的安装方式, 配置出来的默认站点目录为/var/www/html/<br />
//安装apache扩展<br />
yum -y install httpd-manual mod_ssl mod_perl mod_auth_mysql<br />
//安装php的扩展<br />
yum install php-gd<br />
yum -y install php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc<br />
//安装mysql扩展<br />
yum -y install mysql-connector-odbc mysql-devel libdbi-dbd-mysql</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1310.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>在Solaris10系统上安装Oracle10g数据库</title>
		<link>http://www.evanjiang.net.cn/archives/1277.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1277.html#comments</comments>
		<pubDate>Tue, 11 Aug 2009 16:17:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[sun unix]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1277</guid>
		<description><![CDATA[<p>1、安装solaris10过程略
1. 修改内核</p>
<p>vi /etc/system</p>
<p>set shmsys:shminfo_shmmax=268435456（本机内存为512M）</p>
<p>set shmsys:shminfo_shmmin=1</p>
<p>set shmsys:shminfo_shmmni=100</p>
<p>set shmsys:shminfo_shmseg=10</p>
<p>set semsys:seminfo_semmni=110</p>
<p>set semsys:seminfo_semmns=310</p>
<p>2. 创建用户和组</p>
<p># groupadd dba</p>
<p>#useradd –g dba –d /export/home/oracle –m oracle</p>
<p>#passwd oracle </p>
<p>3.设定oracle用户的环境参数</p>
<p>#su – oracle</p>
<p>$vi .profile        # 加入内容：</p>
<p>ORACLE_BASE=/export/home/oracle </p>
<p>ORACLE_HOME=$ORACLE_BASE/product/10.0 </p>
<p>ORACLE_SID=ora10g

NLS_LANG=AMERICAN_AMERICA.ZHS16GBK </p>
<p>PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/ccs/bin:/usr/local/bin </p>
<p>LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/local/lib:/usr/lib </p>
<p>TMPDIR=/var/tmp </p>
<p>export ORALCE_BASE ORACLE_HOME ORACLE_SID NLS_LANG PATH </p>
<p>LD_LIBRARY_PATH  DISPLAY TMPDIR </p>
<p>umask 022</p>
<p># DISPLAY=192.168.0.178:0.0   俺在安装时会报错，后来就注释</p>
<p>4.解压oracle 10g安装包</p>
<p>将长长的文件名改为sol10g.cpio.gz</p>
<p>#cp sol10g.cpio.gz [...]]]></description>
			<content:encoded><![CDATA[<p>1、安装solaris10过程略<br />
1. 修改内核</p>
<p>vi /etc/system</p>
<p>set shmsys:shminfo_shmmax=268435456（本机内存为512M）</p>
<p>set shmsys:shminfo_shmmin=1</p>
<p>set shmsys:shminfo_shmmni=100</p>
<p>set shmsys:shminfo_shmseg=10</p>
<p>set semsys:seminfo_semmni=110</p>
<p>set semsys:seminfo_semmns=310</p>
<p>2. 创建用户和组</p>
<p># groupadd dba</p>
<p>#useradd –g dba –d /export/home/oracle –m oracle</p>
<p>#passwd oracle </p>
<p>3.设定oracle用户的环境参数</p>
<p>#su – oracle</p>
<p>$vi .profile        # 加入内容：</p>
<p>ORACLE_BASE=/export/home/oracle </p>
<p>ORACLE_HOME=$ORACLE_BASE/product/10.0 </p>
<p>ORACLE_SID=ora10g<br />
<span id="more-1277"></span><br />
NLS_LANG=AMERICAN_AMERICA.ZHS16GBK </p>
<p>PATH=$ORACLE_HOME/bin:/bin:/sbin:/usr/ccs/bin:/usr/local/bin </p>
<p>LD_LIBRARY_PATH=$ORACLE_HOME/lib:$ORACLE_HOME/network/lib:/usr/local/lib:/usr/lib </p>
<p>TMPDIR=/var/tmp </p>
<p>export ORALCE_BASE ORACLE_HOME ORACLE_SID NLS_LANG PATH </p>
<p>LD_LIBRARY_PATH  DISPLAY TMPDIR </p>
<p>umask 022</p>
<p># DISPLAY=192.168.0.178:0.0   俺在安装时会报错，后来就注释</p>
<p>4.解压oracle 10g安装包</p>
<p>将长长的文件名改为sol10g.cpio.gz</p>
<p>#cp sol10g.cpio.gz /export/home</p>
<p>在解压 #gunzip sol10g.cpio.gz</p>
<p>#cpio –ivmd < 10g.cpio</p>
<p>修改/export/home/Disk1/install里，修改oraparam.ini  oraparam.var 的版本声明Solaris=5.6,5.7,5.8,5.9,</p>
<p>5.安装</p>
<p>以oracle帐号进行安装</p>
<p>./runInstaller  后面的步骤就简单</p>
<p> 在solaris10上安装oracle10g过程及问题简单记录<br />
下载的文件为solarisx86_DB_10_1_0_3_Disk1.cpio.gz<br />
1、首先解gz文件<br />
      #gunzip solarisx86_DB_10_1_0_3_Disk1.cpio.gz<br />
2、解cpio文件<br />
      #cpio -idmv < solarisx86_DB_10_1_0_3_Disk1.cpio<br />
3、安装时提示：<br />
      Checking operating system version: must be 5.6, 5.7, 5.8 or 5.9. Actual 5.10<br />
      Failed <<<<<br />
      问题解决：<br />
在&#8230;&#8230;../Disk1/install里，修改oraparam.ini oraparam.var</p>
<p>修改如下：<br />
vi oraparam.ini</p>
<p>#You can customise error message shown for failure through CERTIFIED_VERSION_FAI<br />
LURE_MESSAGE<br />
Solaris=5.6,5.7,5.8,5.9,5.10 （就是添加5.10）<br />
Linux=redhat-2.1AS<br />
#HPUX=B.11.00<br />
Decunix=V5.1A,V5.1<br />
AIX=5.1.0.0</p>
<p>vi oraparam.var</p>
<p>#You can customise error message shown for failure through CERTIFIED_VERSION_FAI<br />
LURE_MESSAGE<br />
Solaris=5.8,5.9,5.10 （就是添加5.10）<br />
Windows=4.0,5.0,5.1,5.2<br />
Linux=redhat-2.1AS<br />
HPUX=B.11.11<br />
Decunix=V5.1A,V5.1<br />
AIX=5.1.0.0</p>
<p>保存，再执行./runInstaller 。</p>
<p>Oracle10g EM乱码之快速解决<br />
如果安装时,我们系统环境变量设置的是中文环境,那么就不会有这个问题.这个问题根本原因在于安装时,JDK/JRE字符集的自动选择.<br />
在 $ORACLE_HOME/jdk/jre/lib 和 $ORACLE_HOME/jre/1.4.2/lib/ 目录下都有多种字符集字体配置文件:</p>
<p>[oracle@danaly ~]$ cd $ORACLE_HOME/jdk/jre/lib<br />
[oracle@danaly lib]$ ls font*zh_CN*<br />
font.properties.zh_CN.Redhat  font.properties.zh_CN.Redhat2.1<br />
font.properties.zh_CN.Sun  font.properties.zh_CN_UTF8.Sun<br />
[oracle@danaly lib]$ cd $ORACLE_HOME/jre/1.4.2/lib/<br />
[oracle@danaly lib]$ ls font*zh_CN*<br />
font.properties.zh_CN.Redhat  font.properties.zh_CN.Redhat2.1<br />
font.properties.zh_CN.Sun  font.properties.zh_CN_UTF8.Sun<br />
我们只要用合适的中文字符集文件替换缺省文件即可,我选择使用font.properties.zh_CN.Redhat来替换缺省字体定义文件:<br />
[oracle@danaly lib]$ cp font.properties.zh_CN.Redhat font.properties<br />
替换之后需要清理一下Cache,重启EM即可.<br />
Cache路径通常位于:<br />
$ORACLE_HOME/oc4j/j2ee/oc4j_applications/applications/em/em/cabo/images/cache/zhs<br />
清除所有gif文件即可.然后重新启动EM:<br />
[oracle@danaly zhs]$ emctl stop dbconsole<br />
TZ set to PRC<br />
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0<br />
Copyright (c) 1996, 2005 Oracle Corporation.  All rights reserved.</p>
<p>http://danaly.hurrray.com.cn:1158/em/console/aboutApplication</p>
<p>Stopping Oracle Enterprise Manager 10g Database Control &#8230;<br />
 &#8230;  Stopped.<br />
[oracle@danaly zhs]$ emctl start dbconsole<br />
TZ set to PRC<br />
Oracle Enterprise Manager 10g Database Control Release 10.2.0.1.0<br />
Copyright (c) 1996, 2005 Oracle Corporation.  All rights reserved.</p>
<p>http://danaly.hurrray.com.cn:1158/em/console/aboutApplication</p>
<p>Starting Oracle Enterprise Manager 10g Database Control &#8230;&#8230;&#8230;&#8230;.. started.<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Logs are generated in directory<br />
/opt/oracle/product/10.2.0/danaly.hurrray.com.cn_danaly/sysman/log<br />
现在登陆Web页面,EM显示就可以正常显示中文.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1277.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian 配置 LAMP (debian5.0+apache2.2+mysql5.0+php5.0 )</title>
		<link>http://www.evanjiang.net.cn/archives/1271.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1271.html#comments</comments>
		<pubDate>Sat, 08 Aug 2009 07:17:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1271</guid>
		<description><![CDATA[<p>一、安装基本程式
~#apt-get install apache2 mysql-server php5 php5-mysql  phpmyadin pear php5-gd
#在安装过程序会提示你设置mysql的root用户密码。</p>
<p>在Debian下只要安装相关软体，无需修改任何配置文件，把网页程序上传到/var/www目录，更改权限为777，服务器就能够工作！
二、LAMP简单配置
经过前面的步骤，服务器就能够正常运行，但是有时候达不到我们的要求，所以掌握基本配置方法是很有必要的。</p>
<p>1、建立mysql数据库，并添一个仅拥有这些数据库权限的用户，以便网页程序使用，提高服务器的安全性。
~#mysql -h127.1 -uroot -pabcabc
#连接mysql服务器，其中-h是主机，-u是用户名，-p是密码。注意各参数与附值之间没有空格。
> create database lamp;
#创建数据库lamp，注意mysql内部命令必需以“;”结尾。
>show databases;
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+
&#124; Database           &#124;
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+
&#124; information_schema &#124;
&#124; lamp               &#124;
&#124; mysql        [...]]]></description>
			<content:encoded><![CDATA[<p>一、安装基本程式<br />
~#apt-get install apache2 mysql-server php5 php5-mysql  phpmyadin pear php5-gd<br />
#在安装过程序会提示你设置mysql的root用户密码。</p>
<p>在Debian下只要安装相关软体，无需修改任何配置文件，把网页程序上传到/var/www目录，更改权限为777，服务器就能够工作！<br />
二、LAMP简单配置<br />
经过前面的步骤，服务器就能够正常运行，但是有时候达不到我们的要求，所以掌握基本配置方法是很有必要的。</p>
<p>1、建立mysql数据库，并添一个仅拥有这些数据库权限的用户，以便网页程序使用，提高服务器的安全性。<br />
~#mysql -h127.1 -uroot -pabcabc<br />
#连接mysql服务器，其中-h是主机，-u是用户名，-p是密码。注意各参数与附值之间没有空格。<br />
> create database lamp;<br />
#创建数据库lamp，注意mysql内部命令必需以“;”结尾。<br />
>show databases;<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
| Database           |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
| information_schema |<br />
| lamp               |<br />
| mysql              |<br />
+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+<br />
4 rows in set (0.00 sec)<br />
#查看数据库。<br />
>grant all on lamp.* to lyb@localhost identified by &#8216;abc123&#8242;;<br />
#建立用户名lyb，只允许本地登录，密码为“abc123”，仅拥有数据库lamp的完全权限。l<br />
<span id="more-1271"></span><br />
2、apache2配置文件介绍。<br />
Debian 5.0 的apache2的配置文件全在/etc/apache2/目录下面。<br />
apache2.conf<br />
#apache的全局配置文件。<br />
envvars<br />
#定义apache的用户环境。<br />
ports.conf<br />
#定义监听端口。<br />
httpd.conf<br />
#默认为空文件，一般用户自已添加的选项写入这里。<br />
mods-available<br />
#以load文件结尾的是加载相应模块选项，以conf文件结尾的是相应模块选项。<br />
mods-enabled<br />
#都是指向mods-available下面的文件的链接文件，需要启用那些模块就在此建立相关链接即可。<br />
sites-available<br />
#虚拟主机配置文件<br />
sites-enabled<br />
#指向sites-available目录下文件的链接。<br />
conf.d<br />
#定义字符编码和其它选项。<br />
三、性能调优<br />
1、内核优化，vim /etc/sysctl.conf<br />
# Use TCP syncookies when needed<br />
net.ipv4.tcp_syncookies = 1<br />
# Enable TCP window scaling<br />
net.ipv4.tcp_window_scaling: = 1<br />
# Increase TCP max buffer size<br />
net.core.rmem_max = 16777216<br />
net.core.wmem_max = 16777216<br />
# Increase Linux autotuning TCP buffer limits<br />
net.ipv4.tcp_rmem = 4096 87380 16777216<br />
net.ipv4.tcp_wmem = 4096 65536 16777216<br />
# Increase number of ports available<br />
net.ipv4.ip_local_port_range = 1024 65000<br />
2、优化磁盘<br />
在文件系统上禁用 atime 日志记录特性。atime 是最近访问文件的时间，每当访问文件时，底层文件系统必须记录这个时间戳。因为系统管理员很少使用atime，禁用它可以减少磁盘访问时间。禁用这个特性的方法是，在 /etc/fstab 的第四列中添加 noatime 选项。<br />
例如：LABEL=/boot             /boot                   ext3    defaults,noatime        1 2<br />
3、调优Apache<br />
需要伸缩性的站点可以选择worker或event线程化的MPM，而需要稳定性和兼容性的站点可以用prefork。<br />
一个经典 worker MPM 配置：<br />
ServerLimit 128<br />
StartServers 8<br />
MaxClients 3000<br />
MinSpareThreads 128<br />
MaxSpareThreads 1024<br />
ThreadsPerChild 32<br />
一个 perfoxk MPM 配置实例：<br />
StartServers 32<br />
MinSpareServers 32<br />
MaxSpareServers 64<br />
MaxClients 1024<br />
MaxRequestsPerChild 4000</p>
<p>有效的使用选项和重写<br />
<Directory /><br />
    AllowOverride None<br />
    Options FollowSymLinks<br />
</Directory><br />
如果使用 -FollowSymLinks，该特性就会被禁用。如果禁用了 FollowSymLinks，Apache 就必须检查使用该文件名的所有组件（目录和文件本身），以确保它们不是符号连接。这会带来额外的开销（磁盘操作）。<br />
AllowOverride None 是不允许重写，这能消除 Apache 检查 .htaccess 的需求。<br />
HostnameLookups off 指令禁用 DNS 查找，因为试图反向解析连接到您的服务器的所有 IP 地址无疑是浪费资源。</p>
<p>持久连接<br />
KeepAlive On<br />
KeepAliveTimeout 5</p>
<p>关闭DNS查询<br />
HostnameLookups off</p>
<p>合理配置缓冲模块<br />
mod_cache<br />
mod_disk_cache<br />
mod_mem_cache<br />
mod_file_cache</p>
<p>4、优化 php.ini ，四个重要的控制设置 PHP 可以使用多少系统资源。<br />
max_execution_time 一个脚本可使用多少 CPU 秒，建议值 30<br />
max_input_time 一个脚本等待输入数据的时间有多长（秒），建议值 60<br />
memory_limit 在被取消之前，一个脚本可使用多少内存（字节），建议值 32M<br />
output_buffering 数据发送给客户机之前，有多少数据（字节）需要缓存，建议值 4096<br />
PHP 可执行的日志记录数是可配置的。在生产环境中，禁用除最重要的日志以外的一切日志记录能够减少磁盘写操作。如果需要使用日志来排除问题，那么可以按需启用日志记录。error_reporting = E_COMPILE_ERROR|E_ERROR|E_CORE_ERROR 将启用足够的日志记录，使您发现问题，同时从脚本中消除大量无用的内容。<br />
5、优化MySQL<br />
参考：<br />
三、应用 php 加速<br />
1、安装 XCache 或 eAccelerator<br />
下载：apt-get install php5-xcache<br />
下载：http://bart.eaccelerator.net/source/0.9.5.3/eaccelerator-0.9.5.3.tar.bz2</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1271.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>DEBIAN 下安装 ORACLE10</title>
		<link>http://www.evanjiang.net.cn/archives/1261.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1261.html#comments</comments>
		<pubDate>Sun, 02 Aug 2009 14:06:24 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1261</guid>
		<description><![CDATA[<p>
1 安装准备
1.1 系统的准备
  本文是在Debian linux下Oracle10g的安装笔记。我假设您已经成功的安装并配置Debian Linux。
1.2 依赖包的安装
  在开始Oracle的安装之前，请您确保您至少已经安装以下软件包。
  make gcc g++ libc6-dev
  注意：我不确 定，您是否只需要安装以上软件包，但我可以确定的是，您必须安装以上软件包。软件包的安装： apt-get install make gcc g++ libc6-dev
1.3 创建用户和组
  oracle安装需要两个unix用户组和一个运行时的oracle用户。
  以root登录：
[root@james]# groupadd dba
[root@james]# groupadd oinstall
[root@james]# useradd -g oinstall -G dba -m oracle
[root@james]# passwd oracle
1.4 创建目录
  有很多文档，建议您将oracle安装到一个独立的分区上面。比如：/opt。请您根据您的需要选择合适自己的安装目录。在本文档中，我们假设 oracle的安装目录为/usr/local/ora10。
  确保有至少3.5G的可用空间。
[root@james]# mkdir -p /usr/local/ora10/product/10.1.0
[root@james]# mkdir /var/opt/oracle
[root@james]# chown oracle.dba [...]]]></description>
			<content:encoded><![CDATA[<p>
1 安装准备<br />
1.1 系统的准备<br />
  本文是在Debian linux下Oracle10g的安装笔记。我假设您已经成功的安装并配置Debian Linux。<br />
1.2 依赖包的安装<br />
  在开始Oracle的安装之前，请您确保您至少已经安装以下软件包。<br />
  make gcc g++ libc6-dev<br />
  注意：我不确 定，您是否只需要安装以上软件包，但我可以确定的是，您必须安装以上软件包。软件包的安装： apt-get install make gcc g++ libc6-dev<br />
1.3 创建用户和组<br />
  oracle安装需要两个unix用户组和一个运行时的oracle用户。<br />
  以root登录：<br />
[root@james]# groupadd dba<br />
[root@james]# groupadd oinstall<br />
[root@james]# useradd -g oinstall -G dba -m oracle<br />
[root@james]# passwd oracle<br />
1.4 创建目录<br />
  有很多文档，建议您将oracle安装到一个独立的分区上面。比如：/opt。请您根据您的需要选择合适自己的安装目录。在本文档中，我们假设 oracle的安装目录为/usr/local/ora10。<br />
  确保有至少3.5G的可用空间。<br />
[root@james]# mkdir -p /usr/local/ora10/product/10.1.0<br />
[root@james]# mkdir /var/opt/oracle<br />
[root@james]# chown oracle.dba /var/opt/oracle<br />
[root@james]# chown -R oracle.dba /usr/local/ora10<br />
[root@james]# chmod 755 /var/opt/oracle<br />
  您生成oracle的运行时路径，并且授写权限给oracle用户，执行权限给dba组。<br />
1.5 设置内核参数<br />
1.5.1 修改sysctl.conf<br />
  添加如下的行到/etc/sysctl.conf中：<br />
kernel.shmmax = 536870912<br />
kernel.shmmni = 4096<br />
kernel.shmall = 2097152<br />
kernel.sem   = 250 32000 100 128<br />
fs.file-max   = 65536<br />
net.ipv4.ip_local_port_range = 1024 65000</p>
<p>  注：shmmax是一个很重要参数，根据您的机器的内存来设定。如果您设置不合适的话，在创建数据库到约76%的时候就会挂掉。祝您好运。^_^<br />
1.5.2 修改limits.conf<br />
  添加下面的行到/etc/security/limits.conf以修改你的资源限制：<br />
oracle soft nofile 65536<br />
oracle hard nofile 65536<br />
oracle soft nproc 16384<br />
oracle hard nproc 16384<br />
<span id="more-1261"></span><br />
1.5.3 让修改生效<br />
  修改以上文件后，您必须让其生效，您重启系统，或者用以下的方式改变内核运行参数：<br />
[root@james]# echo 250 32000 100 128 > /proc/sys/kernel/sem<br />
[root@james]# echo 536870912 > /proc/sys/kernel/shmmax<br />
[root@james]# echo 4096 > /proc/sys/kernel/shmmni<br />
[root@james]# echo 2097152 > /proc/sys/kernel/shmall<br />
[root@james]# echo 65536 > /proc/sys/fs/file-max<br />
[root@james]# echo 1024 65000 > /proc/sys/net/ipv4/ip_local_port_range<br />
1.6 设置Oracle用户环境<br />
  以oracle用户登录：<br />
%su – oracle<br />
  修改~/.bash_profile文件，去掉下列三行的注释符，使.bashrc文件生效：<br />
#if [ -f ~/.bashrc ]; then<br />
#   . ~/.bashrc<br />
#fi<br />
  添加下列行到~/.bashrc:<br />
# oracle 10g<br />
export ORACLE_BASE=/usr/local/ora10<br />
export ORACLE_HOME=/usr/local/ora10/product/10.1.0<br />
export PATH=$ORACLE_HOME/bin/ORACLE_HOME/Apache/Apache/bin/PATH<br />
export ORACLE_OWNER=oracle<br />
export ORACLE_SID=compiere<br />
export ORACLE_TERM=xterm</p>
<p># Edit paths<br />
export LD_LIBRARY_PATH=/usr/local/ora10/product/10.1.0/lib/LD_LIBRARY_PATH<br />
export PATH=/usr/local/ora10/product/10.1.0/bin/PATH</p>
<p># Set DISPLAY<br />
export DISPLAY=&#8221;127.0.0.1:0.0&#8243;<br />
  我是将上面的内容保存到另一个文件中，.bash_oracle，然后在.bashrc中使用source .bash_oracle进行调用 的。您可以根据您的好恶进行设置。您需要注意的是，ORACLE_BASE和ORACLE_HOME的设置一定得和您在前面创建的目录相符。 ORACLE_SID是默认数据库的名称，在本文档中，我们假设默认的数据库名叫compiere，如果您想用其他的名字，请您作相应的修改。<br />
  在有些文档中，还建议您需要设置一些其他的内核参数。但是我在安装的时候，没有设置。我的内核是2.6.8。<br />
  差别忘记，您还得把. bash_profile文件中的umask=022这一行前的注释符去掉。<br />
1.7 设置DISPLAY<br />
  我想您肯定是不想以Oracle用户登录，启动X窗口来进行安装的啦。如果您想直接以oracle用户启动X，进行安装，您可以忽略这一步。<br />
  我们假设我们以一个普通用户james来启动gnome。那么，如果您要以oracle用户的身份来进行安装，则您必须首先启用X的TCP/IP连接。<br />
  Debian下默认关闭TCP/IP连接，所以首先要打开X的TCP/IP连接。<br />
  在/etc/X11/xinit/xserverrc文件中，您将会看到下面这一行：<br />
exec /usr/bin/X11/X -dpi 100 -nolisten tcp<br />
  去掉其中的nolisten，然后重启就OK。<br />
  作为普通用户，打开TCP/IP连接后可能连不上X服务器。需要在用户的.bashrc(/home/james/)中添加下面这一行：<br />
alias startx=&#8217;startx &#8212; -deferglyphs 16&#8242;<br />
  然后，您切换到root用户下，添加127.0.0.1的X连接权限：<br />
shell$sudo su -<br />
shell#xhost +127.0.0.1<br />
  然后，您就可以继续下一步啦。<br />
  请注意：如果您重启系统后，必须 再次执行<br />
xhost +127.0.0.1<br />
2 执行安装<br />
2.1 交换分区的调整<br />
  差点忘，为安装Oracle 10g,oracle推荐至少512M内存和至少400M交换空间。内存，好象不够关系也不大，但是交换分区 呢，您还是大方一点吧。如果您的交换分区不够400M，那么您还是先看看这一步吧。<br />
重设交换分区可以使用如下操作：<br />
shell# dd if=/dev/zero of=tmp_swap bs=1k count=900000<br />
shell# chmod 600 tmp_swap<br />
shell# mkswap tmp_swap<br />
shell# swapon tmp_swap<br />
  完成安装以后，可以释放这个空间：<br />
shell# swapoff tmp_swap<br />
shell# rm tmp_swap<br />
  count值是根据您需要调整的交换分区大小而定。<br />
2.1 运行Installer<br />
  终于可以安装。我们假设下载的安装文件位于/home/oracle下，名称为ship.db.cpio.gz<br />
shell#su &#8211; oracle<br />
shell>gunzip ship.db.cpio.gz # 目录下会生成ship.db.cpio文件<br />
shell>cpio -idmv < ship.db.cpio # 执行完以后，会生成Disk1目录<br />
shell>cd Disk1<br />
shell>./runInstaller -ignoreSysPrereqs   # 因为我们是在debian下，所以必须忽略系统检测<br />
  接下的一般选择默认设置就可以。<br />
  注意：<br />
  A.安装过程中，会提示让您以root用户执行相应的脚本，请您必须选以root身份执行完脚本，然后继续安装。<br />
  B.创建数据时请选择编码需要选“Unicode standard UTF-8 AL32UTF8”。如果您不设定 UTF 8的编码格式，则您在后面汉化Compiere的时候将会出错。<br />
3 数据库设置<br />
  数据库要正常启动，包括两个方面：启动数据库实例，启动侦听。<br />
  您可以手动的启动数据库实例，但是我们推荐您用dbstart命令来启动数据库实例。<br />
  以dbstart启动数据库实例需要做如下两步操作：<br />
A、需要修改/etc/oratab，将想自动启动的数据库(compiere)所在行的“N”修改为“Y”。<br />
B、cp $ORACLE_BASE/admin/compiere/pfile/initcompiere.oraXXX   $ORACLE_HOME/dbs/initcompiere.ora<br />
其中XXX为一长串字符串，随机产生。<br />
  然后执行dbstart就可以自动启动。然后使用lsnrctl启动侦听。<br />
4 常见问题<br />
  暂无<br />
后注：<br />
  本文只是我在Debian Linux下安装Oracle数据的笔记。如果您使用的是其它发行版的Linux，其中的具体步骤可能会有一些差别。请您注意。如果您对本文档有任何建 议，或者您按本文档而不可以完成安装，您可以给我发邮件。shiguo.qin@sw-linux.com</p>
<p>在Debian上安装Oracle Database XE<br />
原作者： redice li<br />
来源：http://rediceli.blogspot.com/200 &#8230; le-database-xe.html</p>
<p>OracleXE 简介</p>
<p>甲骨文2005年宣布向中国市场推出的可免费下载的Oracle Database 10g Express Edition (Oracle Database XE) ，供专业人员在学习及应用开发的起步阶段使用。Oracle Database XE建立在Oracle数据库10g第二版的代码库之上，与Oracle数据库产品系列完全兼容。Oracle Database XE可用于32位Linux和Windows操作系统，在功能上，Oracle Database XE版相当于Oracle Standard Edition One。但由于是免费版本，在硬件上受到一定的限制，如：</p>
<p>至多使用1个CPU或1个双核CPU的处理能力；<br />
最多可使用1GB内存;<br />
每个服务器只限于一个CPU;<br />
最多存储4GB的用户数据。<br />
安装Oracle XE</p>
<p>测试环境建立于Debian系统上，系统具备4Gb的磁盘空间用于建立数据库，500M以上的空间用于安装数据库。要数据库真正运行起来，那么你最好为你的系统配置1Gb的内存。下一步，我们将配置Debian的sources.list，加入oracle安装包的站点：</p>
<p>root@debian ~# echo &#8220;deb http://oss.oracle.com/debian/ unstable main non-free&#8221; >> /etc/apt/sources.list<br />
root@debian ~# apt-get update<br />
安装oracle database XE只需要简单的安装两个包即可，安装过程如下：</p>
<p>root@debian ~# apt-get install oracle-xe-client<br />
root@debian ~# apt-get install oracle-xe<br />
完成后，安装过程就完成。安装过程会更新一些核心的配置参数，可以通过查看/etc/sysctl.conf来查看这些变化，如果你不想重启系统就启动oracle数据库，那么需要先应用这些配置。下面我们直接应用Oracle database XE的默认配置，如用户账号：</p>
<p>root@debian ~# sh /etc/init.d/oracle-sh configure<br />
Oracle Database XE启动后，将打开服务端口1521，可以通过命令lsof来查看(lsof -n -i TCP:1521)，默认安装的情况下，我们还可以通过Web管理接口在本机进行数据库管理（http://127.0.0.1:8080/apex）。我们可以通过 /etc/default/oracle-xe 文件来查看和更新当前 oracle 数据库的配置。</p>
<p>Oracle database XE的运行除要求有一定数量的物理内存外，对交换空间也有一定的要求。Oracle Database 10g Express Edition 要求系统有1006MB的交换空间。如果不希望重启系统，你可以通过创建一个文件交换来达到这一要求：</p>
<p>root@debian ~# dd if=/dev/zero of=/MY_SWP_FILE bs=1M count=1000<br />
root@debian ~# mkswp /MY_SWP_FILE<br />
root@debian ~# swapon /MY_SWP_FILE<br />
要启用或禁止Oracle database XE在开机时自动启动，可以通过 update-rc.d 工具来完成，或者修改文件/etc/default/oracle-xe文件，将其中 ORACLE_DBENABLED=true改为ORACLE_DBENABLED=false。</p>
<p>对于如何使用Oracle database XE不是本文所涉及的内容，就不多讲。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1261.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>配置Linux+Apache+PHP+Informix</title>
		<link>http://www.evanjiang.net.cn/archives/1235.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1235.html#comments</comments>
		<pubDate>Mon, 20 Jul 2009 14:43:57 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[informix]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1235</guid>
		<description><![CDATA[<p>1.配置Apache+PHP
Apache与PHP配置可以使用一套集成环境XAMPP，可以免去编译配置的繁琐工作。
>下载XAMPP的以及对应的开发包
1）xampp-linux-1.7.2.tar.gz
2）xampp-linux-devel-1.7.2.tar.gz
>安装Lampp
使用root用户</p>
<p>tar xvfz xampp-linux-1.7.2.tar.gz -C /opt
tar xvfz xampp-linux-devel-1.7.2.tar.gz -C /opt</p>
<p>即将lampp安装到/opt/目录下</p>
<p>2.Informix &#038; CSDK
Informix的安装在这里不做过多说明，需要注意的是PHP连接Informix需要CSDK 2.81以上版本的支持，CSDK安装到$INFORMIXDIR。
如果php访问远端Informix server，还需要在php所属服务器上安装unixODBC</p>
<p>3.配置PDO_INFORMIX模块
由于我们使用的LAMPP集成环境，所以PHP是已经编译好的，这时需要增加PHP的扩展pdo_informix.so就要用到phpize预编译工具。
>phpize
需要autoconf支持，下载pdo_informix安装包PDO_INFORMIX-1.2.6.tgz
使用root用户：
解开安装包
tar xvfz PDO_INFORMIX-1.2.6.tgz
进入安装包目录
cd PDO_INFORMIX-1.2.6
运行phpize工具</p>
<p>/opt/lamp/bin/phpize
./configure -–with-php-config=/opt/lamp/bin/php-config</p>
<p>如果提示&#8211;with-pdo-informix=dir，则需要先加载informix环境变量</p>
]]></description>
			<content:encoded><![CDATA[<p>1.配置Apache+PHP<br />
Apache与PHP配置可以使用一套集成环境XAMPP，可以免去编译配置的繁琐工作。<br />
>下载XAMPP的以及对应的开发包<br />
1）xampp-linux-1.7.2.tar.gz<br />
2）xampp-linux-devel-1.7.2.tar.gz<br />
>安装Lampp<br />
使用root用户</p>
<p>tar xvfz xampp-linux-1.7.2.tar.gz -C /opt<br />
tar xvfz xampp-linux-devel-1.7.2.tar.gz -C /opt</p>
<p>即将lampp安装到/opt/目录下</p>
<p>2.Informix &#038; CSDK<br />
Informix的安装在这里不做过多说明，需要注意的是PHP连接Informix需要CSDK 2.81以上版本的支持，CSDK安装到$INFORMIXDIR。<br />
如果php访问远端Informix server，还需要在php所属服务器上安装unixODBC</p>
<p>3.配置PDO_INFORMIX模块<br />
由于我们使用的LAMPP集成环境，所以PHP是已经编译好的，这时需要增加PHP的扩展pdo_informix.so就要用到phpize预编译工具。<br />
>phpize<br />
需要autoconf支持，下载pdo_informix安装包PDO_INFORMIX-1.2.6.tgz<br />
使用root用户：<br />
解开安装包<br />
tar xvfz PDO_INFORMIX-1.2.6.tgz<br />
进入安装包目录<br />
cd PDO_INFORMIX-1.2.6<br />
运行phpize工具</p>
<p>/opt/lamp/bin/phpize<br />
./configure -–with-php-config=/opt/lamp/bin/php-config</p>
<p>如果提示&#8211;with-pdo-informix=dir，则需要先加载informix环境变量</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1235.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>FreeBSD传真服务器(FreeBSD+HylaFax+Apache+php+Mysql+AvantFax)</title>
		<link>http://www.evanjiang.net.cn/archives/1180.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1180.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 14:41:45 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[freebsd unix]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[www]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1180</guid>
		<description><![CDATA[<p>以下文章也是转摘于网上。有空，俺要实际操作一下，以前，俺一直想弄个EFAX服务器，但可惜，由于文档少，以及时间上不方便，就没再深究，现在有此好文档，有机会，也要好好研究一下。。。</p>
<p>FreeBSD安装选择Minimal+Ports
域名：fax.test.org IP:192.168.1.203 新建用户:vincent 属于wheel组</p>
<p>Handbook
http://cnsnap.cn.freebsd.org/doc &#8230; ndbook/install.html</p>
<p>开启FTP服务</p>
<p>编辑/etc/inetd.conf文件去掉ftp前的注释&#8217;#'。</p>
<p>#vi /etc/inetd.conf
ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l</p>
<p>启动inetd程序
#/etc/rc.d/inetd start</p>
<p>添加vincent用户，用于FTP登录上传文件
#pw useradd vincent -s /bin/csh -d /home/vincent -m -g wheel -h 0</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>使用wget加快ports软件下载</p>
<p>安装wget程序，加快软件包下载速度。
#cd /usr/ports/net/wget
#make install clean</p>
<p>编辑/etc/make.conf
#vi /etc/make.conf</p>
<p>FETCH_CMD=wget -c -t 1
DISABLE_SIZE=yes</p>
<p>MASTER_SITE_OVERRIDE= \
ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/distfiles/ \
ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/</p>
<p>设置使用ftp.tw.freebsd.org为主下载站点，加快Package软件下载，编辑用户目录下的.cshrc文件加入</p>
<p>#vi .cshrc [...]]]></description>
			<content:encoded><![CDATA[<p>以下文章也是转摘于网上。有空，俺要实际操作一下，以前，俺一直想弄个EFAX服务器，但可惜，由于文档少，以及时间上不方便，就没再深究，现在有此好文档，有机会，也要好好研究一下。。。</p>
<p>FreeBSD安装选择Minimal+Ports<br />
域名：fax.test.org IP:192.168.1.203 新建用户:vincent 属于wheel组</p>
<p>Handbook<br />
http://cnsnap.cn.freebsd.org/doc &#8230; ndbook/install.html</p>
<p>开启FTP服务</p>
<p>编辑/etc/inetd.conf文件去掉ftp前的注释&#8217;#'。</p>
<p>#vi /etc/inetd.conf<br />
ftp     stream  tcp     nowait  root    /usr/libexec/ftpd       ftpd -l</p>
<p>启动inetd程序<br />
#/etc/rc.d/inetd start</p>
<p>添加vincent用户，用于FTP登录上传文件<br />
#pw useradd vincent -s /bin/csh -d /home/vincent -m -g wheel -h 0</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>使用wget加快ports软件下载</p>
<p>安装wget程序，加快软件包下载速度。<br />
#cd /usr/ports/net/wget<br />
#make install clean</p>
<p>编辑/etc/make.conf<br />
#vi /etc/make.conf</p>
<p>FETCH_CMD=wget -c -t 1<br />
DISABLE_SIZE=yes</p>
<p>MASTER_SITE_OVERRIDE= \<br />
ftp://ftp.tw.freebsd.org/pub/FreeBSD/ports/distfiles/ \<br />
ftp://ftp.freebsdchina.org/pub/FreeBSD/ports/distfiles/</p>
<p>设置使用ftp.tw.freebsd.org为主下载站点，加快Package软件下载，编辑用户目录下的.cshrc文件加入</p>
<p>#vi .cshrc     //编辑完后记得重新登录<br />
setenv PACKAGEROOT      ftp://ftp.tw.freebsd.org</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211; </p>
<p>HylaFAX    ( WebSite http://www.hylafax.org/ )</p>
<p>HylaFAX是一个基于C/S 架构,企业级的收发传真系统，高效稳固。局域网中只要有一台连接Modem的HylaFAX服务器，就能为局域网所有用户提供传真服务。</p>
<p>软件安装</p>
<p>Package方法安装<br />
#pkg_add -r hylafax</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/comms/hylafax<br />
#make install clean</p>
<p>软件设置</p>
<p>#faxsetup<br />
<span id="more-1180"></span><br />
Should an entry be added for the FaxMaster to /etc/aliases [yes]?<br />
应该在/etc/aliases中增加一个条FaxMaster记录[yes]? yes</p>
<p>Users to receive fax related mail [root]?<br />
输入接收传真相关信息的Email用户[root]? vincent</p>
<p>Are these ok [yes]?<br />
确认以上信息是否正确[yes]? yes</p>
<p>Country code [1]?<br />
国家代码[1]? 0086</p>
<p>Area code []?<br />
区号[]? 0750</p>
<p>Long distance dialing prefix [1]?<br />
长途拨号前缀 [1]? 0</p>
<p>International dialing prefix [011]?<br />
国际拨号前缀 [001]? 0750</p>
<p>Dial string rules file (relative to /var/spool/hylafax)["etc/dialrules"]?<br />
拨号规则文件( /var/spool/hylafax )["etc/dialrule"]? 按enter默认</p>
<p>Tracing during normal server operation [1]?<br />
追踪正常服务程序[1]? 1</p>
<p>Default tracing during send and receive session [0xfffffffff]?<br />
默认追查在发送和接收 session [0xfffffffff]? 按enter默认</p>
<p>Continuation cover page (relative to /var/spool/hylafax) []?<br />
传真封面页所在目录 ( /var/spool/hylafax )[]? 按enter默认</p>
<p>Timeout when converting PostScript documents (secs) [180]?<br />
转换PostScript文件逾时时间[180]? 180</p>
<p>Maximum number of concurrent jobs to a destination[1]?<br />
一个目的地最大数量的并行工作[1]? 1</p>
<p>Define a group of modems []<br />
定义一组调制解调器[] 按enter默认</p>
<p>Time of day restrictions for outbound jobs ["Any"]?<br />
一天中限制传真外发时间["Any"]? 按enter默认</p>
<p>Pathname of destination controls file (relative to /var/spool/hylafax) []?<br />
控制文件的路径( /var/spool/hylafax )[]? 按enter默认</p>
<p>Timeout before purging a stale UUCP lock file (secs) [30]<br />
超时前清除旧的UUCP锁定文件[30]？30</p>
<p>Max number of pages to permit in an outbound job [0xffffffff]?<br />
允许在出站的最大页数[0xffffffff]? 按enter默认</p>
<p>Syslog facility name for ServerTracing messages [daemon]?<br />
系统日志跟踪记录程序[daemon]? 按enter默认</p>
<p>Are these ok [yes]?<br />
确认以上信息是否正确[yes]? yes</p>
<p>Should I restart the HylaFAX process [yes]?<br />
应该重新启动HylaFAX进程[yes]? yes</p>
<p>You do not appear to have any modem configured for use. Modems are<br />
configured for use with HylaFax with the faxaddmodem command.<br />
Do you want to run faxaddmomdem to configure a modme [yes]?<br />
您似乎没有任何调制解调器配置为使用。调制解调器配置为使用HylaFax与faxaddmodem命令。<br />
你想运行faxaddmomdem配置modme[yes]? yes</p>
<p>Serial port that modem is connected to []?<br />
调制解调器连接到那个串行端口[]? ttyd0    //我的是com1,所以是ttyd0；请根据实际配置。</p>
<p>country code[1]<br />
国家代码[1]? 0086</p>
<p>Area code [415]?<br />
区号[]? 0750</p>
<p>Phone number of fax modem [+1,9999.5555.1212]?<br />
传真的电话号码[+1,9999.5555.1212]? 8607501234567</p>
<p>Local Identifications string (for TS/CIG) ["NothingEtup"]?<br />
本地传真机标识(for TS/CIG) ["NothingEtup"]? FreeBSD.org</p>
<p>Long distance dialing prefix [1]?<br />
长途拨号前缀 [1]? 0</p>
<p>International dialing prefix [011]?<br />
国际拨号前缀 [001]? 0750</p>
<p>Dial string rules file (relative to /var/spool/hylafax) [etc/dialrules]?<br />
拨号规则文件( /var/spool/hylafax )["etc/dialrule"]? 按enter默认</p>
<p>Tracing during normal server operation [1]?<br />
追踪正常服务程序[1]? 1</p>
<p>Tracing during send and receive sessions [11]?<br />
追踪发送和接收 session [11]? 按enter默认</p>
<p>Protection mode for received facsimile [0600]?<br />
收到传真的文件权限[0600]？ 0777</p>
<p>Protection mode for session logs [0600]?<br />
记录文件的档案权限[0600]? 0777</p>
<p>Protection mode for ttyd0 [0600]?<br />
端口的访问权限[0600]? 0777</p>
<p>Rings to wait before answering [1]?<br />
响铃几声后，开始接受传真[1]? 2</p>
<p>Modem speaker volume [off]?<br />
Modem的喇叭音量[off]? on</p>
<p>Command line arguments to getty program ["-h %l dx_%s"]?<br />
接收传真的命令行参数["-h %l dx_%s"]? 按enter默认</p>
<p>Pathname of TSI access control list file (relative to /var/spool/hylafax)[""]?<br />
访问控制列表的TSI文件路径( /var/spool/hylafax )[""]? 按enter默认</p>
<p>Pathname of Caller-ID access control list file (relative to /var/spool/hylafax)[""]?<br />
来电Caller-ID访问控制列表文件路径( /var/spool/hylafax )[""]? 按enter默认</p>
<p>Tag line font file (relative to /var/spool/hylafax) [etc/lutRS18.pcf]?<br />
标记行字体文件( /var/spool/hylafax ) [etc/lutRS18.pcf]? 按enter默认</p>
<p>Tag line form string ["From %%1|%c|Page %%P of %%T"]?<br />
标记行字符串形式["From %%1|%c|Page %%P of %%T"]? 按enter默认</p>
<p>Time before purging a stale UUCP lock file (secs) [30]?<br />
超时前清除旧的UUCP锁定文件[30]？30</p>
<p>Hold UUCP lockfile during inbound data calls [Yes]?<br />
当传真进来时，保留UUCP 设定文件[Yes]? yes</p>
<p>Hold UUCP lockfile during inbound voice calls [Yes]?<br />
当语音进来时，保留UUCP 设定文件[Yes]? yes</p>
<p>Percent good lines to accept during copy quality checking [95]?<br />
线路好的时候，在什么百份比时进行检查[95]? 95</p>
<p>Max consecutive bad lines to accept during copy quality checking [5]?<br />
线路不好的时候，在什么百份比时进行检查[5]? 5</p>
<p>Max number of pages to accept in a received facsimile [25]?<br />
每次传真进来的最大可接收页数[25]? 25</p>
<p>Syslog faxility name for ServerTracing messages [daemon]?<br />
系统日志跟踪记录程序[daemon]? 按enter默认<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
Set UID to 0 to manipulate CLOCAL [""]?<br />
设置的UID为0操作CLOCAL[""]? 按enter默认</p>
<p>Use available priority job scheduling mechanism [""]?<br />
使用现有的优先工作调度机制[""]? 按enter默认</p>
<p>Are these ok [yes]?<br />
确认以上信息是否正确[yes]? yes</p>
<p>Probing for best speed to talk to modem：38400<br />
探索最佳速度交谈调制解调器： 38400</p>
<p>How should it be configured [1]?<br />
应如何配置[1]? 1</p>
<p>DTE-DCE flow control scheme [default]?<br />
流量控制方案[default]? 按enter默认</p>
<p>Are these ok [yes]?<br />
确认以上信息是否正确[yes]? yes</p>
<p>Do you want to run faxaddmodem to configure another modem [yes]?<br />
你想运行的另一个faxaddmodem配置调制解调器[yes]? no</p>
<p>Should I run faxmodem for each configured modem [yes]?<br />
应该为每个运行faxmodem配置调制解调器[yes]? yes</p>
<p>Done verifying system setup.<br />
完成核查系统设置。</p>
<p>编辑/etc/ttys 文件 ，查找“ttyd0&#8243;字节，修改为下面值(如果没有找，就在最后加上）</p>
<p>#vi /etc/ttys<br />
ttyd0   &#8220;/usr/local/sbin/faxgetty&#8221;      dialup  on</p>
<p>设置开机HylaFax服务自动运行</p>
<p>#cp /usr/local/etc/rc.d/hylafax.sh.sample /usr/local/etc/rc.d/hylafax.sh</p>
<p>启动HylaFax服务</p>
<p>#/usr/local/etc/rc.d/hylafax.sh start</p>
<p>HylaFax命令</p>
<p>faxstat -s （显示队列中等待发送的传真）<br />
faxstat -d （显示已发送的传真）<br />
faxstat -r （显示已接收的传真）<br />
faxrm number_of_job    (从队列中去删除一个传真)<br />
faxqclean    (清除缓冲池)<br />
faxcron        (显示统计结果)</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>AvantFAX (WebSite http://www.avantfax.com )</p>
<p>AvantFAX是一种Web应用管理传真的HylaFAX 服务器。<br />
AvantFAX允许用户在任何平台上，来查看和发送传真，而无需安装特殊的软件。它还允许管理员管理用户，他们的权限，传真线，传真类等<br />
AvantFAX可以从本地网络，并通过互联网远程使用标准的网络设备</p>
<p>安装说明: http://www.avantfax.com/install.php</p>
<p>安装AvantFAX之前要先安装以下软件：</p>
<p>HylaFAX 4.4 or HylaFAX EE 3<br />
PHP 5<br />
PHP PEAR 5 including MDB2_driver_mysql, Mail and Mail_Mime<br />
PECL FileInfo<br />
PHP mbstring &#8211; for improved UTF-8 sorting support (optional)<br />
PHP MySQL 5<br />
MySQL server 4.1.12 or better (see Important Notes below)<br />
Apache<br />
ImageMagick<br />
ghostscript<br />
libtiff<br />
netpbm-progs<br />
libungif<br />
sudo<br />
sendmail/postfix/exim/qmail or use an external SMTP server<br />
cups/lpr and psutils<br />
expect</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
apache</p>
<p>Package方法安装<br />
#pkg_add -r apache22</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/www/apache22<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
mysql51-server</p>
<p>Package方法安装<br />
#pkg_add -r mysql51-server</p>
<p>或者</p>
<p>Ports方法安装</p>
<p>#cd /usr/ports/databases/mysql51-server<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
PHP5</p>
<p>Ports方法安装<br />
#cd /usr/ports/lang/php5<br />
#make install clean<br />
//安装时记得选上第三项“APACHE Build Apache module&#8221;支持</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
PHP5-session</p>
<p>Package方法安装<br />
#pkg_add -r php5-session</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/www/php5-session<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
php5-mysql</p>
<p>Package方法安装<br />
#pkg_add -r php5-mysql</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/databases/php5-mysql<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-DB</p>
<p>Package方法安装<br />
#pkg_add -r pear-DB</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/databases/pear-DB<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-MDB2_Driver_mysql</p>
<p>Ports方法安装<br />
#cd /usr/ports/databases/pear-MDB2_Driver_mysql<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Auth</p>
<p>Package方法安装<br />
#pkg_add -r pear-Auth</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/security/pear-Auth<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Auth_SASL</p>
<p>Package方法安装<br />
#pkg_add -r pear-Auth_SASL</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/security/pear-Auth_SASL<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Net_SMTP</p>
<p>Package方法安装<br />
#pkg_add -r pear-Net_SMTP</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/net/pear-Net_SMTP<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Mail</p>
<p>Package方法安装<br />
#pkg_add -r pear-Mail</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/mail/pear-Mail<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Mail_Mime</p>
<p>Package方法安装<br />
#pkg_add -r pear-Mail_Mime</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/mail/pear-Mail_Mime<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-Mail_mimeDecode</p>
<p>Package方法安装<br />
#pkg_add -r pear-Mail_mimeDecode</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/mail/pear-Mail_mimeDecode<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-PHP_Compat</p>
<p>Package方法安装<br />
#pkg_add -r pear-PHP_Compat</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/devel/pear-PHP_Compat<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-HTML_Common</p>
<p>Ports方法安装<br />
#cd /usr/ports/devel/pear-HTML_Common<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pear-HTML_QuickForm</p>
<p>Package方法安装<br />
#pkg_add -r pear-HTML_QuickForm</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/devel/pear-HTML_QuickForm<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
pecl-fileinfo</p>
<p>Package方法安装<br />
#pkg_add -r pecl-fileinfo</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/sysutils/pecl-fileinfo<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
php5-mbstring</p>
<p>Package方法安装<br />
#pkg_add -r php5-mbstring</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/converters/php5-mbstring<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
ImageMagick</p>
<p>Package方法安装<br />
#pkg_add -r ImageMagick</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/graphics/ImageMagick<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
smarty</p>
<p>Package方法安装<br />
#pkg_add -r smarty</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/www/smarty<br />
#make install clean<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
netpbm</p>
<p>Package方法安装<br />
#pkg_add -r netpbm</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/graphics/netpbm<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
libungif</p>
<p>Package方法安装<br />
#pkg_add -r libungif</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/graphics/libungif<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
sudo</p>
<p>Package方法安装<br />
#pkg_add -r sudo</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/security/sudo<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
cups</p>
<p>Package方法安装<br />
#pkg_add -r cups</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/print/cups<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
psutils-a4</p>
<p>Package方法安装<br />
#pkg_add -r psutils-a4</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/print/psutils-a4<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
expect</p>
<p>Package方法安装<br />
#pkg_add -r expect</p>
<p>或者</p>
<p>Ports方法安装<br />
#cd /usr/ports/lang/expect<br />
#make install clean</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>软件下载：http://www.avantfax.com/download.php</p>
<p>将下载到的软件包通过FTP上传到服务器的vincent目录下,解压:<br />
#cd /home/vincent<br />
#gunzip avantfax-3.1.6.tgz.gz<br />
#tar zxvf avantfax-3.1.6.tgz</p>
<p>移动avantfax Web目录:<br />
#cd avantfax-3.1.6<br />
#mv avantfax /usr/local/www/<br />
#chmod -R 777 /usr/local/www/avantfax/tmp /usr/local/www/avantfax/faxes<br />
#chown -R www:www /usr/local/www/avantfax//includes/templates</p>
<p># ln -s /usr/local/www/avantfax/includes/faxrcvd.php /var/spool/hylafax/bin/faxrcvd.php<br />
# ln -s /usr/local/www/avantfax/includes/dynconf.php /var/spool/hylafax/bin/dynconf.php<br />
# ln -s /usr/local/www/avantfax/includes/notify.php /var/spool/hylafax/bin/notify.php</p>
<p>编辑config.ttyd0 //我的是外置modem,连接电脑com1，所以是ttyd0<br />
# vi /var/spool/hylafax/etc/config.ttyd0</p>
<p>//添加<br />
#<br />
## AvantFAX configuration<br />
#<br />
FaxrcvdCmd:     bin/faxrcvd.php<br />
DynamicConfig:  bin/dynconf.php<br />
UseJobTSI:      true</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
编辑config<br />
# vi /var/spool/hylafax/etc/config</p>
<p>//添加<br />
#<br />
## AvantFAX configuration<br />
#<br />
NotifyCmd:      bin/notify.php</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
备份/替换faxcover程序<br />
#mv /usr/local/bin/faxcover /usr/local/bin/faxcover.old<br />
#ln -s /usr/local/www/avantfax/includes/faxcover.php /usr/local/bin/faxcover</p>
<p>设置HylaFax用户支持Avantfax<br />
#/usr/local/sbin/faxadduser -a pwd www<br />
#/usr/local/sbin/faxdeluser localhost<br />
#/usr/local/sbin/faxdeluser 127.0.0.1<br />
#echo 127.0.0.1 >> /var/spool/hylafax/etc/hosts.hfaxd</p>
<p>编辑Avantfax设置文件<br />
#cd /usr/local/www/avantfax/includes<br />
#cp local_config-example.php local_config.php<br />
#vi local_config.php</p>
<p>$BINARYDIR                      = &#8216;/usr/bin&#8217;;<br />
//修改为:<br />
$BINARYDIR                      = &#8216;/usr/local/bin&#8217;;  </p>
<p>$HYLAFAX_PREFIX                = &#8216;/usr&#8217;;<br />
//修改为:<br />
$HYLAFAX_PREFIX                = &#8216;/usr/local&#8217;; </p>
<p>$WWWUSER                        = &#8216;apache&#8217;;<br />
//修改为:<br />
$WWWUSER                        = &#8216;www&#8217;;</p>
<p>$dft_config_lang            = &#8216;en&#8217;;<br />
//修改为:<br />
$dft_config_lang             = &#8216;zh&#8217;;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
编辑hfaxd.conf<br />
#vi /usr/local/lib/fax/hfaxd.conf</p>
<p>#JobFmt:                &#8220;%-3j %3i %1a %6.6o %-12.12e %5P %5D %7z %.25s&#8221;<br />
//修改为:<br />
JobFmt:         &#8220;%-3j %3i %1a %15o %40M %-12.12e %5P %5D %7z %.25s&#8221;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
软件启动设置:<br />
#vi /etc/rc.conf<br />
//添加<br />
apache22_enable=&#8221;YES&#8221;<br />
mysql_enable=&#8221;YES&#8221;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
apache22设置</p>
<p>#vi /usr/local/etc/apache22/httpd.conf</p>
<p>DirectoryIndex index.html<br />
//修改为:<br />
DirectoryIndex index.html index.php</p>
<p>//添加<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php-source .phps</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
新建fax.conf<br />
#vi /usr/local/etc/apache22/Includes/fax.conf</p>
<p>//添加<br />
NameVirtualHost *:80<br />
<VirtualHost *:80><br />
    ServerName fax.test.org<br />
    DocumentRoot /usr/local/www/avantfax/</p>
<p>    <Directory "/usr/local/www"><br />
        AllowOverride None<br />
        Options None<br />
        Order allow,deny<br />
        Allow from all<br />
    </Directory></p>
<p></VirtualHost></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
PHP程序连接<br />
#ln-s /usr/local/bin/php /usr/bin/php</p>
<p>启动apache<br />
#/usr/local/etc/rc.d/apapche start</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<br />
avantfax数据导入</p>
<p>启动mysql<br />
#/usr/local/etc/rc.d/mysql start</p>
<p>导入数据<br />
#cd /home/vincent/avantfax-3.1.6<br />
#mysql -uroot < create_user.sql<br />
#mysql -uavantfax -pd58fe49 avantfax < create_tables.sql</p>
<p>--------------------------------------------------------<br />
编辑/etc/crontab<br />
# vi /etc/crontab</p>
<p>//添加<br />
# runs once an hour to update the phone book<br />
0 * * * * root /usr/local/www/avantfax/includes/phb.php<br />
# runs once a day to remove old files<br />
0 0 * * * root /usr/local/www/avantfax/includes/avantfaxcron.php -t 2</p>
<p>---------------------------------------------------------<br />
编辑/usr/local/etc/sudoers<br />
#vi /usr/local/etc/sudoers</p>
<p>//添加<br />
#Defaults    requiretty<br />
www ALL = NOPASSWD: /sbin/reboot, /sbin/halt, /usr/local/sbin/faxdeluser, /usr/local/sbin/faxadduser -u * -p * *</p>
<p>---------------------------------------------------------<br />
打开浏览器（IE/firefox/opera)，打上下面的网址：</p>
<p>http://192.168.1.203/admin/</p>
<p>username: admin<br />
password: password</p>
<p>新建 "传真分类" ---> 新建 &#8220;Modem&#8221; &#8212;> 新建 “用户”<br />
到此，服务器基本上可以使用。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1180.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OpenBSD.Nginx.MySQL.PHP环境搭建手册(网上转摘）</title>
		<link>http://www.evanjiang.net.cn/archives/1176.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1176.html#comments</comments>
		<pubDate>Mon, 08 Jun 2009 14:32:00 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[openbsd unix]]></category>
		<category><![CDATA[pf]]></category>
		<category><![CDATA[www服务]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1176</guid>
		<description><![CDATA[<p>很久没弄过OPENBSD，而且，听说现在的NGINX很红，性能比传统的APACHE要好很多倍，因而，一直想弄个NGINX服务器环境。加上，俺也想熟悉回OPENBSD，就想着弄个OPENBSD，NGINX，MYSQL，PHP的环境。。弄来玩玩，就当复习一下技术。出于习惯，俺还是在网上找了这篇文档。初步看过，好像写得不错，，就先弄过来，暂没时间实操过，待俺忙过这段时间。就再次重点研究一下俺熟悉而喜欢的UNIX服务器与数据库技术。。。</p>
<p>本手册以在OpenBSD 4.4环境下搭建Nginx、MySQL、PHP环境为例进行讲解。按照惯例，root权限。</p>
<p>=====================================================</p>
<p>目录</p>
<p>一、OpenBSD的安装及注意事项
二、系统性能调优
Ⅰ、/etc/fstab调优
Ⅱ、/etc/sysctl.conf调优</p>
<p>三、O.N.M.P.软件环境的安装
四、Nginx配置
Ⅰ、Nginx配置文件的修改
Ⅱ、Nginx日志截断</p>
<p>五、MySQL与phpMyAdmin的配置
Ⅰ、MySQL的配置
Ⅱ、phpMyAdmin的配置</p>
<p>六、强化PHP的安全
七、强化SSH的安全
Ⅰ、SSH配置文件的修改
Ⅱ、使用KEY进行验证
Ⅲ、按需启动SSH
Ⅳ、一点安全小常识</p>
<p>八、启用Packet Filter防火墙
九、系统启动脚本的修改</p>
<p>=====================================================</p>
<p>一、OpenBSD的安装及注意事项</p>
<p>OpenBSD的安装这里就不多说了，主要是安装时系统组件的选择、分区和系统服务的部分。对于系统组件部分，作为生产系统来说，偶并不推荐安装comp44.tgz这个组件。因为comp44.tgz实际就是编译器，不装这个，可以在很大程度上避免安装一些非授权的软件，从而提高远程主机的安全性。如果真的需要安装什么软件，也可以在非重要的机器上进行编译，然后使用PSFTP等软件上传到远程主机上使用。关于PSFTP软件的使用，二楼有详细的介绍。</p>
<p>系统分区时，推荐将/usr、/usr/local、/var、/var/mysql、/var/mail、/var/log、/var/nginx等分区单独分出来，也就是说，进行比较细致的分区，防止某个目录中的文件膨胀占满整个分区导致的死锁等问题。假定你有一个80G的硬盘，一个分区示例在下面：</p>
<p>/	200M
(swap)	1G
/tmp	200M
/usr	500M
/usr/local	200M
/var	100M
/var/mysql	10G
/var/mail	100M
/var/log	5G~10G
/home	200M
/var/nginx	剩余空间</p>
<p>至于系统服务部分，建议所有的服务都选择“n”，亦即不随系统启动。

二、系统性能调优</p>
<p>对于多核的机器，使用bsd.mp这个核心。</p>
<p>[Copy to clipboard] [ - ]CODE:
mv /bsd /obsd
mv /bsd.mp /bsd</p>
<p>Ⅰ、/etc/fstab调优</p>
<p>[Copy to clipboard] [ - ]CODE:
vi /etc/fstab</p>
<p>在文件系统描述符部分，加入&#8221;noatime&#8221;和&#8221;softdep&#8221;。示例如下：</p>
<p>QUOTE:
/dev/wd0a / ffs rw,noatime,softdep 1 1
/dev/wd0l /home ffs rw,nodev,nosuid,noatime,softdep 1 2
/dev/wd0d /tmp ffs rw,nodev,nosuid,noatime,softdep 1 2
/dev/wd0e /usr ffs rw,nodev,noatime,softdep 1 2
/dev/wd0f /usr/local ffs rw,nodev,noatime,softdep 1 2
/dev/wd0g /var ffs rw,nodev,nosuid,noatime,softdep 1 2
/dev/wd0i /var/log ffs rw,nodev,nosuid,noatime,softdep 1 2
/dev/wd0j /var/mail ffs [...]]]></description>
			<content:encoded><![CDATA[<p>很久没弄过OPENBSD，而且，听说现在的NGINX很红，性能比传统的APACHE要好很多倍，因而，一直想弄个NGINX服务器环境。加上，俺也想熟悉回OPENBSD，就想着弄个OPENBSD，NGINX，MYSQL，PHP的环境。。弄来玩玩，就当复习一下技术。出于习惯，俺还是在网上找了这篇文档。初步看过，好像写得不错，，就先弄过来，暂没时间实操过，待俺忙过这段时间。就再次重点研究一下俺熟悉而喜欢的UNIX服务器与数据库技术。。。</p>
<p>本手册以在OpenBSD 4.4环境下搭建Nginx、MySQL、PHP环境为例进行讲解。按照惯例，root权限。</p>
<p>=====================================================</p>
<p>目录</p>
<p>一、OpenBSD的安装及注意事项<br />
二、系统性能调优<br />
Ⅰ、/etc/fstab调优<br />
Ⅱ、/etc/sysctl.conf调优</p>
<p>三、O.N.M.P.软件环境的安装<br />
四、Nginx配置<br />
Ⅰ、Nginx配置文件的修改<br />
Ⅱ、Nginx日志截断</p>
<p>五、MySQL与phpMyAdmin的配置<br />
Ⅰ、MySQL的配置<br />
Ⅱ、phpMyAdmin的配置</p>
<p>六、强化PHP的安全<br />
七、强化SSH的安全<br />
Ⅰ、SSH配置文件的修改<br />
Ⅱ、使用KEY进行验证<br />
Ⅲ、按需启动SSH<br />
Ⅳ、一点安全小常识</p>
<p>八、启用Packet Filter防火墙<br />
九、系统启动脚本的修改</p>
<p>=====================================================</p>
<p>一、OpenBSD的安装及注意事项</p>
<p>OpenBSD的安装这里就不多说了，主要是安装时系统组件的选择、分区和系统服务的部分。对于系统组件部分，作为生产系统来说，偶并不推荐安装comp44.tgz这个组件。因为comp44.tgz实际就是编译器，不装这个，可以在很大程度上避免安装一些非授权的软件，从而提高远程主机的安全性。如果真的需要安装什么软件，也可以在非重要的机器上进行编译，然后使用PSFTP等软件上传到远程主机上使用。关于PSFTP软件的使用，二楼有详细的介绍。</p>
<p>系统分区时，推荐将/usr、/usr/local、/var、/var/mysql、/var/mail、/var/log、/var/nginx等分区单独分出来，也就是说，进行比较细致的分区，防止某个目录中的文件膨胀占满整个分区导致的死锁等问题。假定你有一个80G的硬盘，一个分区示例在下面：</p>
<p>/	200M<br />
(swap)	1G<br />
/tmp	200M<br />
/usr	500M<br />
/usr/local	200M<br />
/var	100M<br />
/var/mysql	10G<br />
/var/mail	100M<br />
/var/log	5G~10G<br />
/home	200M<br />
/var/nginx	剩余空间</p>
<p>至于系统服务部分，建议所有的服务都选择“n”，亦即不随系统启动。<br />
<span id="more-1176"></span><br />
二、系统性能调优</p>
<p>对于多核的机器，使用bsd.mp这个核心。</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
mv /bsd /obsd<br />
mv /bsd.mp /bsd</p>
<p>Ⅰ、/etc/fstab调优</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/fstab</p>
<p>在文件系统描述符部分，加入&#8221;noatime&#8221;和&#8221;softdep&#8221;。示例如下：</p>
<p>QUOTE:<br />
/dev/wd0a / ffs rw,noatime,softdep 1 1<br />
/dev/wd0l /home ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0d /tmp ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0e /usr ffs rw,nodev,noatime,softdep 1 2<br />
/dev/wd0f /usr/local ffs rw,nodev,noatime,softdep 1 2<br />
/dev/wd0g /var ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0i /var/log ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0j /var/mail ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0h /var/mysql ffs rw,nodev,nosuid,noatime,softdep 1 2<br />
/dev/wd0k /var/nginx ffs rw,nodev,nosuid,noatime,softdep 1 2</p>
<p>友情提醒：softdep是一种非同步的文件系统，意外掉电可能造成数据的遗失/损坏，生产系统请谨慎使用！</p>
<p>改完后保存退出，reboot，看能不能正常启动。</p>
<p>一般情况下是没有问题的，个别机器或虚拟机可能会因为兼容性的缘故，无法启动。那么就把根目录的softdep拿掉，其他目录保留，仍然会有作用。</p>
<p>更多关于OpenBSD环境下磁盘性能调优的内容，请参看偶博客的文章，地址在下面：</p>
<p>http://blog.chinaunix.net/u2/81136/showart_1841280.html</p>
<p>Ⅱ、/etc/sysctl.conf调优</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/sysctl.conf</p>
<p>跳到最后，加入下面的内容：</p>
<p>QUOTE:<br />
# 增大文件系统缓存到1M<br />
kern.maxvnodes=131072</p>
<p># 允许最多65536个进程<br />
kern.maxproc=65536</p>
<p># 同时最多打开65536个文件<br />
kern.maxfiles=65536</p>
<p># 并发连接最大65536<br />
kern.somaxconn=65536</p>
<p># 保留的最少连接数<br />
kern.sominconn=256<br />
kern.maxclusters=32768</p>
<p># 增大TCP接收/发送缓存到64K<br />
net.inet.tcp.recvspace=65536<br />
net.inet.tcp.sendspace=65536</p>
<p># 增大UDP接收/发送缓存到64K<br />
net.inet.udp.recvspace=65536<br />
net.inet.udp.sendspace=65536</p>
<p>注意：虚拟机测试只加最上面一行kern.maxvnodes=65536即可，其他的不必加了，否则会有各种问题。独立机器的可以加上。</p>
<p>保存退出，reboot。不能正常启动的就把除kern.maxvnodes以外的数字调小或者禁用再试。</p>
<p>三、OpenBSD.Nginx.MySQL.PHP软件环境的安装</p>
<p>OpenBSD环境下软件的安装是非常简单的，因为在官方的ftp中提供了已经编译好的二进制包，需要安装的软件都在ftp中，从ftp中安装即可。</p>
<p>小提示：如果你机器比较多，你可以把需要安装的软件包都down回来，其他机器再来这里安装，速度会非常快！</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
export PKG_PATH=ftp://ftp.openbsd.org/pub/OpenBSD/4.4/packages/i386/</p>
<p>pkg_add mysql-server php5-fastcgi php5-gd-5.2.6-no_x11 phpMyAdmin lighttpd-1.4.19p3 nginx pecl-APC</p>
<p>以偶的1M ADSL小水管为例，大约也就二十分钟左右就安装完毕了！真的是非常快！和其他系统的wget源码、./configure &amp;&amp; make &amp;&amp; make install&#8230;所需要的时间相比，效率是非常高！而且，由于OpenBSD默认采用比较高的安全策略，装上的环境安全性也比其他系统要高！</p>
<p>等所需的软件都安装完成后，按提示作链接并创建PHP临时工作目录：</p>
<p>QUOTE:<br />
ln -s /var/www/conf/modules.sample/php5.conf /var/www/conf/modules<br />
ln -fs /var/www/conf/php5.sample/apc.ini /var/www/conf/php5/apc.ini<br />
ln -fs /var/www/conf/php5.sample/gd.ini /var/www/conf/php5/gd.ini<br />
ln -fs /var/www/conf/php5.sample/mbstring.ini /var/www/conf/php5/mbstring.ini<br />
ln -fs /var/www/conf/php5.sample/mcrypt.ini /var/www/conf/php5/mcrypt.ini<br />
ln -fs /var/www/conf/php5.sample/mysql.ini /var/www/conf/php5/mysql.ini<br />
mkdir /var/nginx/sesstmp<br />
chmod 0777 /var/nginx/sesstmp</p>
<p>pkg_info检查一下系统中安装了些什么软件包：</p>
<p>可以看到，所需的软件包和依赖的包都安装好了！</p>
<p>四、Nginx配置</p>
<p>Ⅰ、Nginx配置文件的修改</p>
<p>修改nginx的默认配置文件：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/nginx/nginx.conf</p>
<p>按下面的内容修改Nginx的配置文件。兰色表示需要手动修改的内容，红色表示增加的内容：</p>
<p>QUOTE:<br />
#user  nobody;</p>
<p># 指定子进程数，酌情修改<br />
worker_processes  4;</p>
<p>#error_log  logs/error.log;<br />
#error_log  logs/error.log  notice;<br />
#error_log  logs/error.log  info;</p>
<p>#pid        logs/nginx.pid;</p>
<p># 最多可打开文件数<br />
worker_rlimit_nofile 8196;</p>
<p>events {<br />
# 最大并发数<br />
worker_connections  1024;<br />
}</p>
<p>http {<br />
include       mime.types;<br />
default_type  application/octet-stream;</p>
<p># 关掉错误日志<br />
error_log       /dev/null  crit;<br />
# 如果需要错误日志，就用下面这行替换上面这行<br />
#error_log     /var/log/nginx/error.log  notice;</p>
<p># 定义日志格式，对日志使用缓存，避免频繁的磁盘I/O操作<br />
access_log   /var/log/nginx/access.log combined buffer=1m;</p>
<p>sendfile        on;<br />
tcp_nopush      on;<br />
tcp_nodelay     on;</p>
<p>keepalive_timeout  10;</p>
<p># 对静态文件和可压缩文件启用压缩，以节约网络带宽，提高访问速度<br />
gzip              on;<br />
gzip_min_length   1k;<br />
gzip_buffers      4 8k;<br />
gzip_http_version 1.1;<br />
gzip_comp_level   3;<br />
gzip_types        text/html text/css text/xml text/plain application/x-javascript application/xml application/pdf application/x-perl application/x-tcl application/msword application/rtf application/vnd.ms-excel application/vnd.ms-powerpoint application/vnd.wap.xhtml+xml image/x-ms-bmp;<br />
gzip_disable      &#8220;MSIE [1-6] \.&#8221;;<br />
gzip_vary         on;</p>
<p># 定义输出缓存大小<br />
output_buffers   4 32k;</p>
<p># 最大允许可上传文件大小<br />
client_max_body_size 20m;</p>
<p># 定义一个叫“myzone”的记录区，总容量为 10M<br />
# 和下面的limit_conn一起限制单个IP的并发连接数为10<br />
limit_zone myzone $binary_remote_addr  10m;</p>
<p>server {<br />
listen       80;<br />
server_name  localhost;</p>
<p>location / {<br />
root   /var/nginx/html;<br />
index  index.php index.html index.htm;<br />
limit_conn  myzone 10;<br />
}</p>
<p>error_page   500 502 503 504  /50x.html;</p>
<p>location = /50x.html {<br />
root   /var/nginx/html;<br />
}</p>
<p>location ~ \.php$ {<br />
root           html;<br />
fastcgi_pass   127.0.0.1:9000;<br />
fastcgi_index  index.php;<br />
fastcgi_param  SCRIPT_FILENAME  /var/nginx/html$fastcgi_script_name;<br />
include        fastcgi_params;<br />
}</p>
<p># 在浏览器本地暂存图片和静态文件，不记录日志，以节约机器资源<br />
location ~* \.(gif|png|jpg|jpeg|bmp|css|js|swf)$<br />
{<br />
root           /var/nginx/html;<br />
access_log off;<br />
expires max;<br />
}</p>
<p># 在浏览器中输入http://xxx.xxx.xxx/status可以看到Nginx的运行信息<br />
# 需要密码验证，不记录日志，限制IP访问<br />
location ~ /status<br />
{<br />
auth_basic  &#8220;O.N.M.P.&#8221;;<br />
auth_basic_user_file password;<br />
stub_status on;<br />
access_log   off;<br />
allow 192.168.0.0/24;<br />
deny all;<br />
}<br />
}</p>
<p>}</p>
<p>其他的部分请酌情修改。</p>
<p>运行下面的命令生成查看Nginx运行状态的密码文件：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
htpasswd -c /etc/nginx/password webadmin</p>
<p>按提示输入两遍密码即可。</p>
<p>在查看status的时候，输入用户名webadmin（见上面这行）和密码就能够看到Nginx的运行数据了。</p>
<p>Nginx能够流行和它的高负载能力是分不开的，在追求性能表现的场合，推荐使用Nginx+PHP-fastcgi的组合以获得强健的性能表现。而对于那些重视安全性的场合来说，可能OpenBSD内核集成的Apache更合适。OpenBSD下搭建Apache、MySQL、PHP环境的详细内容请参见偶的另篇博文，地址在下面：（博客速度可能较慢，四楼有转帖）</p>
<p>http://blog.chinaunix.net/u2/81136/showart_1860332.html</p>
<p>当然，你也可以利用Nginx内置的负载均衡功能，在前端分配访问流量，后端由Apache来运行PHP环境。Nginx负载均衡的配置可以去Nginx的主页参看相关内容，地址：http://wiki.nginx.org/Main。</p>
<p>下面为一个Nginx负载均衡的示例：</p>
<p>QUOTE:<br />
http {<br />
upstream myproject {<br />
ip_hash;<br />
server 192.168.1.1:80;<br />
server 192.168.1.2:80;<br />
server 192.168.1.3:80;<br />
server 192.168.1.4:80;<br />
}</p>
<p>server {<br />
listen 80;<br />
server_name www.domain.com;<br />
location / {<br />
proxy_pass http://myproject;<br />
}<br />
}<br />
}</p>
<p>网络拓扑示意图如下：</p>
<p>Ⅱ、Nginx日志截断</p>
<p>OpenBSD默认每天00:00会执行/etc/daily.local脚本中的内容，我们只需要把Nginx日志截断的命令加入到这个文件中即可。</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/daily.local</p>
<p>加入下面的内容：</p>
<p>QUOTE:<br />
#!/bin/sh<br />
# 对Nginx日志进行截断和压缩，以节约log分区空间<br />
# 在张宴的基础上修改，感谢！<br />
mkdir -p /var/log/nginx/$(date -d &#8220;yesterday&#8221; +&#8221;%Y&#8221;)/$(date -d &#8220;yesterday&#8221; +&#8221;%m&#8221;)/<br />
mv /var/log/nginx/access.log /var/log/nginx/$(date -d &#8220;yesterday&#8221; +&#8221;%Y&#8221;)/$(date -d &#8220;yesterday&#8221; +&#8221;%m&#8221;)/access.$(date -d &#8220;yesterday&#8221; +&#8221;%Y%m%d&#8221;).log<br />
kill -USR1 `cat /var/run/nginx.pid`<br />
sleep 1<br />
gzip /var/log/nginx/$(date -d &#8220;yesterday&#8221; +&#8221;%Y&#8221;)/$(date -d &#8220;yesterday&#8221; +&#8221;%m&#8221;)/access.$(date -d &#8220;yesterday&#8221; +&#8221;%Y%m%d&#8221;).log</p>
<p>保存退出，为/etc/daily.local加上执行权限：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
chmod 0755 /etc/daily.local</p>
<p>其他需要每天运行的命令也都可以加在这个脚本里面，各位自行处理。</p>
<p>五、MySQL与phpMyAdmin的配置</p>
<p>Ⅰ、MySQL的配置</p>
<p>安全起见，MySQL需要运行在自己的daemon下：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/login.conf</p>
<p>跳到最后，加入MySQL所需的修改：</p>
<p>QUOTE:<br />
mysql:\<br />
 <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> penfiles-cur=2048:\<br />
 <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> penfiles-max=4096:\<br />
:tc=daemon:</p>
<p>使修改生效：<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
[Copy to clipboard] [ - ]CODE:<br />
cap_mkdb /etc/login.conf</p>
<p>初始化MySQL数据库：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
/usr/local/bin/mysql_install_db</p>
<p>MySQL自带了几个配置文件，在/usr/local/share/mysql目录中，可以拷贝为/etc/my.cnf使用。关于MySQL的配置和优化等内容，可以自行Google，这里不再赘述。<br />
MySQL安全须知<br />
不要用root身份运行数据库或PHP应用。并且，最好是数据库名和数据库用户名不同，以提高安全性。</p>
<p>例如，域名为example.net，则数据库名设为abcxyz，数据库用户名设为xyzabc。总之，关联度越低越好，数据库名和数据库用户名越复杂越难猜测越好。</p>
<p>控制权限的分配，PHP应用仅给予必要的权限。</p>
<p>例如，安装/升级Discuz!和PHPWind论坛程序，仅需要下图所示的权限即可：</p>
<p>在安装/升级完毕后，还可以把CREATE、ALTER、DROP权限去掉，不会影响论坛程序的运行，而且提高了安全性！<br />
Ⅱ、phpMyAdmin的配置</p>
<p>由于OpenBSD中的phpMyAdmin默认是安装在/var/www/phpMyAdmin目录中的，直接使用Nginx是无法访问的，我们需要把它拷贝到Nginx目录下，这样就可以通过浏览器来管理MySQL数据库了。</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
mkdir /var/nginx/html/pma/<br />
cp -rf /var/www/phpMyAdmin/* /var/nginx/html/pma/</p>
<p>修改phpMyAdmin的配置文件，使之可用。</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi +17 /var/nginx/html/pma/config.inc.php</p>
<p>将下面这行修改成：</p>
<p>QUOTE:<br />
$cfg['blowfish_secret'] = &#8216;a&#8217;; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */</p>
<p>（仅是加入了字母a而已）</p>
<p>保存退出。<br />
小提示：<br />
上面新建了/var/nginx/html/pma目录来保存phpMyAdmin的文件，目录名很简单。你可以用一个更复杂的目录名来代替，例如：pma2YAY5jRpfFfLXQVm这样的目录名，以防止黑客利用字典攻击等方法渗透你的phpMyAdmin！</p>
<p>你还可以在Nginx的配置文件中，将/var/nginx/html/pma配置成某个虚拟主机的根目录，并限定可以访问这个虚拟主机的IP。这样，就可以在很大程度上提高数据库的安全性了！一个配置示例在下面：</p>
<p>QUOTE:<br />
location / {<br />
allow   192.168.0.0/24;<br />
deny    all;<br />
}</p>
<p>假如平时只是偶尔用到phpMyAdmin，你还可以在用完后删除/var/nginx/html/pma目录，需要用的时候再拷贝过去。</p>
<p>你还可以将以上方法结合起来灵活使用，既建立一个无法被猜测的目录名，又限制IP访问，这样你的系统被黑的机会就会小了很多！<br />
六、强化PHP的安全</p>
<p>OpenBSD软件包中的PHP已经自带了suhosin这个补丁，可以在很大程度上提高PHP脚本的安全。本节主要讨论在php.ini文件中进行相关的设置，进一步提升安全性。具体来说，就是禁用某些危险函数和启用PHP安全模式。</p>
<p>偶一般是把对PHP的所有修改都放在一个单独的文件中进行，包括对PHP参数以及扩展模块的修改，都放在这个文件中一并处理，这样查找、修改和管理会方便许多：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /var/www/conf/php5/addphp.ini</p>
<p>加入下面的内容：</p>
<p>QUOTE:<br />
; 禁止动态加载模块<br />
enable_dl = Off</p>
<p>; 隐藏PHP信息<br />
expose_php = Off</p>
<p>; 限定可访问目录<br />
open_basedir = /var/nginx/html/</p>
<p>;设定session暂存目录<br />
session.save_path=/var/nginx/sesstmp</p>
<p>; 设定PHP上传文件的临时目录<br />
upload_tmp_dir=/var/nginx/tmp</p>
<p>; 禁用危险函数（注意下面的内容应该是一行，编排的原因分成了多行）<br />
disable_functions = phpinfo,com,shell,exec,system,passthru,error_log,<br />
stream_socket_server,putenv,ini_alter,ini_restore,ini_set,dl,openlog,<br />
syslog,readlink,symlink,link,leak,fsockopen,pfsockopen,proc_open,<br />
popepassthru,escapeshellcmd,escapeshellarg,chroot,scandir,<br />
chgrp,chown,shell_exec,proc_get_status,popen,shmop_close,<br />
shmop_delete,shmop_open,shmop_read,shmop_size,shmop_write</p>
<p>; 启用PHP的安全模式<br />
; PHP在安全模式下运行是用性能换安全。据简单测试，性能下降到50%左右，各位请酌情使用<br />
; 启用安全模式后，某些程序可能受到影响。例如，Discuz!将无法上传附件<br />
safe_mode = On</p>
<p>; pecl-APC只使用16M的共享内存用以加速PHP程序的运行<br />
apc.shm_size=16M</p>
<p>保存退出。<br />
七、强化SSH的安全<br />
Ⅰ、SSH配置文件的修改</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/ssh/sshd_config</p>
<p>跳到最后，加入下面的部分：</p>
<p>QUOTE:<br />
# 使用高位端口，防止黑客扫描22端口。可选范围1024~65535，推荐32768~65535。<br />
Port 58937</p>
<p># 登录时间控制在30秒内<br />
LoginGraceTime 30</p>
<p># 不允许root远程直接登录<br />
PermitRootLogin no<br />
StrictModes yes</p>
<p># 最多允许三次错误<br />
MaxAuthTries 3</p>
<p># 最多允许三个SSH线程<br />
MaxSessions 3</p>
<p># 使用SSH协议2<br />
Protocol 2</p>
<p># 不使用密码认证<br />
PasswordAuthentication no</p>
<p># 使用KEY的方式认证<br />
PubkeyAuthentication yes</p>
<p># KEY文件存放位置<br />
AuthorizedKeysFile      .ssh/authorized_keys</p>
<p>Ⅱ、使用KEY进行验证</p>
<p>下面以Windows环境下PuTTY为例讲解使用KEY验证的方法，Linux/UNIX下与此类似。</p>
<p>首先，从下面的网址下载PuTTY的安装包（Windows）：</p>
<p>http://the.earth.li/~sgtatham/putty/latest/x86/putty-0.60-installer.exe</p>
<p>下完后双击安装，不再赘述。这个软件包自带了下面几个非常实用的软件：</p>
<p>QUOTE:<br />
PuTTYgen:生成KEY；</p>
<p>Pageant:管理KEY；</p>
<p>PuTTY:SSH客户端；</p>
<p>PSFTP:使用SSH上传/下载文件。</p>
<p>下面就来实例讲解用PuTTY的这几个软件对远程主机进行KEY认证和管理的方法。假设我们要在192.168.0.132这个远程主机上使用young_king这个用户名进行KEY认证和登录。<br />
1.生成KEY</p>
<p>启动PuTTYgen，如下图：</p>
<p>在密钥长度栏输入想要的密钥长度，越大越安全。这里以最大的2048位为例，然后点“Generate”按钮，会开始生成KEY，生成过程中需要在下面的空白部分移动鼠标来生成随机数。</p>
<p>KEY生成完毕后，你可以输入一些标识信息，如下图：</p>
<p>还可以在下面的passphrase框内输入“保护码”，注意要输入两遍。“保护码”也就是密码的意思，用来保密私钥的，一定要记住这个哦！</p>
<p>都输入完毕后，点击下面的“Save public key”按钮保存公钥，如下图所示：</p>
<p>然后点击“Save private key”按钮保存私钥，如下图：</p>
<p>这个私钥最好不要保存在电脑上，我们把它拷贝到U盘上，随身带着，这就是我们的“KEY盘”。</p>
<p>要养成每月更换“保护码”的好习惯，更换“保护码”仍然要用到PuTTYgen这个软件，启动后点击“Load”，载入私钥，重新输入“保护码”，再确认一遍，然后点击“Save private key”保存即可！</p>
<p>2.启用KEY</p>
<p>上面生成了公钥和私钥，我们需要把公钥上传到远程主机的用户目录中，就要用到PSFTP这个软件了。启动它，如下图：</p>
<p>输入命令：open 192.168.0.132</p>
<p>接下来，PSFTP会列出远程主机上的RSA指纹以供识别，如下图：</p>
<p>这个指纹可以在远程主机上输入下面的命令查看：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
ssh-keygen -l -f /etc/ssh/ssh_host_rsa_key</p>
<p>请把这个指纹记在纸上，随身携带，和远程主机连接的时候就拿出来对比一下（这么做主要是为了防止连接被人劫持和指纹被伪造）。</p>
<p>如果上面PSFTP显示的指纹和远程主机上的不一致，那么毫无疑问是伪造的了，直接回车断开连接。如果相符，你可以输入“y”来保存这个指纹到本地计算机上（不推荐），或输入“n”只是这次连接使用。</p>
<p>随后PSFTP会让你输入登录用户名和密码，并自动进入该用户的根目录，如下图（以root为例）：</p>
<p>现在我们要把第一步生成的公钥上传到远程主机上（请把这个公钥复制到C:\Documents and Settings\Administrator目录先，如果你的Windows不是用Administrtor登录的，就替换成你登录用的用户名）。输入命令：put young_king，可以看到，公钥已经上传到/root目录了，见下图：</p>
<p>PuTTY生成的KEY并不能直接使用，需要转换一下。用PuTTY登录（此时上面修改的端口尚未启用，还是默认的22端口），以root身份执行：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
ssh-keygen -X -f /root/young_king &gt; /home/young_king/.ssh/authorized_keys</p>
<p>这就把公钥成功导入到young_king的目录中了，就可以被young_king这个用户使用了！</p>
<p>导入成功后，要删除多余的公钥：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
rm /root/young_king</p>
<p>下面介绍几个PSFTP常用的命令：</p>
<p>QUOTE:<br />
open xxx.xxx.xxx.xxx：打开远程主机（xxx.xxx.xxx.xxx为IP或域名）；</p>
<p>put xxxxxxxx：向远程主机上传文件（该文件需要事先拷贝到C:\Documents and Settings\Administrator目录）；</p>
<p>get xxxxxxxx：从远程主机下载文件（下载后保存在C:\Documents and Settings\Administrator目录）；</p>
<p>cd xxxxxx:进入远程主机的相应目录；</p>
<p>exit：退出PSFTP（也可以点右上角的叉关闭，不过不推荐这样做）。</p>
<p>更多的命令可以参看PuTTY的帮助文件，这个帮助写得不错。</p>
<p>3.使用KEY登录</p>
<p>我们上面虽然修改了SSH的配置文件（/etc/ssh/sshd_config），但还没有启用。输入下面的命令启用新的SSH配置，以便我们用KEY登录：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
kill -HUP `cat /var/run/sshd.pid`</p>
<p>PuTTY提供了一个KEY的管理程序，上面已经提到，是Pageant，我们使用这个程序来进行KEY登录。</p>
<p>启动Pageant，它会自动缩小到任务栏的通知区域，右键单击，选择“Add key”，会弹出个对话框让我们选择。插入上面制作好的“KEY盘”，并选择保存的私钥，会弹出个对话框让我们输入“保护码”，如下图：</p>
<p>如果安装PuTTY时选择了让Pageant关联.ppk文件，则双击私钥可以自动启动Pageant。</p>
<p>输入在生成KEY时输入的“保护码”，私钥就被导入到Pageant中了。再右键单击任务栏通知区的Pageant图标，选择第一项“New session”，Pageant会自动启动PuTTY，等待输入远程主机的相关信息，如下图：</p>
<p>输入IP（或域名）和端口号，点击最下面的“Open”按钮，PuTTY就会登录远程主机了。和PSFTP类似，会弹出个对话框让你确认远程主机的RSA指纹，如下图。同理，指纹不同就表示连接被劫持或指纹被伪造，点“取消”断开连接；指纹相同就点“否”，不保存主机公钥到本地计算机。</p>
<p>随后会让你输入用户名，输入“young_king”，看看，自动就登录上去了！</p>
<p>前面更改SSH配置的时候，已经禁用了root远程登录和使用密码登录，只能使用KEY才能登录进系统。想要维护系统的时候，就用这个KEY登录，再su成root。而且，需要上传/下载文件的时候，就用PSFTP，所有的操作都在SSH连接下进行，还有KEY的保护，安全性不知道提升了多少倍！黑客想要破解真是难于上青天！<br />
Ⅲ、按需启动SSH</p>
<p>我们只在必要的时候启动sshd服务，用完即停止，不给黑客扫描的机会。输入下面的命令：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
crontab -e</p>
<p>跳到最后，输入下面的内容（中间的空白部分为Tab）：</p>
<p>QUOTE:<br />
# 每天的10:30启动sshd服务<br />
30      10      *       *       *       /usr/sbin/sshd</p>
<p># 10:35即停止sshd服务，也就是说，你只有五分钟的时间可以登录进系统<br />
35      10      *       *       *       kill `cat /var/run/sshd.pid`</p>
<p>保存退出。</p>
<p>上面的时间请酌情修改。sshd服务启动的时间尽量不要太长，5~10分钟应该够了！</p>
<p>Ⅳ、一点安全小常识<br />
私钥请一定保存在安全的地方，不要保存在本地计算机上，并加上足够强度的“保护码”；</p>
<p>本地计算机不要保存远程主机的“指纹”，用一次确认一次（远程主机的指纹保存在注册表的HKEY_CURRENT_USER\Software\SimonTatham\PuTTY项下，可以手动删除）；</p>
<p>不要使用DSA密钥，据说有漏洞的；</p>
<p>不要在公用计算机上连接远程主机，有键盘记录器、木马什么的就麻烦了；</p>
<p>多个远程主机不要使用相同的公钥，最好是使用各自的公钥、私钥；</p>
<p>少用，最好是不用无线网络，加密强度太差，容易被破解；</p>
<p>M$系统下的病毒、木马太多了，推荐客户端转换到Linux/UNIX环境，安全性更高，而且仍然有PuTTY及工具可用；</p>
<p>注意清除本地机器上不必要保留的文件（例如私钥、公钥、主机RSA指纹、C:\Documents and Settings\Administrator目录下的文件等等）。</p>
<p>八、启用Packet Filter防火墙</p>
<p>Packet Filter是非常优秀的包过滤防火墙，OpenBSD核心已经集成了Packet Filter防火墙，不过默认并没有启用，下面我们来启用Packet Filter的强大功能！</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/pf.conf</p>
<p>跳到最后，加入下面的内容：</p>
<p>QUOTE:<br />
# 宏定义<br />
# 请把下面的fxp0换成你自己用的外网网卡，不知道的可以输入ifconfig查看<br />
ext_if=&#8221;fxp0&#8243;</p>
<p># 指定可以使用SSH登录的IP，支持CIDR<br />
admin_add=&#8221;192.168.0.0/24&#8243;</p>
<p># 指定SSH端口。<br />
# 注意，如果在/etc/ssh/sshd_config文件中更改了SSH端口号，这里的也需要同样修改。否则连不上了不要怪偶没有提醒！<br />
ssh_port=&#8221;58937&#8243;</p>
<p># 维持一个持久的表，里面存放的是对本机发动DDoS攻击的IP<br />
table  persist</p>
<p># 选项设定<br />
set require-order yes<br />
set block-policy drop<br />
set optimization aggressive<br />
set loginterface none<br />
set skip on lo0</p>
<p># TCP参数设定<br />
set timeout {interval 3,frag 10}<br />
set timeout {tcp.first 10,tcp.opening 2,tcp.established 600,tcp.closing 20,tcp.finwait 10,tcp.closed 10}</p>
<p># UDP、ICMP及其它参数设定<br />
set timeout {udp.first 20,udp.single 10,udp.multiple 10}<br />
set timeout {icmp.first 10,icmp.error 5}<br />
set timeout {other.first 20,other.single 10,other.multiple 20}<br />
set timeout {adaptive.start 0,adaptive.end 0}</p>
<p># 允许最多有65536个连接<br />
set limit { states 65535, frags 200, src-nodes 65536, tables 65536, table-entries 1048576 }</p>
<p># 包整形<br />
scrub in all<br />
scrub out all</p>
<p># 阻止所有不匹配的包和从DDoS主机来的包<br />
block quick from<br />
block return<br />
block in all<br />
block out all</p>
<p># 防止IP欺骗<br />
antispoof quick for {lo0,$ext_if}</p>
<p># 允许本机访问其他机器<br />
pass out quick on $ext_if inet from $ext_if to any flags S/SA keep state</p>
<p># 允许IPv4地址的客户机访问本地80（www）端口，发起过快连接（DDoS）的主机加入阻止列表。注意是一行，下同<br />
pass in quick on $ext_if inet proto tcp from any to $ext_if port 80 flags S/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states 100,max-src-conn 100,max-src-conn-rate 1000/10,overload  flush global )</p>
<p># 允许IPv6地址的客户机访问本地80（www）端口，发起过快连接（DDoS）的主机加入阻止列表<br />
pass in quick on $ext_if inet6 proto tcp from any to $ext_if port 80 flags S/SA synproxy state (source-track rule,max-src-nodes 200,max-src-states 100,max-src-conn 100,max-src-conn-rate 1000/10,overload  flush global )</p>
<p># 允许管理IP远程连接本机SSH端口<br />
pass in quick on $ext_if inet proto tcp from $admin_add to $ext_if port $ssh_port flags S/SA synproxy state</p>
<p>保存退出。</p>
<p>修改系统配置，使得开机启用PF防火墙：</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/rc.conf.local</p>
<p>跳到最后，加入下面这行：</p>
<p>QUOTE:<br />
pf=YES<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
保存退出。</p>
<p>九、系统启动脚本的修改</p>
<p>修改系统启动脚本，使得MySQL、PHP(fastcgi)、Nginx可以在系统启动的时候自动启动，免去手动启动的麻烦。</p>
<p>[Copy to clipboard] [ - ]CODE:<br />
vi /etc/rc.local</p>
<p>跳到最后，加入下面的内容：</p>
<p>QUOTE:<br />
# 启动时校时。这行也可以加在/etc/daily.local文件的最前面，每天零点自动校时<br />
rdate -n 210.72.145.44<br />
# Start MySQL<br />
if [ -x /usr/local/bin/mysqld_safe ] ; then<br />
echo -n &#8216;Starting MySQL&#8230;&#8217;<br />
su -c mysql root -c &#8216;/usr/local/bin/mysqld_safe &gt;/dev/null 2&gt;&amp;1 &amp;&#8217;<br />
echo &#8220;DONE&#8221;<br />
fi<br />
# Start php-fastcgi<br />
if [ -x /usr/local/bin/spawn-fcgi ] ; then<br />
echo -n &#8216;Starting php-fastcgi&#8230;&#8217;<br />
/usr/local/bin/spawn-fcgi -a 127.0.0.1 -p 9000 -C 6 -u www -f /usr/local/bin/php-fastcgi &gt; /var/run/fcgi.pid<br />
echo &#8220;DONE&#8221;<br />
fi<br />
# Start nginx<br />
if [ -x /usr/local/sbin/nginx ] ; then<br />
echo -n &#8216;Starting nginx&#8230;&#8217;<br />
/usr/local/sbin/nginx<br />
echo &#8220;DONE&#8221;<br />
fi</p>
<p>保存退出。</p>
<p>reboot重启，启动后输入top看看，O.N.M.P.环境已经搭建好！</p>
<p>系统启动后，还要把MySQL自带的测试数据库和匿名用户删除，防止被黑客利用。</p>
<p>默认情况下，新安装的MySQL数据库，root密码为空！同样需要第一时间进行设置，方法见下图：</p>
<p>好了，至此，O.N.M.P.环境的搭建已经结束，剩下的就看各位自行发挥了！</p>
<p>写在最后</p>
<p>其实，系统的安全是个整体工程，并不是用上了OpenBSD这个最安全的操作系统就算万事OK，还有很多事情要做。</p>
<p>更多的是需要在日常工作中积累经验，多分析系统整体的运行情况，多关注网络安全方面的内容，这样才能尽可能的打造安全的运维环境。</p>
<p>本手册只是起到抛砖引玉的作用，希望能吸引更多的人来关注系统安全，希望有更多的人能用上OpenBSD这个主动安全的操作系统，希望能推动OpenBSD在国内的更多普及。如此，则幸甚！</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1176.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ORACLE 数据库管理员的职责</title>
		<link>http://www.evanjiang.net.cn/archives/1137.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1137.html#comments</comments>
		<pubDate>Sat, 30 May 2009 17:36:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1137</guid>
		<description><![CDATA[<p>ORACLE数据库管理员应按如下方式对 ORACLE 数据库系统做定期监控：
(1). 每天对 ORACLE 数据库的运行状态 , 日志文件 , 备份情况 , 数据
库的空间使用情况 , 系统资源的使用情况进行检查 , 发现并解决
问题。
(2). 每周对数据库对象的空间扩展情况 , 数据的增长情况进行监控 , 对数据库做健康检查 , 对数据库对象的状态做检查。
(3). 每月对表和索引等进行 Analyze, 检查表空间碎片 , 寻找数据库
性能调整的机会 , 进行数据库性能调整 , 提出下一步空间管理
计划。对 ORACLE 数据库状态进行一次全面检查。
每天的工作
(1). 确认所有的 INSTANCE 状态正常
登陆到所有数据库或例程 , 检测 ORACLE 后台进程 :
$ps –ef&#124;grep ora
(2). 检查文件系统的使用（剩余空间）。如果文件系统的剩余空间小于 20% ，需删除不用的文件以释放空间。
$df –k
(3). 检查日志文件和 trace 文件记录 alert 和 trace 文件中的错误。
连接到每个需管理的系统
? [...]]]></description>
			<content:encoded><![CDATA[<p>ORACLE数据库管理员应按如下方式对 ORACLE 数据库系统做定期监控：<br />
(1). 每天对 ORACLE 数据库的运行状态 , 日志文件 , 备份情况 , 数据<br />
库的空间使用情况 , 系统资源的使用情况进行检查 , 发现并解决<br />
问题。<br />
(2). 每周对数据库对象的空间扩展情况 , 数据的增长情况进行监控 , 对数据库做健康检查 , 对数据库对象的状态做检查。<br />
(3). 每月对表和索引等进行 Analyze, 检查表空间碎片 , 寻找数据库<br />
性能调整的机会 , 进行数据库性能调整 , 提出下一步空间管理<br />
计划。对 ORACLE 数据库状态进行一次全面检查。<br />
每天的工作<br />
(1). 确认所有的 INSTANCE 状态正常<br />
登陆到所有数据库或例程 , 检测 ORACLE 后台进程 :<br />
$ps –ef|grep ora<br />
(2). 检查文件系统的使用（剩余空间）。如果文件系统的剩余空间小于 20% ，需删除不用的文件以释放空间。<br />
$df –k<br />
(3). 检查日志文件和 trace 文件记录 alert 和 trace 文件中的错误。<br />
连接到每个需管理的系统<br />
? 使用&#8217; telnet &#8216;<br />
? 对每个数据库 ,cd 到 bdump 目录 , 通常是 $ORACLE_BASE/<SID>/bdump<br />
? 使用Unix‘tail&#8217; 命令来查看 alert_<SID>.log 文件<br />
? 如果发现任何新的 ORA- 错误 , 记录并解决<br />
(4). 检查数据库当日备份的有效性。<br />
对RMAN备份方式 :<br />
检查第三方备份工具的备份日志以确定备份是否成功<br />
对 EXPORT 备份方式 :<br />
检查exp日志文件以确定备份是否成功<br />
对其他备份方式 :<br />
检查相应的日志文件<br />
(5). 检查数据文件的状态记录状态不是“ online” 的数据文件，并做恢复。<br />
Select file_name from dba_data_files where status=&#8217;OFFLINE&#8217;<br />
(6). 检查表空间的使用情况<br />
<span id="more-1137"></span><br />
SELECT tablespace_name, max_m, count_blocks free_blk_cnt, sum_free_m,to_char(100*sum_free_m/sum_m, &#8217;99.99&#8242;) || &#8216;%&#8217; AS pct_free<br />
FROM ( SELECT tablespace_name,sum(bytes)/1024/1024 AS sum_m FROM dba_data_files GROUP BY tablespace_name),<br />
( SELECT tablespace_name AS fs_ts_name, max(bytes)/1024/1024 AS max_m, count(blocks) AS count_blocks, sum(bytes/1024/1024) AS sum_free_m FROM dba_free_space GROUP BY tablespace_name )<br />
WHERE tablespace_name = fs_ts_name<br />
(7). 检查剩余表空间<br />
SELECT tablespace_name, sum ( blocks ) as free_blk ,<br />
trunc ( sum ( bytes ) /(1024*1024) ) as free_m,<br />
max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks<br />
FROM dba_free_space GROUP BY tablespace_name;<br />
(8). 监控数据库性能<br />
运行 bstat/estat 生成系统报告<br />
或者使用 statspack 收集统计数据<br />
(9). 检查数据库性能，记录数据库的 cpu 使用、 IO 、 buffer 命中率等等<br />
使用 vmstat,iostat,glance,top 等命令<br />
(10). 日常出现问题的处理。<br />
每周的工作<br />
(1). 控数据库对象的空间扩展情况<br />
根据本周每天的检查情况找到空间扩展很快的数据库对象 , 并采取相<br />
应的措施<br />
&#8211; 删除历史数据<br />
&#8212; 扩表空间<br />
alter tablespace <name> add datafile ‘<file>&#8216; size <size><br />
&#8212; 调整数据对象的存储参数<br />
next extent<br />
pct_increase<br />
(2). 监控数据量的增长情况<br />
根据本周每天的检查情况找到记录数量增长很快的数据库对象 , 并采<br />
取相应的措施<br />
&#8211; 删除历史数据<br />
&#8212; 扩表空间<br />
alter tablespace <name> add datafile ‘<file>&#8216; size <size><br />
(3). 系统健康检查<br />
检查以下内容 :<br />
init<sid>.ora<br />
controlfile<br />
redologfile<br />
archiving<br />
sort area size<br />
tablespace(system,temporary,tablespace fragment)<br />
datafiles(autoextend,location)<br />
object(number of extent,next extent,index)<br />
rollback segment<br />
logging &#038;tracing(alert.log,max_dump_file_size,sqlnet)<br />
(4). 检查无效的数据库对象<br />
SELECT owner, object_name, object_type FROM dba_objects<br />
WHERE status= &#8216; INVALID &#8216;。<br />
(5). 检查不起作用的约束<br />
SELECT owner, constraint_name, table_name,<br />
constraint_type, status<br />
FROM dba_constraints<br />
WHERE status = &#8216;DISABLED&#8217; AND constraint_type = &#8216;P&#8217;<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
(6). 检查无效的 trigger<br />
SELECT owner, trigger_name, table_name, status<br />
FROM dba_triggers<br />
WHERE status = &#8216;DISABLED&#8217;<br />
每月的工作<br />
(1). Analyze Tables/Indexes/Cluster<br />
analyze table <name> estimate statistics sample 50 percent;<br />
(2). 检查表空间碎片<br />
根据本月每周的检查分析数据库碎片情况 , 找到相应的解决方法<br />
(3). 寻找数据库性能调整的机会<br />
比较每天对数据库性能的监控报告 , 确定是否有必要对数据库性能进 行调整<br />
(4). 数据库性能调整<br />
如有必要 , 进行性能调整<br />
(5). 提出下一步空间管理计划<br />
根据每周的监控 , 提出空间管理的改进方法<br />
OracleDBA日常管理<br />
目的：这篇文档有很详细的资料记录着对一个甚至更多的 ORACLE 数据库每天的，每月的，<br />
每年的运行的状态的结果及检查的结果，在文档的附录中你将会看到所有检查，修改的SQL<br />
和 PL/SQL 代码。<br />
目录<br />
1. 日常维护程序<br />
A ． 检查已起的所有实例<br />
B ． 查找一些新的警告日志<br />
C ． 检查 DBSNMP 是否在运行<br />
D ． 检查数据库备份是否正确<br />
E ． 检查备份到磁带中的文件是否正确<br />
F ． 检查数据库的性能是否正常合理，是否有足够的空间和资源<br />
G ． 将文档日志复制到备份的数据库中<br />
H ． 要常看 DBA 用户手册<br />
2. 晚间维护程序<br />
A ．收集 VOLUMETRIC 的数据<br />
3. 每周维护工作<br />
A ． 查找那些破坏规则的 OBJECT<br />
B ． 查找是否有违反安全策略的问题<br />
C ． 查看错误地方的 SQL*NET 日志<br />
D ． 将所有的警告日志存档<br />
E ． 经常访问供应商的主页<br />
4. 月维护程序<br />
A ． 查看对数据库会产生危害的增长速度<br />
B ． 回顾以前数据库优化性能的调整<br />
C ． 查看 I/O 的屏颈问题<br />
D ． 回顾 FRAGMENTATION<br />
E ． 将来的执行计划<br />
F ． 查看调整点和维护<br />
5. 附录<br />
A ． 月维护过程<br />
B ． 晚间维护过程<br />
C ． 周维护过程<br />
6. 参考文献<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
一．日维护过程<br />
A ．查看所有的实例是否已起<br />
确定数据库是可用的，把每个实例写入日志并且运行日报告或是运行测试<br />
文件。当然有一些操作我们是希望它能自动运行的。<br />
可选择执行：用 ORACLE 管理器中的‘ PROBE&#8217; 事件来查看<br />
B ．查找新的警告日志文件<br />
1. 联接每一个操作管理系统<br />
2. 使用‘ TELNET&#8217; 或是可比较程序<br />
3. 对每一个管理实例，经常的执行 $ORACLE_BASE/<SID>/bdump 操<br />
作，并使其能回退到控制数据库的 SID 。<br />
4. 在提示下，使用 UNIX 中的‘ TAIL &#8216;命令查看 alert_<SID>.log ，或是<br />
用其他方式检查文件中最近时期的警告日志<br />
5. 如果以前出现过的一些 ORA_ERRORS 又出现，将它记录到数据库<br />
恢复日志中并且仔细的研究它们，这个数据库恢复日志在〈 FILE 〉中<br />
C ．查看 DBSNMP 的运行情况<br />
检查每个被管理机器的‘ DBSNMP&#8217; 进程并将它们记录到日志中。<br />
在 UNIX 中，在命令行中，键入 ps –ef | grep dbsnmp, 将回看到 2 个<br />
DBSNMP 进程在运行。如果没有，重启 DBSNMP 。<br />
D ．查数据库备份是否成功<br />
E ．检查备份的磁带文档是否成功<br />
F ．检查对合理的性能来说是否有足够的资源<br />
1. 检查在表空间中有没有剩余空间。<br />
对每一个实例来说，检查在表空间中是否存在有剩余空间来满足当天<br />
的预期的需要。当数据库中已有的数据是稳定的，数据日增长的平均<br />
数也是可以计算出来，最小的剩余空间至少要能满足每天数据的增 长。<br />
A ） 运行‘ FREE.SQL&#8217; 来检查表空间的剩余空间。<br />
B ） 运行‘ SPACE.SQL&#8217; 来检查表空间中的剩余空间百分率<br />
2. 检查回滚段<br />
回滚段的状态一般是在线的，除了一些为复杂工作准备的专用 段，它一般状态是离线的。<br />
a) 每个数据库都有一个回滚段名字的列表。<br />
b) 你可以用 V$ROLLSTAT 来查询在线或是离线的回滚段的现在状 态 .<br />
c) 对于所有回滚段的存储参数及名字， 可用<br />
DBA_ROLLBACK_SEGS 来查询。但是它不如 V$ROLLSTAT 准确。<br />
3. 识别出一些过分的增长<br />
查看数据库中超出资源或是增长速度过大的段，这些段的存储参 数需要调整。<br />
a ） 收集日数据大小的信息， 可以用<br />
‘ ANALYZE5PCT.SQL &#8216;。如果你收集的是每晚的信息， 则可跳过这一步。<br />
b ） 检查当前的范围，可用‘ NR.EXTENTS.SQL&#8217; 。<br />
c ） 查询当前表的大小信息。<br />
d ） 查询当前索引大小的信息。<br />
e ） 查询增长趋势。<br />
4. 确定空间的范围。<br />
如果范围空间对象的 NEXT_EXTENT 比表空间所能提供的最大范<br />
围还要大，那么这将影响数据库的运行。如果我们找到了这个目标，可<br />
以用‘ ALTER TABLESPACE COALESCE&#8217; 调查它的位置，或加另外 的数据文件。<br />
A ）运行‘ SPACEBOUND.SQL&#8217; 。如果都是正常的，将不返回任何行。<br />
5. 回顾 CPU ，内存，网络，硬件资源论点的过程<br />
A ）检查 CPU 的利用情况，进到 x:\web\phase2\default.htm =>system<br />
metrics=>CPU 利用页， CPU 的最大限度为 400 ，当 CPU 的占用保持<br />
在 350 以上有一段时间的话，我们就需要查看及研究出现的问题。<br />
G ．将存档日志复制到备用数据库中<br />
如果有一个备用数据库，将适当的存档日志复制到备用数据库的期望<br />
位置，备用数据库中保存最近期的数据。<br />
H. 经常查阅 DBA 用户手册<br />
如果有可能的话，要广泛的阅读，包括 DBA 手册，行业杂志，新闻 组或是邮件列表。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
二．晚间维护过程<br />
大部分的数据库产品将受益于每晚确定的检查进程的运行。<br />
A. 收集 VOLUMETRIC 数据<br />
1. 分析计划和收集数据<br />
更准确的分析计算并保存结果。<br />
a ） 如果你现在没有作这些的话，用‘ MK VOLFACT.SQL&#8217; 来创建测定体积的 表。<br />
b ） 收集晚间数据大小的信息，用‘ ANALYZE COMP.SQL&#8217; 。<br />
c ） 收集统计结果，用‘ POP VOL.SQL&#8217; 。<br />
d ） 在空闲的时候检查数据，可能的话，每周或每个月进行。<br />
我是用 MS EXCEL 和 ODBC 的联接来检查数据和图表的增长<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
三．每周维护过程<br />
A ． 查找被破坏的目标<br />
1. 对于每个给定表空间的对象来说， NEXT_EXTENT 的大小是相同的，如<br />
12/14/98 ，缺省的 NEXT_EXTENT 的 DATAHI 为 1G ， DATALO 为 500MB ，<br />
INDEXES 为 256MB 。<br />
A ） 检查 NEXT_EXTENT 的设置，可用‘ NEXTEXT 。 SQL&#8217; 。<br />
B ） 检查已有的 EXTENTS ，可用‘ EXISTEXT 。 SQL&#8217; 。<br />
2. 所有的表都应该有唯一的主键<br />
a ） 查看那些表没有主键，可用‘ NO_PK.SQL&#8217; 。<br />
b ） 查找那些主键是没有发挥作用的，可用‘ DIS_PK.SQL&#8217; 。<br />
c ） 所有作索引的主键都要是唯一的，可用‘ NONUPK 。 SQL&#8217; 来检 查。<br />
3. 所有的索引都要放到索引表空间中。运行‘ MKREBUILD_IDX 。 SQL&#8217;<br />
4. 不同的环境之间的计划应该是同样的，特别是测试环境和成品环境之间的 计划应该相同。<br />
a ） 检查不同的 2 个运行环境中的数据类型是否一致，可用<br />
‘ DATATYPE.SQL &#8216;。<br />
b ） 在 2 个不同的实例中寻找对象的不同点， 可用<br />
‘ OBJ_COORD.SQL &#8216;。<br />
c ） 更好的做法是，使用一种工具，象寻求软件的计划管理器那样的 工具。<br />
B ． 查看是否有危害到安全策略的问题。<br />
C ． 查看报错的 SQL*NET 日志。<br />
1. 客户端的日志。<br />
2. 服务器端的日志。<br />
D ． . 将所有的警告日志存档<br />
E ． . 供应商的主页<br />
1. ORACLE 供应商</p>
<p>http://www.oracle.com</p>
<p>http://technet.oracle.com</p>
<p>http://www.oracle.com/support</p>
<p>http://www.oramag.com</p>
<p>2. Quest Software</p>
<p>http://www.quests.com</p>
<p>3. Sun Microsystems</p>
<p>http://www.sun.com</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
四．月维护过程<br />
A ．查看对数据库会产生危害的增长速度<br />
1. 从以前的记录或报告中回顾段增长的变化以此来确定段增长带来危害<br />
B ． 回顾以前数据库优化性能的调整<br />
1. 回顾一般 ORACLE 数据库的调整点，比较以前的报告来确定有害的发展 趋势。<br />
C ． 查看 I/O 的屏颈问题<br />
1. 查看前期数据库文件的活动性，比较以前的输出来判断有可能导致屏颈 问题的趋势。<br />
D ． 回顾 FRAGMENTATION<br />
E ． 计划数据库将来的性能<br />
1. 比较 ORACLE 和操作系统的 CPU ，内存，网络，及硬盘的利用率以此<br />
来确定在近期将会有的一些资源争夺的趋势<br />
2. 当系统将超出范围时要把性能趋势当作服务水平的协议来看<br />
F ． 完成调整和维护工作<br />
1. 使修改满足避免系统资源的争夺的需要，这里面包括增加新资源或使预期 的停工。<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-<br />
五．附录<br />
A. 日常程序<br />
&#8211; free.sql<br />
&#8211;To verify free space in tablespaces<br />
&#8211;Minimum amount of free space<br />
&#8211;document your thresholds:<br />
&#8211;<br />
<tablespace_name> = <amount> m<br />
SELECT tablespace_name, sum ( blocks ) as free_blk , trunc ( sum ( bytes ) /<br />
(1024*1024) ) as free_m, max ( bytes ) / (1024) as big_chunk_k, count (*) as num_chunks<br />
FROM dba_free_space GROUP BY tablespace_name<br />
1. Space.sql<br />
&#8211; space.sql<br />
&#8211; To check free, pct_free, and allocated space within a tablespace<br />
&#8211; 11/24/98<br />
SELECT tablespace_name, largest_free_chunk<br />
, nr_free_chunks, sum_alloc_blocks, sum_free_blocks<br />
, to_char(100*sum_free_blocks/sum_alloc_blocks, &#8217;09.99&#8242;) || &#8216;%&#8217;<br />
AS pct_free<br />
FROM ( SELECT tablespace_name , sum(blocks) AS sum_alloc_blocks<br />
FROM dba_data_files GROUP BY tablespace_name )<br />
, ( SELECT tablespace_name AS fs_ts_name<br />
, max(blocks) AS largest_free_chunk<br />
, count(blocks) AS nr_free_chunks<br />
, sum(blocks) AS sum_free_blocks FROM dba_free_space<br />
GROUP BY tablespace_name ) WHERE tablespace_name = fs_ts_name<br />
2. analyze5pct.sql<br />
&#8211; analyze5pct.sql<br />
&#8211; To analyze tables and indexes quickly, using a 5% sample size<br />
&#8211; (do not use this scrīpt if you are performing the overnight<br />
&#8211; collection of volumetric data)<br />
&#8211; 11/30/98<br />
BEGIN<br />
dbms_utility.analyze_schema ( &#8216;&#038;OWNER&#8217;, &#8216;ESTIMATE&#8217;, NULL, 5 ) ;<br />
END ;<br />
/<br />
3. nr_extents.sql<br />
&#8211; nr_extents.sql<br />
&#8211; To find out any object reaching
<threshold>
&#8211; extents, and manually upgrade it to allow unlimited<br />
&#8211; max_extents (thus only objects we *expect* to be big<br />
&#8211; are allowed to become big)<br />
&#8211; 11/30/98<br />
SELECT e.owner, e.segment_type , e.segment_name , count(*) as nr_extents ,<br />
s.max_extents<br />
, to_char ( sum ( e.bytes ) / ( 1024 * 1024 ) , &#8217;999,999.90&#8242;) as MB<br />
FROM dba_extents e , dba_segments s<br />
WHERE e.segment_name = s.segment_name<br />
GROUP BY e.owner, e.segment_type , e.segment_name , s.max_extents<br />
HAVING count(*) > &#038;THRESHOLD<br />
OR ( ( s.max_extents &#8211; count(*) ) < &#038;&#038;THRESHOLD )<br />
ORDER BY count(*) desc<br />
4. spacebound.sql<br />
-- spacebound.sql<br />
-- To identify space-bound objects. If all is well, no rows are returned.<br />
-- If any space-bound objects are found, look at value of NEXT extent<br />
-- size to figure out what happened.<br />
-- Then use coalesce (alter tablespace <foo> coalesce .<br />
&#8211; Lastly, add another datafile to the tablespace if needed.<br />
&#8211; 11/30/98<br />
SELECT a.table_name, a.next_extent, a.tablespace_name<br />
FROM all_tables a,<br />
( SELECT tablespace_name, max(bytes) as big_chunk<br />
FROM dba_free_space<br />
GROUP BY tablespace_name ) f<br />
WHERE f.tablespace_name = a.tablespace_name<br />
AND a.next_extent > f.big_chunk<br />
B. 每晚处理程序<br />
1. mk_volfact.sql<br />
&#8211; mk_volfact.sql (only run this once to set it up; do not run it nightly!)<br />
&#8211; &#8212; Table UTL_VOL_FACTS<br />
CREATE TABLE utl_vol_facts (<br />
table_name VARCHAR2(30),<br />
num_rows NUMBER,<br />
meas_dt DATE )<br />
TABLESPACE platab<br />
STORAGE (<br />
INITIAL 128k<br />
NEXT 128k<br />
PCTINCREASE 0<br />
MINEXTENTS 1<br />
MAXEXTENTS unlimited<br />
)<br />
/<br />
&#8211; Public Synonym<br />
CREATE PUBLIC SYNONYM utl_vol_facts FOR &#038;OWNER..utl_vol_facts<br />
/<br />
&#8211; Grants for UTL_VOL_FACTS<br />
GRANT SELECT ON utl_vol_facts TO public<br />
/<br />
2. analyze_comp.sql<br />
&#8211;<br />
&#8211; analyze_comp.sql<br />
&#8211;<br />
BEGIN<br />
sys.dbms_utility.analyze_schema ( &#8216;&#038;OWNER&#8217;,'COMPUTE&#8217;);<br />
END ;<br />
/<br />
3. pop_vol.sql<br />
&#8211;<br />
&#8211; pop_vol.sql<br />
&#8211;<br />
insert into utl_vol_facts<br />
select table_name<br />
, NVL ( num_rows, 0) as num_rows<br />
, trunc ( last_analyzed ) as meas_dt<br />
from all_tables &#8212; or just user_tables<br />
where owner in (&#8216;&#038;OWNER&#8217;) &#8212; or a comma-separated list of owners<br />
/<br />
commit<br />
/<br />
C. 每周处理程序<br />
1. nextext.sql<br />
&#8211;<br />
&#8211; nextext.sql<br />
&#8211;<br />
&#8211; To find tables that don&#8217;t match the tablespace default for NEXT extent.<br />
&#8211; The implicit rule here is that every table in a given tablespace should<br />
&#8211; use the exact same value for NEXT, which should also be the tablespace&#8217;s<br />
&#8211; default value for NEXT.<br />
&#8211;<br />
&#8211; This tells us what the setting for NEXT is for these objects today.<br />
&#8211;<br />
&#8211; 11/30/98<br />
SELECT segment_name, segment_type, ds.next_extent as Actual_Next<br />
, dt.tablespace_name, dt.next_extent as Default_Next<br />
FROM dba_tablespaces dt, dba_segments ds<br />
WHERE dt.tablespace_name = ds.tablespace_name<br />
AND dt.next_extent !=ds.next_extent<br />
AND ds.owner = UPPER ( &#8216;&#038;OWNER&#8217; )<br />
ORDER BY tablespace_name, segment_type, segment_name<br />
2. existext.sql<br />
&#8211;<br />
&#8211; existext.sql<br />
&#8211;<br />
&#8211; To check existing extents<br />
&#8211;<br />
&#8211; This tells us how many of each object&#8217;s extents differ in size from<br />
&#8211; the tablespace&#8217;s default size. If this report shows a lot of different<br />
&#8211; sized extents, your free space is likely to become fragmented. If so,<br />
&#8211; this tablespace is a candidate for reorganizing.<br />
&#8211;<br />
&#8211; 12/15/98<br />
SELECT segment_name, segment_type<br />
, count(*) as nr_exts<br />
, sum ( DECODE ( dx.bytes,dt.next_extent,0,1) ) as nr_illsized_exts<br />
, dt.tablespace_name, dt.next_extent as dflt_ext_size<br />
FROM dba_tablespaces dt, dba_extents dx<br />
WHERE dt.tablespace_name = dx.tablespace_name<br />
AND dx.owner = &#8216;&#038;OWNER&#8217;<br />
GROUP BY segment_name, segment_type, dt.tablespace_name, dt.next_extent<br />
3. No_pk.sql<br />
&#8211;<br />
&#8211; no_pk.sql<br />
&#8211;<br />
&#8211; To find tables without PK constraint<br />
&#8211;<br />
&#8211; 11/2/98<br />
SELECT table_name<br />
FROM all_tables<br />
WHERE ōwner = &#8216;&#038;OWNER&#8217;<br />
MINUS<br />
SELECT table_name<br />
FROM all_constraints<br />
WHERE ōwner = &#8216;&#038;&#038;OWNER&#8217;<br />
AND constraint_type = &#8216;P&#8217;<br />
4. disPK.sql<br />
&#8211;<br />
&#8211; disPK.sql<br />
&#8211;<br />
&#8211; To find out which primary keys are disabled<br />
&#8211;<br />
&#8211;<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
SELECT owner, constraint_name, table_name, status<br />
FROM all_constraints<br />
WHERE ōwner = &#8216;&#038;OWNER&#8217; AND status = &#8216;DISABLED&#8217; AND constraint_type = &#8216;P&#8217;<br />
5. nonuPK.sql<br />
&#8211;<br />
&#8211; nonuPK.sql<br />
&#8211;<br />
&#8211; To find tables with nonunique PK indexes. Requires that PK names<br />
&#8211; follow a naming convention. An alternative query follows that<br />
&#8211; does not have this requirement, but runs more slowly.<br />
&#8211;<br />
&#8211;<br />
SELECT index_name, table_name, uniqueness<br />
FROM all_indexes<br />
WHERE index_name like &#8216;&#038;PKNAME%&#8217;<br />
AND ōwner = &#8216;&#038;OWNER&#8217; AND uniqueness = &#8216;NONUNIQUE&#8217;<br />
SELECT c.constraint_name, i.tablespace_name, i.uniqueness<br />
FROM all_constraints c , all_indexes i<br />
WHERE c.owner = UPPER ( &#8216;&#038;OWNER&#8217; ) AND i.uniqueness = &#8216;NONUNIQUE&#8217;<br />
AND c.constraint_type = &#8216;P&#8217; AND i.index_name = c.constraint_name<br />
6. mkrebuild_idx.sql<br />
&#8211;<br />
&#8211; mkrebuild_idx.sql<br />
&#8211;<br />
&#8211; Rebuild indexes to have correct storage parameters<br />
&#8211;<br />
&#8211;<br />
SELECT &#8216;alter index &#8216; || index_name || &#8216; rebuild &#8216;<br />
, &#8216;tablespace INDEXES storage &#8216;<br />
|| &#8216; ( initial 256 K next 256 K pctincrease 0 ) ; &#8216;<br />
FROM all_indexes<br />
WHERE ( tablespace_name != &#8216;INDEXES&#8217;<br />
OR next_extent != ( 256 * 1024 )<br />
)<br />
AND ōwner = &#8216;&#038;OWNER&#8217;<br />
/<br />
7. datatype.sql<br />
&#8211;<br />
&#8211; datatype.sql<br />
&#8211;<br />
&#8211; To check datatype consistency between two environments<br />
&#8211;<br />
&#8211;<br />
SELECT<br />
table_name,<br />
column_name,<br />
data_type,<br />
data_length,<br />
data_precision,<br />
data_scale,<br />
nullable<br />
FROM all_tab_columns &#8212; first environment<br />
WHERE ōwner = &#8216;&#038;OWNER&#8217;<br />
MINUS<br />
SELECT<br />
table_name,<br />
column_name,<br />
data_type,<br />
data_length,<br />
data_precision,<br />
data_scale,<br />
nullable<br />
FROM all_tab_columns@&#038;my_db_link &#8212; second environment<br />
WHERE ōwner = &#8216;&#038;OWNER2&#8242;<br />
order by table_name, column_name<br />
8. obj_coord.sql<br />
&#8211;<br />
&#8211; obj_coord.sql<br />
&#8211;<br />
&#8211; To find out any difference in objects between two instances<br />
&#8211;<br />
&#8211;<br />
SELECT object_name, object_type<br />
FROM user_objects<br />
MINUS<br />
SELECT object_name, object_type<br />
FROM user_objects@&#038;my_db_link</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1137.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>具有负载均衡功能的MySQL服务器集群部署及实现</title>
		<link>http://www.evanjiang.net.cn/archives/1134.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1134.html#comments</comments>
		<pubDate>Sat, 30 May 2009 17:04:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[freebsd unix]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1134</guid>
		<description><![CDATA[<p>MySQL是一个高速度、高性能、多线程的关系型数据库管理系统，适用平台多，可扩展性强。在实际生产环境中，部署和实现具有一定负载均衡功能的MySQL服务器集群，对于提高用户数据库应用系统的性能、速度和稳定性具有明显的作用。本文简要介绍了在 FreeBSD 7.0-Release系统上部署实现MySQL服务器集群的方案，并对可能出现的问题提供了相应的解决方法。</p>
<p>　1. 引言</p>
<p>　　MySQL是一个高速度、高性能、多线程、开放源代码，建立在客户/服务器(Client /Server)结构上的关系型数据库管理系统(RDBMS)。它始于1979年，最初是Michael Widenius为瑞典TcX公司创建的UNIREG数据库系统，当时的UNIREG没有SQL(Structured Query Language结构化查询语言)接口，限制了它的应用。1996年5月，Widenius开发出了MySQL的最初版本，开始在Internet上公开发行。MySQL的开发人员从一开始就一直关注它的性能，为此不惜特性集，直到今天，MySQL依然保持本色，以高速度高性能为首要原则。随着时间的推移，MySQL也加入了大型数据库产品的高级特性，如存储过程、视图、触发器等，使其在企业级数据库系统中开始被部署应用[1]。2008年10 月，SUN公司收购了MySQL AB公司，开始进入开源领域。随着重量级操作系统Solaris的开源，SUN MySQL在数据库市场占有的份额将会进一步提高。因此，在生产环境中部署具有负载均衡功能的MySQL服务器集群，对于提高企业数据库应用系统的速度、稳定性及可伸缩性具有很大的现实意义，也可以有效降低应用系统的投资成本。本文将以FreeBSD 7.0-Release操作系统为例，利用MySQL数据库的复制(Replication)特性，简要介绍部署MySQL服务器集群的实现方法和相关注意事项。</p>
<p>　　2. 系统模型</p>
<p>　　本集群的结构为一个主MySQL服务器(Master)服务器与多个从属 MySQL服务器(Slave)建立复制(replication)连接，主服务器与从属服务器实现一定程度上的数据同步，多个从属服务器存储相同的数据副本，实现数据冗余，提供容错功能。部署开发应用系统时，对数据库操作代码进行优化，将写操作(如UPDATE、INSERT)定向到主服务器，把大量的查询操作(SELECT)定向到从属服务器，实现集群的负载均衡功能。如果主服务器发生故障，从属服务器将转换角色成为主服务器，使应用系统为终端用户提供不间断的网络服务;主服务器恢复运行后，将其转换为从属服务器，存储数据库副本，继续对终端用户提供数据查询检索服务。</p>
<p>　　3. 部署实现</p>
<p>　　本文以一台主服务器带三台从属服务器为例，简要介绍MySQL服务器集群的实现方案和具体方法步骤。</p>
<p>　　3.1 系统部署</p>
<p>　　由于FreeBSD系统对机器硬件要求较低，出于降低系统部署成本考虑，主服务器和从属服务器操作系统均采用FreeBSD 7.0-Release，并采用最小化定制安装，完成以后系统占用磁盘空间仅为254M(不计swap分区所占空间，它随具体机器内存容量的变化而变化)。为充分发挥系统硬件性能，MySQL数据库采用源代码编译安装。</p>
<p>　　3.1.1 安装FreeBSD系统</p>
<p>　　在主服务器和从属服务器上安装FreeBSD 7.0-Release，具体安装方法步骤不是本文主要内容，在此略过，如有疑问可以参考FreeBSD系统手册。需要说明的是为方便用户系统运行期间的维护管理，要打开系统的SSH服务功能，系统安装配置期间允许root用户远程登录，正常运行以后要关闭root用户的远程登录功能。在/etc/ssh /sshd_config配置文件中对PermitRootLogin设置为yes为允许root用户远程登录到系统，设置为no即为不允许。修改保存文件后执行kill –HUP `cat /var/run/sshd.pid`命令即可重启sshd守护进程，使设置生效[2]。上述操作需要root用户权限。

　3.1.2 编译安装MySQL</p>
<p>　　到MySQL的官方网站http://www.mysql.com下载MySQL数据库的安装源代码压缩包，本例下载的是mysql-5.1.30.tar.gz，以root用户身份登录到系统，开始安装MySQL数据库系统。</p>
<p>　　由于在对MySQL进行源代码编译安装时要求使用GNU的C编译器，而FreeBSD系统本身提供的不是该编译器，因此用户必须下载安装GNU C编译器[3]。把下载的gnumake-3.81.tar.gz解压安装，按如下步骤即可安装GNU C编译器：</p>
<p>　　[root@FreebsdMaster/softwares]# tar –zxvf gnumake-3.81.tar.gz</p>
<p>　　[root@FreebsdMaster /softwares]# cd make-3.81</p>
<p>　　[root@FreebsdMaster /softwares/make-3.81]# ./configure ; make; make install; make clean</p>
<p>　　GNU C编译器默认安装到/usr/local/bin，在安装MySQL时按绝对路径调用make命令即可，如# /usr/local/bin/make。</p>
<p>　　MySQL的编译安装比较复杂，具体操作及相关注意事项如下：</p>
<p>　　(1). 解压mysql-5.1.30.tar.gz，并进行配置</p>
<p>　　[root@FreebsdMaster /softwares]# tar –zxvf mysql-5.1.30.tar.gz</p>
<p>　　[root@FreebsdMaster /softwares]# cd mysql-5.1.30</p>
<p>　　[root@FreebsdMaster /softwares/mysql-5.1.30]# ./configure \</p>
<p>　　-–prefix=/app/mysql5 -–with-charset=gb2312</p>
<p>　　说明：MySQL默认的安装目录是/usr/local/mysql，为了增强系统部署的灵活性，紧贴用户应用系统实际情况，可以用—-prefix参数定制安装目录。&#8211;with-charset参数是使MySQL数据库支持中文gb2312字符集，如果需要支持其它字符集，使用&#8211;with- extra-charset参数，格式为—-with-extra-charset=CHARSET1,CHARSET2, [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL是一个高速度、高性能、多线程的关系型数据库管理系统，适用平台多，可扩展性强。在实际生产环境中，部署和实现具有一定负载均衡功能的MySQL服务器集群，对于提高用户数据库应用系统的性能、速度和稳定性具有明显的作用。本文简要介绍了在 FreeBSD 7.0-Release系统上部署实现MySQL服务器集群的方案，并对可能出现的问题提供了相应的解决方法。</p>
<p>　1. 引言</p>
<p>　　MySQL是一个高速度、高性能、多线程、开放源代码，建立在客户/服务器(Client /Server)结构上的关系型数据库管理系统(RDBMS)。它始于1979年，最初是Michael Widenius为瑞典TcX公司创建的UNIREG数据库系统，当时的UNIREG没有SQL(Structured Query Language结构化查询语言)接口，限制了它的应用。1996年5月，Widenius开发出了MySQL的最初版本，开始在Internet上公开发行。MySQL的开发人员从一开始就一直关注它的性能，为此不惜特性集，直到今天，MySQL依然保持本色，以高速度高性能为首要原则。随着时间的推移，MySQL也加入了大型数据库产品的高级特性，如存储过程、视图、触发器等，使其在企业级数据库系统中开始被部署应用[1]。2008年10 月，SUN公司收购了MySQL AB公司，开始进入开源领域。随着重量级操作系统Solaris的开源，SUN MySQL在数据库市场占有的份额将会进一步提高。因此，在生产环境中部署具有负载均衡功能的MySQL服务器集群，对于提高企业数据库应用系统的速度、稳定性及可伸缩性具有很大的现实意义，也可以有效降低应用系统的投资成本。本文将以FreeBSD 7.0-Release操作系统为例，利用MySQL数据库的复制(Replication)特性，简要介绍部署MySQL服务器集群的实现方法和相关注意事项。</p>
<p>　　2. 系统模型</p>
<p>　　本集群的结构为一个主MySQL服务器(Master)服务器与多个从属 MySQL服务器(Slave)建立复制(replication)连接，主服务器与从属服务器实现一定程度上的数据同步，多个从属服务器存储相同的数据副本，实现数据冗余，提供容错功能。部署开发应用系统时，对数据库操作代码进行优化，将写操作(如UPDATE、INSERT)定向到主服务器，把大量的查询操作(SELECT)定向到从属服务器，实现集群的负载均衡功能。如果主服务器发生故障，从属服务器将转换角色成为主服务器，使应用系统为终端用户提供不间断的网络服务;主服务器恢复运行后，将其转换为从属服务器，存储数据库副本，继续对终端用户提供数据查询检索服务。</p>
<p>　　3. 部署实现</p>
<p>　　本文以一台主服务器带三台从属服务器为例，简要介绍MySQL服务器集群的实现方案和具体方法步骤。</p>
<p>　　3.1 系统部署</p>
<p>　　由于FreeBSD系统对机器硬件要求较低，出于降低系统部署成本考虑，主服务器和从属服务器操作系统均采用FreeBSD 7.0-Release，并采用最小化定制安装，完成以后系统占用磁盘空间仅为254M(不计swap分区所占空间，它随具体机器内存容量的变化而变化)。为充分发挥系统硬件性能，MySQL数据库采用源代码编译安装。</p>
<p>　　3.1.1 安装FreeBSD系统</p>
<p>　　在主服务器和从属服务器上安装FreeBSD 7.0-Release，具体安装方法步骤不是本文主要内容，在此略过，如有疑问可以参考FreeBSD系统手册。需要说明的是为方便用户系统运行期间的维护管理，要打开系统的SSH服务功能，系统安装配置期间允许root用户远程登录，正常运行以后要关闭root用户的远程登录功能。在/etc/ssh /sshd_config配置文件中对PermitRootLogin设置为yes为允许root用户远程登录到系统，设置为no即为不允许。修改保存文件后执行kill –HUP `cat /var/run/sshd.pid`命令即可重启sshd守护进程，使设置生效[2]。上述操作需要root用户权限。<br />
<span id="more-1134"></span><br />
　3.1.2 编译安装MySQL</p>
<p>　　到MySQL的官方网站http://www.mysql.com下载MySQL数据库的安装源代码压缩包，本例下载的是mysql-5.1.30.tar.gz，以root用户身份登录到系统，开始安装MySQL数据库系统。</p>
<p>　　由于在对MySQL进行源代码编译安装时要求使用GNU的C编译器，而FreeBSD系统本身提供的不是该编译器，因此用户必须下载安装GNU C编译器[3]。把下载的gnumake-3.81.tar.gz解压安装，按如下步骤即可安装GNU C编译器：</p>
<p>　　[root@FreebsdMaster/softwares]# tar –zxvf gnumake-3.81.tar.gz</p>
<p>　　[root@FreebsdMaster /softwares]# cd make-3.81</p>
<p>　　[root@FreebsdMaster /softwares/make-3.81]# ./configure ; make; make install; make clean</p>
<p>　　GNU C编译器默认安装到/usr/local/bin，在安装MySQL时按绝对路径调用make命令即可，如# /usr/local/bin/make。</p>
<p>　　MySQL的编译安装比较复杂，具体操作及相关注意事项如下：</p>
<p>　　(1). 解压mysql-5.1.30.tar.gz，并进行配置</p>
<p>　　[root@FreebsdMaster /softwares]# tar –zxvf mysql-5.1.30.tar.gz</p>
<p>　　[root@FreebsdMaster /softwares]# cd mysql-5.1.30</p>
<p>　　[root@FreebsdMaster /softwares/mysql-5.1.30]# ./configure \</p>
<p>　　-–prefix=/app/mysql5 -–with-charset=gb2312</p>
<p>　　说明：MySQL默认的安装目录是/usr/local/mysql，为了增强系统部署的灵活性，紧贴用户应用系统实际情况，可以用—-prefix参数定制安装目录。&#8211;with-charset参数是使MySQL数据库支持中文gb2312字符集，如果需要支持其它字符集，使用&#8211;with- extra-charset参数，格式为—-with-extra-charset=CHARSET1,CHARSET2, … 。</p>
<p>　　(2). 编译安装MySQL</p>
<p>　　[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make</p>
<p>　　[root@FreebsdMaster /softwares/mysql-5.1.30]# /usr/local/bin/make install</p>
<p>　　[root@FreebsdMaster /softwares/ mysql-5.1.30]# /usr/local/bin/make clean</p>
<p>　　注意一定要按绝对路径调用GNU C编译器，否则编译过程报错退出。</p>
<p>　　(3). 为系统添加mysql用户组和用户</p>
<p>　　[root@FreebsdMaster /]# pw group add mysql</p>
<p>　　[root@FreebsdMaster /]# adduser</p>
<p>　　FreeBSD系统没有groupadd命令，其添加用户组的命令是pw，添加用户命令adduser按系统提示操作即可完成。当然用 pw user add mysql命令也可以完成添加用户mysql的功能，但不如adduser命令功能完善。</p>
<p>　　(4). 更改/app/mysql5目录及文件属性</p>
<p>　　[root@FreebsdMaster /app]# chmod –R mysql mysql5</p>
<p>　　[root@FreebsdMaster /app]# chgrp –R mysql mysql5</p>
<p>　　说明：/app/mysql5为MySQL数据库系统所在目录，如果用户部署的应用系统数据量极大，可以将数据库系统目录设在大容量磁盘阵列上。磁盘阵列设置与具体机器硬件相关性很大，具体操作设置参考具体硬件系统说明和FreeBSD操作手册。不借助第三方软件，FreeBSD 7.0-Release系统可以配置RAID0、RAID1磁盘阵列。</p>
<p>　　(5). 安装MySQL系统初始数据库</p>
<p>　　[root@FreebsdMaster /softwares/ mysql-5.1.30]# ./scripts/mysql_install_db.sh &#8211;basedir=/app/mysql5 –-data-dir=/app/mysql5/data</p>
<p>　　注意：必须考虑Unix系统的文件权限特性，首先给mysql_install_db.sh脚本添加可执行属性，否则安装脚本无法执行。执行chmod +x ./scripts/mysql_install_db.sh命令即可。参数&#8211;basedir=/app/mysql5和&#8211;datadir=/app /msyql5/data为必加参数，否则脚本运行报错退出，无法安装系统初始数据库mysql和测试数据库test，mysql数据库包含系统权限设置表，没有这些表数据库服务进程mysqld将无法启动。</p>
<p>　　(6). 再次更改/app/mysql5目录及其文件属性</p>
<p>　　[root@FreebsdMaster /app]# chmod –R root mysql5<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　[root@FreebsdMaster /app]# chmod –R mysql mysql5/data</p>
<p>　　这样做是为了保证系统安全，防止通过MySQL系统漏洞的入侵行为。MySQL以mysql用户身份运行，对/data目录具有完全访问权限，对其它目录则只有系统管理员根据需要设置的访问权限，确保FreeBSD系统的安全。这里需要特别提醒用户注意的是要确保mysqld文件(MySQL的守护进程，位于/app/mysql5/libexec目录下)没有设置setuid标志位，如果设置了该标志位，入侵者对其它文件就具有其不应有的权限。具体原因参考关于Unix系统安全的手册，本文对这个问题不再赘述。</p>
<p>　　(7). 启动MySQL服务器</p>
<p>　　上述操作全部完成以后，输入如下命令启动MySQL数据库服务守护进程：</p>
<p>　　[root@FreebsdMaster /]# /app/mysql5/bin/mysqld_safe –user=mysql &#038;</p>
<p>　　&#8211;user参数表示以mysql用户身份运行MySQL数据库服务守护进程，“&#038;”符号表示以后台方式运行。输入 netstat –an|grep 3306命令，如果看到下面的输出则表示MySQL5.1.30已在用户系统上编译安装成功。其中，3306是MySQL数据库系统默认的监听端口号。</p>
<p>　　[root@FreebsdMaster /]# netstat –an|grep 3306</p>
<p>　　tcp4 0 0 *.3306 *.* LISTEN</p>
<p>　　按照同样方法与步骤在其它三台机器上安装FreeBSD 7.0-Release与MySQL5.1.30，为下面的MySQL服务器集群配置准备好系统平台基础。</p>
<p>　3.2 系统配置</p>
<p>　　所有系统安装完毕之后，需要对它们做一些必要的配置方可按照用户预先设计的结构模型实现具有负载均衡功能的MySQL服务器集群。</p>
<p>　　3.2.1 FreeBSD操作系统配置</p>
<p>　　(1). 调整内核参数，优化操作系统性能</p>
<p>　　因为是处于生产环境的服务器，投入正常运行之前一定要对内核参数进行必要的调整，提升系统性能，加强稳定性。简要说就是去掉不必要的硬件支持选项，使新内核占用更少的内存，加快启动速度。不同机器硬件系统差异很大，用户可根据具体系统的硬件情况不断调整试验，最终定制出最优化、最安全的FreeBSD系统。一定要屏蔽掉组合键Ctrl+Alt+Del的热重启功能，防止用户误按Ctrl+Alt+Del重启系统，引起数据库系统服务意外中断。在内核配置文件如MYKERNEL中加入：</p>
<p>　　options SC_DISABLE_REBOOT</p>
<p>　　重新编译系统内核，重启后即可屏蔽Ctrl+Alt+Del组合键的热重启功能。如何定制新内核及重新编译FreeBSD系统，用于可参考FreeBSD系统手册，此不赘述。</p>
<p>　　(2). 进行其它设置，增强系统安全性</p>
<p>　　用户可根据以下一般安全准则设置自己的FreeBSD系统。</p>
<p>　　·选择一个好的密码并予以妥善保护。</p>
<p>　　·对于敏感文件采用适当安全等级的加密算法进行加密。对于敏感级别不是很高的文件采用系统自带的crypt工具加密;对于敏感度极高的文件则使用专用加密工具，如PGP、GPG进行不对称加密，提高加密文件的防攻击能力。</p>
<p>　　·仔细设置文件访问权限，达到保护文件目的。</p>
<p>　　·保护好自己的.profile文件。恰当设置.profile文件的访问权限，确保只有自己能访问。</p>
<p>　　·仔细维护已设置setuid或setgid标志位的任何程序。</p>
<p>　　·禁止不加防范地离开已注册终端。任何时候都必须按常规正常退出系统，先执行clear清屏命令，防止其它用户看到操作痕迹，再执行exit命令退出终端。</p>
<p>　　·防范特洛伊木马程序。正确设置PATH变量的检索顺序，确保系统目录位于当前目录的前面。</p>
<p>　　·防范病毒的入侵。</p>
<p>　　·监控最近一次注册时间，确保没有他人盗用自己的帐号。</p>
<p>　　特别提示：对于生产环境的服务器，一定要保证服务器的物理安全，安全措施再完善的系统，一旦被入侵者物理接触，所有的安全措施将形同虚设!</p>
<p>　　Unix系统安全是一个很大的课题，本文只是提及了一些最肤浅的常识，具体内容用户可以参考相关书籍或网上资源。为确保Unix系统的配置具有高度的安全性，可以使用Internet安全中心(Center for Internet Security，CIS)提供的安全测试工具Benchmarks或评估工具Scoring Tools，检验和监控系统配置的安全性 [4]。</p>
<p>　　3.2.2 MySQL数据库系统配置</p>
<p>　　为了能使上述系统实现一对多的主从复制(replication)和冗余机制，还需要对以上四个MySQL服务器进行一些必要的配置。</p>
<p>　　(1). 配置主机名和IP地址</p>
<p>　　本实现方案中把MySQL服务器Master主机名设为FreebsdMaster，IP地址配置为192.168.1.100，其它三台Slave依次设为 FreebsdSlave1，192.168.1.101;FreebsdSlave2，192.168.1.102;FreebsdSlave3，IP 地址192.168.1.103。</p>
<p>　　(2). 设置root用户密码</p>
<p>　　MySQL的root用户初始密码为空，为保证系统安全必须为root用户设置密码：</p>
<p>　　[root@FreebsdMaster /]# /app/mysql5/bin/mysql –uroot –p</p>
<p>　　Enter password:</p>
<p>　　mysql>SET PASSWORD=PASSWORD(‘secret’);</p>
<p>　　同Unix系统一样，输入密码时屏幕没有任何回显，进入系统后执行SET PASSWORD SQL语句设置或修改MySQL root用户密码。为使应用系统服务器远程连接到MySQL数据库服务器，除本地root用户以外，还要设置一个能从用户内部网络其它终端登录的root 用户。具体操作如下：</p>
<p>　　mysql>USE mysql;</p>
<p>　　mysql>UPDATE user SET Host=’%’ WHERE Host=’hostname.yourdomain’ AND User=’root’;</p>
<p>　　mysql>flush privileges;</p>
<p>　　完成上述操作后应用系统服务器就可以连接到MySQL数据库服务器进行各种操作了，这个远程root用户的初始密码为空，用户需要从远程终端登录，为其设置密码。</p>
<p>　　(3). 开启MySQL服务器的二进制更新日志功能</p>
<p>　　上述MySQL服务器安装完成后，安装程序没有生成my.cnf配置文件，为此用户需要手工添加/etc/my.cnf文件。MySQL服务是由 /app/myql5/libexec/mysqld提供的，其寻找my.cnf配置文件的默认顺序为/etc/my.cnf，~/.my.cnf， /usr/local/mysql/etc/my.cnf。启动ee编辑器，# ee /etc/my.cnf，在Master机器的配置文件写入如下内容：</p>
<p>　　[mysqld]</p>
<p>　　log-bin=mysql-master-bin</p>
<p>　　server-id=1</p>
<p>　　在其它三台Slave机器的配置文件/etc/my.cnf文件写入如下内容：</p>
<p>　　[mysqld]</p>
<p>　　server-id=int</p>
<p>　　其中，int为一大于1且互不相等的正整数，如2，3，4等。务必要正确设置每个机器上的/etc/my.cnf配置文件，尤其是server-id不能有重复，这是一对多数据库复制能否成功的关键[5]!</p>
<p>　　设定好上述/etc/my.cnf文件后启动Master上的MySQL数据库服务时就自动开启了二进制更新日志功能。在Slave上启动MySQL时要加上&#8211;log-bin参数，即可开启二进制更新日志功能。在Slave机器上启动MySQL服务的命令如下：</p>
<p>　　# /app/mysql5/bin/mysqld_safe &#8211;user=mysql &#8211;log-bin &#038;</p>
<p>　　这样做的目的为了实现冗余容错功能。当主服务器Master出现故障停止服务时，在预转换角色成为Master的Slave上执行STOP SLAVE; RESET MASTER SQL语句，在其它两台Slave上执行CHANGE MASTER TO SQL语句，执行STOP SLAVE; RESET MASTER SQL语句的Slave服务器即转换成新的Master，其余两台机器则从新的Master复制数据库数据(复制的是更新UPDATE、INSERT等操作，并不是简单的copy)，从而实现冗余容错。</p>
<p>　3.3 系统实现</p>
<p>　　完成上述准备后可以开始实现MySQL数据库的一对多复制，对应用系统的数据库访问代码进行优化，使更新操作UPDATE、INSERT等SQL语句定向到Master服务器，查询检索SELECT语句定向到Slave服务器，从而实现负载均衡; 当主服务器Master出现故障停止服务时，通过服务器角色转换实现冗余容错;上述所有服务器通过高速核心交换机连接在一起，协同工作，提供集群 (Cluster)性能。下面，本文就此举一简例，具体说明实现(Implementation)步骤。</p>
<p>　　3.3.1 准备主服务器</p>
<p>　　(1). 在主服务器上创建示例数据库repl_db</p>
<p>　　从本地或远程终端登录到Master服务器，执行CREATE DATABASE repl_db;语句，创建示例数据库repl_db。建立表repl_table：</p>
<p>　　mysql>CREATE TABLE repl_table (f1 INT, f2 VARCHAR(20)) ;</p>
<p>　　向表中添加数据：</p>
<p>　　mysql>INSERT INTO repl_table (f1, f2) VALUES(1, ‘first’);</p>
<p>　　(2). 授予Slave复制(Replication)权限</p>
<p>　　授予从属服务器Slave进行复制的权限。假设从属服务器连接到主服务器复制的用户名为“repl”，密码为“g00r002b”：</p>
<p>　　mysql>GRANT REPLICATION SLAVE ON *.* TO repl@’%’ IDENTIFIED BY ‘g00r002b’;</p>
<p>　　刷新系统权限表，锁定写入语句操作：</p>
<p>　　mysql>FLUSH TABLES WITH READ LOCK;</p>
<p>　　这时所有写入操作都被锁定，包括支持事务(Transaction)特性的InnoDB类型表的提交(COMMIT)操作也被锁定，为数据库初始复制(copy)做好准备。</p>
<p>　　(3). 简单备份repl_db</p>
<p>　　在此，通过tar命令把数据库初始数据备份到/tmp目录。</p>
<p>　　# tar –cvf /tmp/mysql-data.tar /app/mysql5/data/repl_db</p>
<p>　　(4). 记录主服务器状态</p>
<p>　　执行SHOW MASTER STATUS 语句：</p>
<p>　　mysql> SHOW MASTER STATUS;</p>
<p>　　&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+</p>
<p>　　| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |</p>
<p>　　+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</p>
<p>　　| mysql-master-bin.000001 | 1027 | | |</p>
<p>　　+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+</p>
<p>　　记下File和Position两个参数的值，从属服务器Slave为了复制(replication)连接到主服务器Master时要用到这两个参数，如果参数与此不符将导致复制(replication)失败!</p>
<p>　　(5). 释放主服务器表级写入锁定</p>
<p>　　mysql>UNLOCK TABLES;</p>
<p>　　至此，主服务器解除写入锁定，一对多复制准备工作已全部完成，准备接受Slave的复制(replication)连接。</p>
<p>　　3.3.2 准备从属服务器</p>
<p>　　(1). 停止从属服务器的MySQL数据库服务</p>
<p>　　# /app/mysql5/bin/mysqladmin –uroot –p shutdown</p>
<p>　　Enter password:</p>
<p>　　输入MySQL系统root用户密码，MySQL服务停止。</p>
<p>　　(2). 简单copy数据库初始数据</p>
<p>　　在从属服务器上执行ftp操作，访问主服务器，下载/tmp/mysql-data.tar文件，在/app/mysql5/data目录下执行如下操作，把初始数据copy到Slave服务器：</p>
<p>　　[root@FreebsdSlave1 /app/mysql5/data]# tar –xvf /tmp/msyql-data.tar</p>
<p>　　其它两台Slave服务器执行同样操作，实现数据库初始数据的简单copy。</p>
<p>　　(3). 重启从属服务器上的MySQL数据库服务</p>
<p>　　# /app/mysql5/bin/mysqld_safe –-user=mysql –-log-bin &#038;</p>
<p>　　从属服务器已启动，同时启动二进制更新日志功能，为角色转换做好准备。</p>
<p>　　(4). 登录到从属服务器Slave的MySQL客户端</p>
<p>　　# /app/mysql/bin/msyql –uroot -p</p>
<p>　　(5). 启动从属服务器上的复制(replication)线程</p>
<p>　　mysql> CHANGE MASTER TO</p>
<p>　　-> MASTER_HOST=&#8217;192.168.1.100&#8242;,</p>
<p>　　-> MASTER_USER=&#8217;repl&#8217;,</p>
<p>　　-> MASTER_PASSWORD=&#8217;g00r002b&#8217;,</p>
<p>　　-> MASTER_LOG_FILE=&#8217; mysql-master-bin.000001&#8242;,</p>
<p>　　-> MASTER_LOG_POS=1027;</p>
<p>　　Query OK, 0 rows affected (0.00 sec)</p>
<p>　　mysql> START SLAVE;</p>
<p>　　Query OK, 0 rows affected (0.00 sec)</p>
<p>　　在所有从属服务器上执行相同的操作，自此从属服务器已连接到主服务器，开始真正意义上的replication工作。测试从属服务器的复制工作是否正常：</p>
<p>　　mysql>show slave status\G</p>
<p>　　************************** 1. row ***************************</p>
<p>　　Slave_IO_State: Waiting for master to send event</p>
<p>　　Master_Host: 192.168.1.100</p>
<p>　　Master_User: repl</p>
<p>　　Master_Port: 3306</p>
<p>　　Connect_Retry: 60</p>
<p>　　Master_Log_File: mysql-master-bin.000001</p>
<p>　　Read_Master_Log_Pos: 1027</p>
<p>　　Relay_Log_File: FreebsdSlave1-relay-bin.000005</p>
<p>　　Relay_Log_Pos: 251</p>
<p>　　Relay_Master_Log_File: mysql-master-bin.000001</p>
<p>　　Slave_IO_Running: Yes</p>
<p>　　Slave_SQL_Running: Yes</p>
<p>　　看到上述信息说明从属服务器已启动了与replication相关的线程I/O和SQL，一对多的replication已经开始工作。</p>
<p>　　(6). 功能测试</p>
<p>　　在主服务器上写入新的数据：</p>
<p>　　mysql>INSERT INTO repl_table (f1, f2) VALUES(2, ‘second’);</p>
<p>　　mysql>SELECT * FROM repl_table;</p>
<p>　　+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;+</p>
<p>　　| f1 | f2 |</p>
<p>　　+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-+</p>
<p>　　| 1 | first |</p>
<p>　　| 2 | second |</p>
<p>　　+&#8212;&#8211;=&#8211;+&#8212;&#8212;&#8212;-+</p>
<p>　　2 rows in set (0.01 sec)</p>
<p>　　在Slave上执行相同的查询操作：</p>
<p>　　mysql>SELECT * FROM repl_table;</p>
<p>　　+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;+</p>
<p>　　| f1 | f2 |</p>
<p>　　+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-+</p>
<p>　　| 1 | first |</p>
<p>　　| 2 | second |</p>
<p>　　+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;-+</p>
<p>　　2 rows in set (0.01 sec)</p>
<p>　　得到相同的查询结果，说明复制(replication)机制已成功开始工作!</p>
<p>　　3.3.3 配置网络DNS服务器</p>
<p>　　在BIND DNS服务器中，为上述三台从属服务器Slave配置同一个名字，客户端的查询检索操作将由DNS服务器定向到其中的一台Slave。因此，对于同一名字，不同的客户端会定向到不同的地址，访问不同的MySQL服务器，从而达到负载均衡的目的。假设用户为三台Slave分配的DNS名字为 mysqlslave.yourdomain，DNS服务器区域文件/var/named/yourdomain.zone中应包含如下数据项[6]：</p>
<p>　　sqlmaster.yourdomain. IN A 192.168.1.100</p>
<p>　　sqlslave1.yourdomain. IN A 192.168.1.101</p>
<p>　　sqlslave2.yourdomain. IN A 192.168.1.102</p>
<p>　　sqlslave3.yourdomain. IN A 192.168.1.103</p>
<p>　　sqlslave IN CNAME sqlslave1</p>
<p>　　sqlslave IN CNAME sqlslave2</p>
<p>　　sqlslave IN CNAME sqlslave3</p>
<p>　　当客户端进行查询操作时，提交给主机sqlslave.yourdomain的请求将由DNS服务器随机定向到三台Slave中的一台，由其执行查询作业，返回结果。从而在三台Slave之间实现查询级别的负载均衡。</p>
<p>　　3.3.4 应用系统程序代码优化</p>
<p>　　实际应用中，对数据库的写入操作相对查询操作少得多，因此，优化应用程序的数据库连接代码，把写入操作定向到Master服务器，查询操作定向到 Slave服务器，提供主服务器和从属服务器之间更新、查询的负载均衡功能。本文以PHP数据库连接代码为例，简要介绍代码优化方法[7]。</p>
<p>　　(1). 准备不同的数据库连接配置文件</p>
<p>　　准备两个数据库连接文件mysql_connect_master.php和mysql_connect_slave.php，其文件内容如下：</p>
<p>　　mysql_connect_master.php文件的内容：</p>
<p>　　</p>
<p>　　// Connect to the Database Server</p>
<p>　　$linkID = @mysql_connect(&#8220;sqlmaster.yourdomain&#8221;, &#8220;user&#8221;, &#8220;password&#8221;) or die(&#8220;Sorry, could not connect to the database!&#8221;);</p>
<p>　　// Select the Database</p>
<p>　　@mysql_select_db(&#8220;repl_db&#8221;) or die(&#8220;Sorry, Could not select database!&#8221;);</p>
<p>　　?></p>
<p>　　mysql_connect_slave.php文件的内容：</p>
<p>　　</p>
<p>　　// Connect to the Database Server</p>
<p>　　$linkID = @mysql_connect(&#8220;sqlslave.yourdomain&#8221;, &#8220;user&#8221;, &#8220;password&#8221;) or die(&#8220;Sorry, could not connect to the database!&#8221;);</p>
<p>　　// Select the Database</p>
<p>　　@mysql_select_db(&#8220;repl_db&#8221;) or die(&#8220;Sorry, Could not select database!&#8221;);</p>
<p>　　?><br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
　　(2). 优化程序SQL语句代码</p>
<p>　　对应用程序中访问数据库的代码段做出如下优化：</p>
<p>　　</p>
<p>　　&#8230;</p>
<p>　　// $sql is the query string to be committed to MySQL server.</p>
<p>　　if ( stripos( $sql, &#8221; SELECT&#8221; ) )</p>
<p>　　{</p>
<p>　　include_once(&#8220;./mysql_connect_slave.php&#8221;);</p>
<p>　　&#8230;</p>
<p>　　mysql_close();</p>
<p>　　}</p>
<p>　　else</p>
<p>　　{</p>
<p>　　include_once(&#8220;./mysql_connect_master.php&#8221;);</p>
<p>　　&#8230;</p>
<p>　　mysql_close();</p>
<p>　　}</p>
<p>　　&#8230;</p>
<p>　　?></p>
<p>　　说明：每当向MySQL服务器提交数据库操作时，加入一个if-else判断语句对变量$sql进行判断定向，如果是SELECT查询操作，将其定向到从属服务器Slave中的一个;如果是其它更新语句，则将其定向到主服务器Master。此处代码段是应用系统实现负载均衡的关键，用户务必根据自己实际情况，写出准确无误的代码。每次对数据库操作完毕都要及时释放数据库连接，以免更新、查询操作分别定向失败，影响系统负载均衡功能。这样做虽然在一定程度上增加Web服务器或应用服务器的开销，但与MySQL服务器集群负载均衡功能带来的大幅性能提升及冗余容错特性相比，这个开销绝对是物超所值!</p>
<p>　　3.4 注意事项</p>
<p>　　正确部署实现具有负载均衡功能的MySQL服务器集群必须注意以下事项：</p>
<p>　　(1). MySQL数据库复制(replication)特性是核心</p>
<p>　　此处的复制不是简单的copy，从属服务器启动两个线程(thread)：I/O线程和SQL线程，I/O线程接收主服务器对参与复制数据库的更新操作事件(event)，并记入自己的中继二进制更新日志文件(hostname-relay-bin.00000n)，由SQL线程将更新操作写入自己的数据库表项。主从服务器之间复制的不是具体的数据内容，而是具体的以二进制格式记录的操作事件，因而在一定程度上实现主从服务器之间的数据同步。(这种复制类似于生物学意义上的按基因复制，在英语中replication的主要词义就是指该种复制。)</p>
<p>　　(2). 复制的复杂性</p>
<p>　　主从数据库服务器间的replication要求Master与Slave上的MySQL版本最好一致，主从服务器必须设置相同的字符集，否则很容易造成复制失败。主服务器上更新权限表内容的FLUSH语句不会被复制[8]。</p>
<p>　　(3). 按照范式化要求设计数据库</p>
<p>　　生产环境下基于MySQL服务器的应用系统要想稳定运行，按范式化设计系统数据库是基本要求，具体内容可参考相关书籍。</p>
<p>　　(4). 打开数据库服务器的远程用户连接功能</p>
<p>　　打开主从服务器的远程用户连接是实现更新、查询操作分别定向的必要条件，否则，来自应用服务器的连接请求失败，影响系统应用正常运行。</p>
<p>　　(5). 负载均衡功能的实现需要良好的团队合作</p>
<p>　　BIND DNS服务器实现了从属服务器Slave之间的负载均衡，Slave和Master之间的负载均衡则由应用系统开发人员在程序代码级实现。整个系统的性能提升和冗余容错需要网络管理和应用系统开发团队之间的良好合作，否则负载均衡功能的实现就会失败。</p>
<p>4. 常见问题</p>
<p>　　(1). 如何估算MySQL服务器集群的性能提升量?</p>
<p>　　针对本文采用的结构模式，可对应用系统整体性能提升做出大致估算。假设应用系统写操作占10%，读操作占90%，写操作耗时是读操作的2倍，系统的吞吐量(throughput)为T(用reads/s读操作次数/秒来衡量)。把写操作线性转换为读操作，则有：</p>
<p>　　T= 2Xwrites + 9Xwrites ==>writes=T/11① (不采用主从复制模式，读写操作集中到一个服务器上)</p>
<p>　　T= 2Xwrites + 9Xwrites/N ==> writes=T/(2+9/N)② (采用一对多的主从复制模式，读操作在从属服务器，写操作在主服务器)</p>
<p>　　其中，writes为系统单位时间内所能承受的最大写操作次数，N为从属服务器个数，N大于等于2。在不采用主从复制模式时，系统性能 writes=T/11;采用本文一对三的复制模式时，系统性能writes=T/5。采用负载均衡模式与不采用系统性能之比为11：5，即2.2：1，考虑到应用服务器的额外开销，系统整体性能提升了整整1倍!从②式可以看出，系统整体性能理论极限为T/2，当然在实际生产环境中不可能达到。具体部署时用户可以根据自己的实际情况估算出合理的从属服务器数量，主要影响因素是网络带宽和机器整体性能[9]。</p>
<p>　　(2). 如何应对主从服务器崩溃?</p>
<p>　　当某台从属服务器崩溃时，修复故障重启后重新连接到主服务器，根据其master.info文件更新其数据，保持与主服务器的数据同步。如果主服务器崩溃，在某一从属服务器上执行STOP SLAVES; GRANT REPLICATION SLAVE ON *.* repl_db TO ‘repl’@’%’ IDENTIFIED BY ‘g00r002b’;RESET MASTER;这三个SQL语句，由于从属服务器已启动了二进制更新日志功能，因此具备了角色转换的必要条件。更改其主机名、IP地址及server- id与Master一样，重启MySQL服务器，系统开始正常对外提供服务。其它两台从属服务器则不需执行任何操作，继续执行replication过程。BIND DNS服务器和应用程序也不需做任何调整，继续对系统用户提供不间断服务。主服务器排除故障恢复正常后，将其网络配置改为与现有Master转换角色之前一样的配置，重启MySQL服务，将其角色转换为从属服务器。也就是说，整个集群机器的角色可以相互循环转换，提高系统的冗余性和可靠性。在此需要注意的是，在应用系统调试运行正常之后，在Slave角色服务器的/etc/my.cnf文件[mysqld]段加入slave-skip- errors=all，保证集群之间复制(replication)的正常运行。</p>
<p>　　5. 结束语</p>
<p>　　部署与实现具有负载均衡功能的MySQL服务器集群是一项复杂的系统工程，需要多方面良好的协同合作才能做好。服务器的搭建配置、BIND DNS服务器的配置部署，以及应用系统程序的开发都要紧紧围绕实现MySQL服务器集群负载均衡功能这个目标。必须对主服务器的运行状态进行动态监控，如果发生故障，立即执行角色转换过程，确保为终端用户提供可靠、不间断的服务。可以针对具体系统环境写出监控脚本或程序，确保系统的可靠性与稳定性。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1134.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Oracle10gR2 on SUSE Linux 10安装笔记</title>
		<link>http://www.evanjiang.net.cn/archives/1097.html</link>
		<comments>http://www.evanjiang.net.cn/archives/1097.html#comments</comments>
		<pubDate>Mon, 25 May 2009 10:00:40 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[suse linux]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=1097</guid>
		<description><![CDATA[<p>系统要求：
内存：推荐1G
Swap分区：设为内存的2倍
/tmp磁盘空间：400MB以上
磁盘空间：软件3.5G 数据1.2G</p>
<p>所需软件：
SUSE Linux10 for x86
Oracle database 10gR2 for linux32
Orarun-1.8-109.15.i586.rpm软件包，可以从http://ftp.novell.com/partners/oracle/sels-9下载</p>
<p>安装步骤：
1、安装SUSE
安装SUSE一定确保安装“C/C++Compiler and Tools”软件包。
# gcc –version 查看是否安装该软件包</p>
<p>2、安装所需软件包
安装orarun软件包
#rpm –ivh orarun-1.8-109.15.i586.rpm
安装libaio和libaio-devel软件包，这两个软件包可以在SUSE Linux DISK4中找到
#rpm –ivh orarun-1.8-109.15.i586.rpm
#rpm –ivh libaio-devel-0.3.104-3.i586.rpm</p>
<p>3、Oracle用户设置
当orarun软件包安装时，会自动建立名为oracle的用户，和一个oinstall组。我们只需要将该用户设置为enable，把shell从/bin/false改为/binbash。而且orarun软件包将ORACLE_HOME文件夹自动生成，减少了很多麻烦。

4、设置Oracle环境变量
修改/ect/profile.d/oracle.sh文件,ORACLE_HOME、ORACLE_SID等环境变量可以根据需要自行修改。
例如：
ORACLE_HOME=$ORACLE_BASE/product/10gR2
ORACLE_SID=ORCL
其中默认NLS_LANG＝AMERICAN，如果在中文OS下安装界面会产生乱码。建议在英文环境下安装。








5、安装Oracle10gR2
注销root用户，以oracle用户重新登录到KDE。注意不要在root用户下使用su – oracle来切换到oracle用户进行安装，那样系统图形界面不能启动。
运行./runInstaller –ignoresysprereqs 开始安装Oracle, –ignoresysprereqs忽略对操作系统的认证，Oracle10g默认不能安装在SUSE Linux10上。当然也可以将安装文件拷贝到硬盘，修改database/install/oraparam.ini文件，将其中添加SuSE-10，这样可以不使用–ignoresysprereqs参数。








下面在图形界面就可以一路顺利安装，安装时没有发现任何错误。
企业管理器地址为http://localhost:1158/em在这里可以设置数据库。</p>
<p>感觉在SUSE Linux10上安装Oracle非常方便，不用过多的设置各种参数。而且SUSE Linux10界面也非常漂亮,大家有兴趣可以试一下。</p>
]]></description>
			<content:encoded><![CDATA[<p>系统要求：<br />
内存：推荐1G<br />
Swap分区：设为内存的2倍<br />
/tmp磁盘空间：400MB以上<br />
磁盘空间：软件3.5G 数据1.2G</p>
<p>所需软件：<br />
SUSE Linux10 for x86<br />
Oracle database 10gR2 for linux32<br />
Orarun-1.8-109.15.i586.rpm软件包，可以从http://ftp.novell.com/partners/oracle/sels-9下载</p>
<p>安装步骤：<br />
1、安装SUSE<br />
安装SUSE一定确保安装“C/C++Compiler and Tools”软件包。<br />
# gcc –version 查看是否安装该软件包</p>
<p>2、安装所需软件包<br />
安装orarun软件包<br />
#rpm –ivh orarun-1.8-109.15.i586.rpm<br />
安装libaio和libaio-devel软件包，这两个软件包可以在SUSE Linux DISK4中找到<br />
#rpm –ivh orarun-1.8-109.15.i586.rpm<br />
#rpm –ivh libaio-devel-0.3.104-3.i586.rpm</p>
<p>3、Oracle用户设置<br />
当orarun软件包安装时，会自动建立名为oracle的用户，和一个oinstall组。我们只需要将该用户设置为enable，把shell从/bin/false改为/binbash。而且orarun软件包将ORACLE_HOME文件夹自动生成，减少了很多麻烦。<br />
<span id="more-1097"></span><br />
4、设置Oracle环境变量<br />
修改/ect/profile.d/oracle.sh文件,ORACLE_HOME、ORACLE_SID等环境变量可以根据需要自行修改。<br />
例如：<br />
ORACLE_HOME=$ORACLE_BASE/product/10gR2<br />
ORACLE_SID=ORCL<br />
其中默认NLS_LANG＝AMERICAN，如果在中文OS下安装界面会产生乱码。建议在英文环境下安装。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
5、安装Oracle10gR2<br />
注销root用户，以oracle用户重新登录到KDE。注意不要在root用户下使用su – oracle来切换到oracle用户进行安装，那样系统图形界面不能启动。<br />
运行./runInstaller –ignoresysprereqs 开始安装Oracle, –ignoresysprereqs忽略对操作系统的认证，Oracle10g默认不能安装在SUSE Linux10上。当然也可以将安装文件拷贝到硬盘，修改database/install/oraparam.ini文件，将其中添加SuSE-10，这样可以不使用–ignoresysprereqs参数。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
下面在图形界面就可以一路顺利安装，安装时没有发现任何错误。<br />
企业管理器地址为http://localhost:1158/em在这里可以设置数据库。</p>
<p>感觉在SUSE Linux10上安装Oracle非常方便，不用过多的设置各种参数。而且SUSE Linux10界面也非常漂亮,大家有兴趣可以试一下。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/1097.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Informix 11.5 Installation on Ubuntu 8.10 server</title>
		<link>http://www.evanjiang.net.cn/archives/983.html</link>
		<comments>http://www.evanjiang.net.cn/archives/983.html#comments</comments>
		<pubDate>Sat, 02 May 2009 15:24:17 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[informix]]></category>
		<category><![CDATA[Informix 11.5 Installation on Ubuntu 8.10 server]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=983</guid>
		<description><![CDATA[<p>1. 用户、组创建</p>
<p>    ox0spy@ubuntu:~$ sudo groupadd informix
    ox0spy@ubuntu:~$ sudo useradd -g informix -d /opt/informix -m -s /bin/bash informix</p>
<p>2. 环境变量设置</p>
<p>    ox0spy@ubuntu:~$ tail /etc/profile
    # add for informix
    INFORMIXDIR=/opt/informix
    INFORMIXSERVER=info_dbs
    INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts
    ONCONFIG=onconfig.std
   [...]]]></description>
			<content:encoded><![CDATA[<p>1. 用户、组创建</p>
<p>    ox0spy@ubuntu:~$ sudo groupadd informix<br />
    ox0spy@ubuntu:~$ sudo useradd -g informix -d /opt/informix -m -s /bin/bash informix</p>
<p>2. 环境变量设置</p>
<p>    ox0spy@ubuntu:~$ tail /etc/profile<br />
    # add for informix<br />
    INFORMIXDIR=/opt/informix<br />
    INFORMIXSERVER=info_dbs<br />
    INFORMIXSQLHOSTS=$INFORMIXDIR/etc/sqlhosts<br />
    ONCONFIG=onconfig.std<br />
    DBDATE=Y4MD*<br />
    LD_LIBRARY_PATH=$INFORMIXDIR/lib:$INFORMIXDIR/lib/esql:$LD_LIBRARY_PATH<br />
    export INFORMIXDIR INFORMIXSERVER ONCONFIG LD_LIBRARY_PATH<br />
    PATH=$PATH:$INFORMIXDIR/bin<br />
    export PATH</p>
<p>3. 解压安装文件<br />
    以informix用户登陆系统<br />
    将C1P6NEN.tar放到/opt/informix下<br />
    解压缩:</p>
<p>    informix@ubuntu:~$ tar xvf C1P6NEN.tar</p>
<p><span id="more-983"></span><br />
4. 安装<br />
    以root的权限安装</p>
<p>    ox0spy@ubuntu:/opt/informix$ sudo ./ids_install</p>
<p>下面根据提示就可以搞定</p>
<p>5. 配置<br />
    我是以 文本模式安装的，下面开始配置<br />
    1) 在/etc/services中添加两行，如下:</p>
<p>    informix@ubuntu:~$ grep sqlexe /etc/services<br />
    sqlexe          8887/tcp                        # informix<br />
    sqlexec         8888/tcp                        # informix</p>
<p>2) 修改/etc/hosts</p>
<p>    informix@ubuntu:~$ grep &#8216;ubuntu&#8217; /etc/hosts<br />
    192.168.43.128  ubuntu</p>
<p>3) 配置$INFORMIXDIR/etc/sqlhosts</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
    informix@ubuntu:~$ cat $INFORMIXDIR/etc/sqlhosts | grep -E &#8216;^[^#]&#8216;<br />
    info_dbs                onipcshm        ubuntu          sqlexe<br />
    info_dbs_tcp    onsoctcp        ubuntu          sqlexec</p>
<p>4) 建立空间</p>
<p>    informix@ubuntu:~$ mkdir dbs &#038;&#038; cd dbs &#038;&#038; touch rootdbs rootdbs_mirror &#038;&#038; chmod 660 *</p>
<p>5) 配置$INFORMIXDIR/etc/onconfig.std文件</p>
<p>    ROOTNAME rootdbs<br />
    ROOTPATH $INFORMIXDIR/dbs/rootdbs</p>
<p>    MIRRORPATH $INFORMIXDIR/dbs/rootdbs_mirror</p>
<p>    SERVERNUM 0<br />
    DBSERVERNAME info_dbs<br />
    DBSERVERALIASES info_dbs_tcp</p>
<p>    NETTYPE ipcshm,1,50,CPU<br />
    NETTYPE soctcp,1,50,NET</p>
<p>    TAPEDEV /dev/null</p>
<p>    LTAPEDEV /dev/null</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
6. 初始化数据库</p>
<p>    informix@ubuntu:~$ oninit -ivy</p>
<p>深夜里看着一串串的 &#8230;successed 真爽</p>
<p>    informix@ubuntu:~$ onstat -i</p>
<p>    IBM Informix Dynamic Server Version 11.50.UC3     &#8212; On-Line &#8212; Up 00:44:43 &#8212; 144676 Kbytes<br />
    onstat></p>
<p>到此，数据库安装工作就完成</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/983.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Freebsd7.0安装、配置、应用postgresql8.2 教程</title>
		<link>http://www.evanjiang.net.cn/archives/980.html</link>
		<comments>http://www.evanjiang.net.cn/archives/980.html#comments</comments>
		<pubDate>Sat, 02 May 2009 15:19:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[postgresql]]></category>
		<category><![CDATA[Freebsd7.0安装、配置、应用postgresql8.2]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=980</guid>
		<description><![CDATA[<p>使用FreeBSD+PostgreSQL做网络数据库服务器是一套非常的解决方案：</p>
<p>首先，二者都是开源领域里的佼佼者。FreeBSD以强大的网络负载、处理能力、坚如磐石的稳定性，享誉全球。而PostgreSQL是开源数据库领域里，非常强大而且高效、能存储大数据量数据的先进数据库系统。</p>
<p>其次，两者同根同源，二者都源自加州伯克利分校，是开源领域里著名的“学院派”。二者能很好的兼容，二者结合能很好的发挥各自强大的性能。</p>
<p>第一步，安装PostgreSQL8.2</p>
<p>PostgreSQL最新的版本已经有8.3的了，但是我们选择比较稳定的8.2。</p>
<p>#cd /usr/ports/databases/postgresql82-server</p>
<p>#make config      #配置一下你需要的选项，在这里按默认安装</p>
<p>#make install clean</p>
<p>自动下载源码编译安装，时间看你的网络速度，大概半小时左右。</p>
<p>如果顺利安装完成以后，系统会自动增加一个用户pgsql，用户可以查看/etc/passwd文件。</p>
<p>数据库系统会安装在/usr/local/pgsql/目录里</p>
<p>安装完成以后，建议重启一下系统，否则createdb、createuser等命令系统无法找到，也可以输入#rehash刷新系统</p>
<p>第二部初始化PostgreSQL</p>
<p>以pgsql用户登陆系统</p>
<p>>su pgsql</p>
<p>$mkdir /usr/local/pgsql/data   #目的在于创建一个pgsql拥有权限的目录</p>
<p>$/usr/local/bin/initdb -D /usr/local/pgsql/data     #初始化数据</p>
<p>$exit

第三步 初步使用PostgreSQL</p>
<p>用pgsql登陆psql环境。</p>
<p># psql -U pgsql postgres</p>
<p>postgres# \du     #显示当前数据库用户，当前只有一个pgsql这样的超级用户</p>
<p>postgres# \l       #显示当前所有数据</p>
<p>postgres# \q    #退出psql环境</p>
<p>这个时候使用createdb这些postgresql命令是不行的，因为数据库里，还没有root这用户</p>
<p>先添加root用户</p>
<p># psql -U pgsql postgres</p>
<p>postgres#  CREATE ROLE root [...]]]></description>
			<content:encoded><![CDATA[<p>使用FreeBSD+PostgreSQL做网络数据库服务器是一套非常的解决方案：</p>
<p>首先，二者都是开源领域里的佼佼者。FreeBSD以强大的网络负载、处理能力、坚如磐石的稳定性，享誉全球。而PostgreSQL是开源数据库领域里，非常强大而且高效、能存储大数据量数据的先进数据库系统。</p>
<p>其次，两者同根同源，二者都源自加州伯克利分校，是开源领域里著名的“学院派”。二者能很好的兼容，二者结合能很好的发挥各自强大的性能。</p>
<p>第一步，安装PostgreSQL8.2</p>
<p>PostgreSQL最新的版本已经有8.3的了，但是我们选择比较稳定的8.2。</p>
<p>#cd /usr/ports/databases/postgresql82-server</p>
<p>#make config      #配置一下你需要的选项，在这里按默认安装</p>
<p>#make install clean</p>
<p>自动下载源码编译安装，时间看你的网络速度，大概半小时左右。</p>
<p>如果顺利安装完成以后，系统会自动增加一个用户pgsql，用户可以查看/etc/passwd文件。</p>
<p>数据库系统会安装在/usr/local/pgsql/目录里</p>
<p>安装完成以后，建议重启一下系统，否则createdb、createuser等命令系统无法找到，也可以输入#rehash刷新系统</p>
<p>第二部初始化PostgreSQL</p>
<p>以pgsql用户登陆系统</p>
<p>>su pgsql</p>
<p>$mkdir /usr/local/pgsql/data   #目的在于创建一个pgsql拥有权限的目录</p>
<p>$/usr/local/bin/initdb -D /usr/local/pgsql/data     #初始化数据</p>
<p>$exit<br />
<span id="more-980"></span><br />
第三步 初步使用PostgreSQL</p>
<p>用pgsql登陆psql环境。</p>
<p># psql -U pgsql postgres</p>
<p>postgres# \du     #显示当前数据库用户，当前只有一个pgsql这样的超级用户</p>
<p>postgres# \l       #显示当前所有数据</p>
<p>postgres# \q    #退出psql环境</p>
<p>这个时候使用createdb这些postgresql命令是不行的，因为数据库里，还没有root这用户</p>
<p>先添加root用户</p>
<p># psql -U pgsql postgres</p>
<p>postgres#  CREATE ROLE root WITH SUPERUSER CREATEDB CREATEROLE CREATEUSER INHERIT LOGIN</p>
<p>postgres# \q </p>
<p>在运行createdb、createuser就可以操作了</p>
<p>第四步 进阶操作PostgreSQL<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
创建一个用户test</p>
<p>#createuser test</p>
<p>postgres#  ALTER USER test WITH PASSWORD &#8216;test&#8217;;#修改用户密码</p>
<p>给指定用户创建一个数据库testdb</p>
<p>#createdb -O test testdb</p>
<p>创建数据库时指定数据库的编码</p>
<p>#createdb -O test -E UTF8 testdb</p>
<p>第五步创建表空间</p>
<p>通过使用表空间，管理员可以控制一个 PostgreSQL 安装的磁盘布局。这么做至少有两个用处。首先，如果初始化集群所在的分区或者卷用光了空间，而又不能逻辑上扩展或者别的什么操作，那么表空间可以在一个不同的分区上创建和使用，直到系统可以重新配置。</p>
<p>其次，表空间允许管理员根据数据库对象的使用模式安排数据位置，从而优化性能。比如，一个很频繁使用的索引可以放在非常快并且非常可靠的磁盘上，比如一种非常贵的固态设备。而同时，一个存储归档的数据，很少使用的或者对性能要求不高的表可以存储在一个便宜但比较慢的磁盘系统上。</p>
<p>先创建两个pgsql用户全部权限的的目录，路径是/home/db/test</p>
<p>www# mkdir /home/db/test/indexspace<br />
www# mkdir /home/db/test/tablespace</p>
<p>www# chown -R pgsql:pgsql /home/db/test/indexspace<br />
www# chown -R pgsql:pgsql /home/db/test/tablespace</p>
<p>#psql -U pgsql postgres   #登陆psql，创建属于用户test的两个连个表空间</p>
<p>postgres#CREATE TABLESPACE test_is OWNER test LOCATION &#8216;/home/db/test/indexspace&#8217;;<br />
postgres#CREATE TABLESPACE test_ts OWNER test LOCATION &#8216;/home/db/test/tablespace&#8217;;</p>
<p>postgres#\db    #可以单看所有的表空间名称所有者以及物理路径</p>
<p>设置test_ts为默认表空间</p>
<p>postgres#SET default_tablespace = test_ts;<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
创建一个指定默认表空间的数据库为</p>
<p>#createdb -D test_ts -O test -E UTF8 testdb</p>
<p>第六步 开启postgresql的网路访问</p>
<p>1、修改/usr/local/pgsql/data/postgresql.conf </p>
<p>知道到#listen_addresses = ‘localhost’修改为</p>
<p>listen_addresses = ‘*’</p>
<p>2、修改/usr/local/pgsql/data/pg_hba.conf </p>
<p># IPv4 local connections:<br />
host    all         all         127.0.0.1/32          trust<br />
host    all         all         192.168.1.0/24        trust</p>
<p>第七步 让PostgreSQL自动启动</p>
<p>修改/etc/rc.conf</p>
<p>添加一行</p>
<p>postgresql_enable=&#8221;YES&#8221;</p>
<p>这个数据库解决方案就配置完成，很简单。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/980.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>SQLServer2000数据库置疑的解决方法</title>
		<link>http://www.evanjiang.net.cn/archives/945.html</link>
		<comments>http://www.evanjiang.net.cn/archives/945.html#comments</comments>
		<pubDate>Tue, 21 Apr 2009 05:01:37 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sqlserver]]></category>
		<category><![CDATA[sqlserver 数据库 恢复]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=945</guid>
		<description><![CDATA[<p>先分离数据库
企业管理器&#8211;右键suspect的数据库&#8211;所有任务&#8211;分离数据库
然后备份你的suspect数据库的文件,再按下面的步骤处理:
1.新建一个同名的数据库
2.再停掉sql server
3.用suspect数据库的文件覆盖掉这个新建的同名数据库
4.再重启sql server
5.此时打开企业管理器时新建的同名数据库会出现置疑，先不管，执行下面的语句（注意修改其中的数据库名)</p>
<p>USE MASTER
GO
SP_CONFIGURE &#8216;ALLOW UPDATES&#8217;,1 RECONFIGURE WITH OVERRIDE
GO
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME=&#8217;置疑的数据库名&#8217;
Go
sp_dboption &#8216;置疑的数据库名&#8217;, &#8216;single user&#8217;, &#8216;true&#8217;
Go
DBCC CHECKDB(&#8216;置疑的数据库名&#8217;)
Go
update sysdatabases set status =28 where name=&#8217;置疑的数据库名&#8217;
Go
sp_configure &#8216;allow updates&#8217;, 0 reconfigure with override
Go
sp_dboption &#8216;置疑的数据库名&#8217;, &#8216;single user&#8217;, &#8216;false&#8217;
Go
 
6.完成后一般就可以访问数据库中的数据,这时,数据库本身一般还要问题,解决办法是,利用
数据库的脚本创建一个新的数据库,并将数据导进去就行.
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧
企业管理器&#8211;右键你的数据库&#8211;所有任务&#8211;导出数据
          &#8211;目标标数据库选择新建
         [...]]]></description>
			<content:encoded><![CDATA[<p>先分离数据库<br />
企业管理器&#8211;右键suspect的数据库&#8211;所有任务&#8211;分离数据库<br />
然后备份你的suspect数据库的文件,再按下面的步骤处理:<br />
1.新建一个同名的数据库<br />
2.再停掉sql server<br />
3.用suspect数据库的文件覆盖掉这个新建的同名数据库<br />
4.再重启sql server<br />
5.此时打开企业管理器时新建的同名数据库会出现置疑，先不管，执行下面的语句（注意修改其中的数据库名)</p>
<p>USE MASTER<br />
GO<br />
SP_CONFIGURE &#8216;ALLOW UPDATES&#8217;,1 RECONFIGURE WITH OVERRIDE<br />
GO<br />
UPDATE SYSDATABASES SET STATUS =32768 WHERE NAME=&#8217;置疑的数据库名&#8217;<br />
Go<br />
sp_dboption &#8216;置疑的数据库名&#8217;, &#8216;single user&#8217;, &#8216;true&#8217;<br />
Go<br />
DBCC CHECKDB(&#8216;置疑的数据库名&#8217;)<br />
Go<br />
update sysdatabases set status =28 where name=&#8217;置疑的数据库名&#8217;<br />
Go<br />
sp_configure &#8216;allow updates&#8217;, 0 reconfigure with override<br />
Go<br />
sp_dboption &#8216;置疑的数据库名&#8217;, &#8216;single user&#8217;, &#8216;false&#8217;<br />
Go<br />
 <span id="more-945"></span><br />
6.完成后一般就可以访问数据库中的数据,这时,数据库本身一般还要问题,解决办法是,利用<br />
数据库的脚本创建一个新的数据库,并将数据导进去就行.<br />
如果这样改不加数据库状态,你就把数据库导成一个新库来代替旧库吧<br />
企业管理器&#8211;右键你的数据库&#8211;所有任务&#8211;导出数据<br />
          &#8211;目标标数据库选择新建<br />
          &#8211;选择&#8221;在两个sql数据库之间复制对象和数据&#8221;<br />
          &#8211;把&#8221;包含扩展属性&#8221;选上,其他的根据需要选择<br />
          &#8211;最后完成。</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/945.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>db2培训笔记</title>
		<link>http://www.evanjiang.net.cn/archives/919.html</link>
		<comments>http://www.evanjiang.net.cn/archives/919.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:44:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>
		<category><![CDATA[db2培训笔记]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=919</guid>
		<description><![CDATA[<p>1、	Tablespace
	表空间分为dms与sms 设定后不可以修改，库中必定存在 syscatspace/systmpspace 两个sms类型的表空间。可创建userspace/usertmpspace(用户临时表空间用于临时表)
	Systmpspace: 在小根据使用情况自动分配动态伸缩，仅在需要时才分配磁盘空间，并在使用后进行回收，pagesize=4
	Syscatspace: 在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现
	Dms、sms、container
     Dms可以为对应多个container,不能为目录,而Sms只能提定一个目录且不能增加。
     表空间是数据存储的逻辑位置定义，容器则是数据存储的物理位置定义</p>
<p>2、	Instance
	在一个实例中数据库是完全独立的，各自有系统编目表(放在SysCatspace中)
	若为当前会话设置 DB2INSTANCE 环境变量，则其值为当前实例。要设置 DB2INSTANCE 环境变量，输入：
set db2instance=
	若没有为当前会话设置 DB2INSTANCE 环境变量，则 DB2 UDB 使用系统环境变量中 DB2INSTANCE 环境变量的设置
	如果根本没有设置 DB2INSTANCE 环境变量，则 DB2 UDB 使用注册表变量 DB2INSTDEF。 要在 注册表的全局级别设置 DB2INSTDEF 注册表变量，输入： db2set db2instdef= -g
	查询当前实例  db2  get  instance
	实例 命令 (db2ilist db2icrt  db2drop  db2stop db2start)
	attach [...]]]></description>
			<content:encoded><![CDATA[<p>1、	Tablespace<br />
	表空间分为dms与sms 设定后不可以修改，库中必定存在 syscatspace/systmpspace 两个sms类型的表空间。可创建userspace/usertmpspace(用户临时表空间用于临时表)<br />
	Systmpspace: 在小根据使用情况自动分配动态伸缩，仅在需要时才分配磁盘空间，并在使用后进行回收，pagesize=4<br />
	Syscatspace: 在数据库中创建的任何对象都以在系统编目表空间中增加记录的方式体现<br />
	Dms、sms、container<br />
     Dms可以为对应多个container,不能为目录,而Sms只能提定一个目录且不能增加。<br />
     表空间是数据存储的逻辑位置定义，容器则是数据存储的物理位置定义</p>
<p>2、	Instance<br />
	在一个实例中数据库是完全独立的，各自有系统编目表(放在SysCatspace中)<br />
	若为当前会话设置 DB2INSTANCE 环境变量，则其值为当前实例。要设置 DB2INSTANCE 环境变量，输入：<br />
set db2instance=<new_instance_name><br />
	若没有为当前会话设置 DB2INSTANCE 环境变量，则 DB2 UDB 使用系统环境变量中 DB2INSTANCE 环境变量的设置<br />
	如果根本没有设置 DB2INSTANCE 环境变量，则 DB2 UDB 使用注册表变量 DB2INSTDEF。 要在 注册表的全局级别设置 DB2INSTDEF 注册表变量，输入： db2set db2instdef=<new_instance_name> -g<br />
	查询当前实例  db2  get  instance<br />
	实例 命令 (db2ilist db2icrt  db2drop  db2stop db2start)<br />
	attach to nodename user username using password (在客户端登陆到实例上)<br />
	当更新实例级别或数据库级别的参数后，有些可以立即生效，有些需要重新启动实例才可生效。immediate 显式指明更改立即生效，deferred 显式指明更改在重起实例后生效。<br />
3、	在AIX中创建实例时必须有一个相同的用户名存上<br />
4、	关于在AIX小机上建库注意事现<br />
<span id="more-919"></span><br />
	需查询  \etc\servise  中的开放端口与服务名称与 dbm cfg 中的 SVCENAME保持一致<br />
database  manager config file  数据库管理配置文件<br />
db2  update  dbm cfg using  SVCENAME <name><br />
netstat –a|grep db2c_instname，看看监听是否起来<br />
db2  get dbm cfg<br />
	更改相关的注册表变量 (在sqllib 下)<br />
Db2set  db2codepage=1386<br />
Db2set  db2country=86<br />
Db2set  db2comm=tcpip<br />
Db2 terminate<br />
	创建 /usr/opt/db2_08_01/instance/db2icrt  -u  db2inst1 <instance_name><br />
	显示一个注册表变量的级别 db2set  rvn –all<br />
  显示一个实例级别概要文件设置的注册表值  db2set  -i (-g)<br />
5、	查询数据库<br />
db2 list db directory</p>
<p>6、	导出数据库完整的定义到脚本文件，包括表，视图，函数，数据库参数等<br />
db2look -d sample（数据库） -a -e -l -x -m -f -o（参数）samplesql.out（输出文件）<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
7、	查询节点<br />
db2 list node directory<br />
8、	创建或删除编目<br />
	db2 => catalog tcpip node node_name remote hostname|ip_address<br />
      server service_name|port_number [remote_instance instance_name]<br />
      [system system_name] [ostype  os_type]<br />
db2 => terminate<br />
	Db2  catalog database  <新别名> as <数据库> node  <节点><br />
例：CATALOG DATABASE b as b_on_ic AT NODE instnc_c<br />
	Uncatalog node<br />
9、	表空间<br />
	表空间是一种存储结构，它包含表、索引、大对象和长型数据。表空间驻留在数据库分区组中。它们允许将数据库和表数据的位置直接 指定到容器上。（容器可以是目录名、设备名或文件名。）<br />
	单个表空间可跨多个容器。<br />
	一个数据库至少必须包含三个表空间<br />
a.目录表空间 ，它包含该数据库的所有 系统目录表。此表空间称为 SYSCATSPACE，它不能被删除。IBMCATGROUP 是此表空间的缺省数据库分区组。<br />
	目录表空间 ，它包含该数据库的所有 系统目录表。此表空间称为 SYSCATSPACE，它不能被删除。IBMCATGROUP 是此表空间的缺省数据库分区组。</p>
<p>10、	创建DAS服务<br />
  DB2(R) 管理服务器（DAS）响应来自 DB2 管理工具和配置助手（CA）的请求。例如，DB2 管理工具允许您启动、停止和设置服务器的数据库管理器配置参数。CA 使用管理服务器来帮助用户编目客户机上的数据<br />
流程：<br />
AIX上创建用户组 db2admin ,创建DAS用户 das<br />
/usr/opt/db2_08_01/instance/dascrt -u <DASUser><br />
启动 DAS：<br />
作为 DAS 所有者登录。<br />
使用下列其中一个命令运行启动脚本：<br />
.       DASHOME/das/dasprofile    （对于 Bourne 或 Korn shell 程序）<br />
   source DASHOME/das/dascshrc （对于 C shell）<br />
其中 DASHOME 是 DB2 管理服务器的主目录。<br />
要启动 DAS，使用 db2admin 命令：   db2admin start </p>
<p>9、关于数据库相关命令<br />
	激活数据库  connect  to   <dbslias> , active db <dbalias><br />
停止数据库<br />
         deactivate  database <dbalias><br />
         db2 list applications [show detail]<br />
               db2 force application (6, 5)<br />
		    db2 force application all </p>
<p>	查询命令<br />
 list  active  databases (活动状态的数据库)<br />
 db2  list db directory (查询当前有多少个数据库)<br />
	显示数据库相关的参数  Database Configuration (在数据库一级的)<br />
 get db  cfg for  <datalias> show  detail<br />
11、	数据库恢复<br />
类型: version recovery(版本恢复)  crash    roll forwardd<br />
前滚恢复 是指复原了数据库或表空间备份映像后，重新应用记录在数据库日志文件中的事务。<br />
   崩溃恢复 是指在完成并落实所有更改（这些更改是一个或多个工作单元（事务）的一部分）之前如果发生故障，会自动恢复数据库。这是通过回滚未完成的事务，并完成在发生崩溃时仍在内存中的已落实事务来实<br />
11.监视<br />
	DIAGLEVEL &#8211; (0-4) (default 3)<br />
0 &#8211; NO error logging<br />
1 &#8211; Log (severe error)<br />
2 &#8211; Log (severe and non-severe errors)<br />
3 &#8211; Log (severe, non-severe, and warning messages)<br />
4 &#8211; Log (severe, non-severe, warning and informational message)<br />
         修改：db2 update dbm  cfg using diaglevel=<级别><br />
	db2 update dbm  cfg using diagpath=</home/yaolijun/sqllib/db2dump><br />
	DIAGPATH –valid directory<br />
Db2diag.log<br />
Db2alert.log  警告日志<br />
Pid.dmp(s) Tpid.000  二进制文件<br />
	Monitor<br />
Snapshot  monitor  (快照)<br />
Event Monitor      (事件)<br />
GET MONITOR SWITCHES (查询monitor 开关)<br />
UPDATE MONITOR SWITCHES USING {switch-name {ON | OFF} &#8230;}<br />
12、设置 DB2 环境<br />
      正确设置db2环境非常重要，它控制着 DB2 的运行与功能<br />
•	DB2 概要文件注册表 (是特定于 DB2 的变量，它影响 DB2 系统的管理、配置和性能。)<br />
   参数修改通常需重启实例，db2set –lr db2set –all<br />
•	操作系统环境变量   export DB2INSTANCE=PROD<br />
•	DB2 数据库管理器配置参数  get dbm cfg<br />
•	DB2 数据库配置参数<br />
13、权限(5种权限)<br />
     SYSADM(系统管理权限) 拥有管理实例的全部特权，并且还有对底层数据库中数据的访问权。<br />
SYSCTRL (系统控制权限)和 SYSMAINT(系统维护权限) 在管理实例、实例的数据库和数据库对象方面有一定的特权。这些权限没有对数据的访问权。DBADM(数据库管理权限) 有对指定的数据库执行管理任务的特权。它还拥有对数据库的全部数据访问权。LOAD 有对特定数据库运行装入实用程序的特权。</p>
<p>14、锁<br />
   锁的类型<br />
   in/is/ix/six/s/u/x/z<br />
   i:intent  s:share x:exclusive 互斥b u:update  z:superexclusive<br />
	隔离级别是在预编译或应用程序与数据库绑定时指定的<br />
  UR: 未落实的读的<br />
  CS: 游标稳定性<br />
  RS: 读稳定性<br />
  RR：可重复读<br />
15. 性能<br />
　　　主要因素：磁盘(Disk), 内存(Memory), 处理器(CPU), 网络(Network)，90%的性能瓶颈可能来自于磁盘的IO竞争；其次是内存，一方面是指物理内存的总量要满足需求，另一方面是指与内存相关的配置参数应正确配置；当然处理器的性能也很重要，多路CPU会对哪些依赖计算能力的复杂SQL查询起到显著的效果；网络不属于主要因素，属于客观的环境因素，是指过慢的网速会对数据的传输造成影响。<br />
DB2的参数配置分为两个级别，一个是实例级别，另一个是数据库级别。对数据服务性能影响较大的参数主要在数据库级别配置。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
16、模式<br />
　　系统模式集是和每个数据库一起创建的，并且它们被放置到 SYSCATSPACE 表空间中：<br />
模式是用于数据库中创建的数据库对象的高级限定符。它是数据库对象的集合，这些对象有表、视图、索引或触发器等等。它对数据库对象进行了逻辑分类<br />
多张表可以有相同的名称，但是要有不同的schema<br />
SYSIBM：<br />
基本系统目录<br />
建议不要进行直接访问<br />
SYSCAT：<br />
PUBLIC 被授予该模式的 SELECT 权限<br />
对只读视图编目 这是获取目录信息的推荐方式<br />
SYSSTAT：<br />
可更新的目录视图 － 影响优化器<br />
SYSFUN：<br />
用户定义的函数<br />
谁可以使用模式<br />
　　　CREATE SCHEMA <name> AUTHORIZATION <name></p>
<p>17目录结构<br />
　　　Create database  根据dtfdbpath的值在相应的路径创建数据库，如果dtfdbpath没有数据就在执行该命令的路径上建库。<br />
目录结构图<br />
Drive/directory   (dftdbpath)<br />
　    Db2 instance name  (instantce  owner, window no owner is DB2)<br />
    Node0000 (the partition number or the database 0 for no partition database)<br />
      Sql00001 (the database id  start at 1)<br />
		SQLOGDIR  (the default log  directory for the database)<br />
		SQLT0000.0  (syscatspace)<br />
		SQLT0001.0  (tempspace1)<br />
		SQLT0002.0  (userspace1)<br />
注：查询数据库创建的详细信息可用如下命令 　　　Db2 liist db  directory  on  c:</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/919.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>db2与oracle 与informix与sybase数据库的比较</title>
		<link>http://www.evanjiang.net.cn/archives/916.html</link>
		<comments>http://www.evanjiang.net.cn/archives/916.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:43:02 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>
		<category><![CDATA[informix]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[sybase]]></category>
		<category><![CDATA[db2与oracle 与informix数据库的比较]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=916</guid>
		<description><![CDATA[<p>DB2与Oracle比较
特性        DB2        Oracle
开放性/可移植性        IBMDB2UDB在各层面，从网络协议的支持到应用开发程序的编程接口，数据库存储程序及触发器，服务器之间的分布式运作，都是基于最新的国际标准，以 确保其开放性及移植性。        ORACLE的许多功能都是使用其私有的，非开放性的技术。例如：ORACLEPL/SQL语言是ORACLE私有的。其存储程序语句也不符合 ANSISQL及ISOSQL的标准，客户机/服务器的编程接口，ORACLE的SQL*NET也不是根据标准定义的。
处理性能        IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。IBM有信心能在各种标准的测试环境下超越 ORACLE。DB2在高端应用具有过硬的技术，有众多超过1Tera-bytes数据量的用户实例。        由于ORACLE限制用户在未经许可的情况下不能公布他们所作的性能测试，故一般用户不易取得ORACLE的比较资料。Oracle超过1Tera- bytes数据量的客户实例很少。
并行能力   [...]]]></description>
			<content:encoded><![CDATA[<p>DB2与Oracle比较<br />
特性        DB2        Oracle<br />
开放性/可移植性        IBMDB2UDB在各层面，从网络协议的支持到应用开发程序的编程接口，数据库存储程序及触发器，服务器之间的分布式运作，都是基于最新的国际标准，以 确保其开放性及移植性。        ORACLE的许多功能都是使用其私有的，非开放性的技术。例如：ORACLEPL/SQL语言是ORACLE私有的。其存储程序语句也不符合 ANSISQL及ISOSQL的标准，客户机/服务器的编程接口，ORACLE的SQL*NET也不是根据标准定义的。<br />
处理性能        IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。IBM有信心能在各种标准的测试环境下超越 ORACLE。DB2在高端应用具有过硬的技术，有众多超过1Tera-bytes数据量的用户实例。        由于ORACLE限制用户在未经许可的情况下不能公布他们所作的性能测试，故一般用户不易取得ORACLE的比较资料。Oracle超过1Tera- bytes数据量的客户实例很少。<br />
并行能力        DB2的并行版支持位图索引和对象关系，因此，DB2有更好的扩展性和性能；        Oracle触发器无法支持并行：在一些特殊的引用完整性(referentialintegrity)的限制下，并行也无法运用：如果表格中有大对象， 由于前述的限制(表不能分割)，并行也无法运用。总之，Oracle在并行系统中没有实现位图索引和对象关系，<br />
分布式数据库        DB2分布式数据库的处理(如两阶段提交)及连接功能是建立在DB2的核心中，不需要使用其它的产品附件。性能好，易使用，减少开支。        ORACLE的分布式功能需要另外购买DistributedOption以及SQL*NET等产品才能实现分布式数据库的连接。<br />
异构平台支持        在异构的环境中，IBM数据库方案简单、更加无缝而且比Oracle的成本低；        Oracle的异构网关性能差，当访问异构数据库时，Oracle缺乏全局的优化，导致了过多的数据及网络传输。<br />
复制能力        DB2提供业界最佳效率的和最开放的复制方案；DB2提供自动冲突检测和解决方法。        Oracle只提供自动冲突检测和解决方法的例子程序，用户须对例子程序做定制后来解决复制冲突<br />
对电子商务支持        IBM的Java技术为业界所公认，DB2公认为电子商务基石。DB2提供的JDBC接口，还可用Java语言写储存过程和用户自定义函数        Oracle的Java技术仅局限于数据库和ERP应用。<br />
对商业智能支持        DB2OLAPServer远比Express更易使用和实现。DB2OLAPServer提供读/写能力-这对一些关键性的多维分析扩展应用如：预测和 预算，是非常有用的(Express只支持读)。IBM的商业智能解决方案中，拥有数据挖掘(IntelligentMiner)工具。        OracleExpress只支持读的能力，不利于支持预测和预算。Oracle缺乏数据挖掘方面的工具。<br />
软件质量与可靠性        DB2的软件开发实验室早在1994年便已通过ISO9000国际质量管理标准的验证与认可。故DB2的软件质量是所有数据库厂家中可靠性最高，故障率最 低的数据库。        ORACLE版本6及版本7在推出后皆需经过无数次修订版升级才能达到一定程度的可用度，这给用户带来极大的不便，并且严重影响到投产系统的可用性及可靠 性。<br />
<span id="more-916"></span></p>
<p>DB2与Sybase比较</p>
<p>特性        DB2        Sybase<br />
开放性/可移植性        IBMDB2的编程接口遵照ANSI、X/OPEN标准的CLI(CallLevelInterface)及ANSISQL的嵌入式SQL等开放标准。 IBMDB2的存储程序和触发器机制则使用最新的SQL国际标准并支持标准的开放语言如C/C++。在DB2CommonServerV2.1.2 (1996)以及DB2UDB(1997)中更加入了用Java语言开发存储程序和触发器的功能。        1.编程接口：SYBASE使用的编程接口不是开放的，因为他使用的是自己的OpenClient/OpenServer接口，而不是基于某一标准的接 口。2.存储程序(StoredProcedure)：由于SYBASE的CLIENT/SERVER技术是80年代开发的，没有使用SQL92等相关的 标准，因此编制存储程序和触发器所用的Transact-SQL也是它们自己专用的。<br />
处理性能        IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。DB2在高端应用具有过硬的技术，有众多超过1Tera -bytes数据量的用户实例。        SYBASE的优化器(OPTIMIZER)不能有效的支持复杂的查询(ComplexQueries)。应用程序中稍微复杂一些的SQL语句， SYBASE的优化器就无法妥善优化处理。SYBASE刚刚进入海量多处理器MPP的领域，缺乏这方面的经验及先例，Sybase大于一个TB数据量的客 户实例很少。<br />
并行能力        DB2的并行版支持位图索引和对象关系，因此，DB2有更好的扩展性和性能；        SYBASE数据库核心结构较陈旧，尤其在多处理器(SMP)的服务器上无法做到软硬件相配合的延伸与扩展(scale)，无法发挥多处理器的优势。其单 进程多线索的结构就无法象DB2的多进程多线索的结构更能有效地在SMP等机器上运行。<br />
高可用性        DB2可以用数据库及表空间两种粒度(granularity)对数据作备份与恢复(BACKUP及RESTORE)，并且备份可以在联机方式 (ONLINE)下进行，不影响多用户的同时使用。这使得DB2能真正地满足一天24小时、一星期七天的全天候使用。        SYBASE在BACKUP数据库及RESTORE数据库时，需要将系统转为单一用户模式以保证数据库中数据的完整性及一致性，并且在BACKUP之后， 要运行DBCC检查数据的一致性，这使得SYBASE数据库在可用性方面受到限制。<br />
数据完整与可管理性        IBMDB2中数据库可自动的维持两表间的一致性，无需再由DBA编程。        SYBASE在其数据库技术中引入RI(ReferentialIntegrity数据引用完整性)较晚，而且功能有限。例如，当表A中的列A是另一个表 B中列B的ForeignKey时，若要删掉表A中的一个记录，在SYBASE中是不允许的，只有通过触发器(Trigger)及存储过程 (StoredProcedure)，才能删掉表A中的一个记录，同时删掉表B中的相关记录，或把其值设置为NULL。<br />
异构平台支持        在异构的环境中，IBM数据库方案简单、更加无缝而且成本低；        Oracle的异构网关性能差，当访问异构数据库时，Oracle缺乏全局的优化，导致了过多的数据及网络传输。<br />
复制能力        DB2提供业界最佳效率的和最开放的复制方案；DB2支持对数据做预处理后再复制到远端，更有效率且网络流量少。        Sybase是立即复制交易，数据和网络流量大，据用户反映，Sybase的复制难以实施。SybaseAdaptiveServerAnywhere和 AdaptiveServerEnterprise之间的数据复制不是无缝连接，且要求整合工作。<br />
对电子商务支持        IBM的Java技术为业界所公认，DB2公认为电子商务基石。DB2提供的JDBC接口，还可用Java语言写储存过程和用户自定义函数        Oracle的Java技术仅局限于数据库和ERP应用。<br />
对商业智能支持        DB2WarehouseManager内置了数据仓库管理功能。IBM的商业智能解决方案中，拥有数据挖掘(IntelligentMiner)工具。         Sybase数据集市(datamart)没有提供仓库(Warehouse)管理与自动化的功能。<br />
软件质量与可靠性        DB2的软件开发实验室早在1994年便已通过ISO9000国际质量管理标准的验证与认可。故DB2的软件质量是所有数据库厂家中可靠性最高，故障率最 低的数据库。数据在IBM系统内被腐化(corrupted)不但是前所未闻，也是IBM传统用户所不可能忍受的。        SYBASE中的数据需要小心的维护，因为数据在数据库中有可能被“腐化(corrupted)”而无法继续使用。在没有事先修补的情形下，若这些数据被 备份了，则它们无法再被使用。为此SYBASE不得不为客户提供一个检查程序(DBCC)。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
<p>DB2与Informix比较</p>
<p>特性        DB2        Informix<br />
开放性/可移植性        IBMDB2UDB在各层面，从网络协议的支持到应用开发程序的编程接口，数据库存储程序及触发器，服务器之间的分布式运作，都是基于最新的国际标准，以 确保其开放性及移植性。        INFORMIX私有4GL编写的程序只能局限在INFORMIX上运行。<br />
处理性能        IBM发明了关系型数据库以及其优化技术，并不断发展，所以DB2在各种性能测试中均占领先地位。DB2在高端应用具有过硬的技术，有众多超过1Tera -bytes数据量的用户实例。        由于INFORMIX是以小型数据库起家，所以其产品设计到目前为止仍有许多小型数据库的限制。许多用户都曾遇到INFORMIX在数据存储、日志管理、 备份、恢复等方面的问题。Informix的扩展并行选项在支持多用户并发访问时存在困难。INFORMIX由于缺乏对大量数据的管理经验，所以其优化器 技术也不能针对大量数据做优化。<br />
并行能力        DB2EEE能利用HACMP自动接替故障节点正常工作，Informix做不到。DB2EEE已经有多年的历史，颁布了最高的TPC-D和TPC-H基 准测试值。DB2EEE支持动态位图索引完成Star-jion，从而既提高了性能又不增加数据库系统管理员的维护量。        在并行机SP上，当SP的高性能开关(switch)不能通讯时，InformixXPS数据库将处于瘫痪状态.当并行机的节点出现故障时， InformixXPS数据库将处于瘫痪状态，停机时间为4到24小时；InformixXPS没有备份和恢复。InformixXPS没有对查询的监控 机制，有可能某一个用户的一个查询耗尽系统的所有资源而不让其他用户使用。<br />
分布式数据库        DB2则是通过核心直接支持XA接口，并且提供许多其它厂商所没有的XA先进功能，例如工商银行山东分行的DB2应用就大量地使用了DB2XA接口，实现 了与CICS结合的大型联机事物处理系统(OLTP)来支持全省通存通兑等应用。        INFORMIX对异构分布式数据库的支持是通过X/OPEN、XA实现的。虽然INFORMIX声称它能够支持X/OPEN、XA接口，但只是在某几个 版本通过附加选件完成。并且在这方面，INFORMIX很少有使用先例，也没有这方面的技术支持。<br />
异构平台支持        在异构的环境中，IBM数据库方案简单、更加无缝而且成本低；        INFORMIX在数据库与数据库之间的连接方面很弱。例如INFORMIX没有连接其他数据库如bbORACLE、SYBASE等数据库的产品.<br />
复制能力        DB2提供业界最佳效率的和最开放的复制方案；DB2提供自动冲突检测和解决方法。        Informix只支持Informix数据库间的复制，若要同其它数据库相互复制，则必须购买第三方支持软件。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
成功案例<br />
DB2在国内、国际的用户群<br />
DB2的用户不胜枚举。它在全球有一百万以上的License和超过四千万的用户，它在全世界有一万一千个企业级用户。全世界70％公司的数据储存在IBM的数据库里。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/916.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Db2 日常实用操作积累</title>
		<link>http://www.evanjiang.net.cn/archives/913.html</link>
		<comments>http://www.evanjiang.net.cn/archives/913.html#comments</comments>
		<pubDate>Thu, 16 Apr 2009 12:40:03 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[db2]]></category>
		<category><![CDATA[IBM db2 数据库]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=913</guid>
		<description><![CDATA[<p>DB2数据库
1、Load 方法装入数据：
  export to tempfile of del select * from TABLENAME where not 清理条件；
  load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable；
  说明：
  在不相关的数据表export数据时，可以采取并发的形式，以提高效率；
  TABLENAME指待清理table的名称；
  modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;
  replace into对现数据库中的内容进行替换，即将现行的数据记录清理，替换为数据文件内容；
  nonrecoverable无日志方式装入；</p>
<p>2、查找当前的应用：
  db2 list application &#124;grep BTPDBS;</p>
<p>3、删除当前正在使用的application:
  db2 &#8220;force application (Id1,Id2,Id3)&#8221;
  [...]]]></description>
			<content:encoded><![CDATA[<p>DB2数据库<br />
1、Load 方法装入数据：<br />
  export to tempfile of del select * from TABLENAME where not 清理条件；<br />
  load from tempfile of del modified by delprioritychar replace into TABLENAME nonrecoverable；<br />
  说明：<br />
  在不相关的数据表export数据时，可以采取并发的形式，以提高效率；<br />
  TABLENAME指待清理table的名称；<br />
  modified by delprioritychar防止数据库记录中存在换行符,导致数据无法装入的情况;<br />
  replace into对现数据库中的内容进行替换，即将现行的数据记录清理，替换为数据文件内容；<br />
  nonrecoverable无日志方式装入；</p>
<p>2、查找当前的应用：<br />
  db2 list application |grep BTPDBS;</p>
<p>3、删除当前正在使用的application:<br />
  db2 &#8220;force application (Id1,Id2,Id3)&#8221;<br />
   Id1,Id2,Id3 是List显示的应用号；</p>
<p>4、查看当前应用号的执行状态：<br />
  db2 get snapshot for application agentid 299 |grep Row</p>
<p>5、查看数据库参数：<br />
  db2 get db cfg for <dbsname>  //当前数据库可以省略<br />
6、修改数据库的Log数据：<br />
  db2 update db cfg using <参数名> <参数值></p>
<p>7、Db2Stop Force的用法：<br />
  在进行Bind的时候出现如下错误：<br />
       SQL0082C  An error has occurred which has terminated processing.<br />
       SQL0092N  No package was created because of previous errors.<br />
       SQL0091N  Binding was ended with &#8220;3&#8243; errors and &#8220;0&#8243; warnings.<br />
   主要是表文件被加锁，不能继续使用；<br />
在进行stop的时候报错：db2stop<br />
   8/03/2005 21:46:53  0 0   SQL1025N  The database manager was not stopped because databases are still active.<br />
   SQL1025N  The database manager was not stopped because databases are still active.<br />
需要使用如下命令可以解决这个问题： db2stop force<br />
   08/03/2005 21:47:49     0   0   SQL1064N  DB2STOP processing was successful.<br />
   SQL1064N  DB2STOP processing was successful.<br />
然后启动数据库db2start,连接数据库db2s后，重新进行bind即可。<br />
<span id="more-913"></span><br />
8、缓冲池参数修改：<br />
   db2 alter bufferpool ibmdefaultbp size 10240<br />
  查看本表的数据内容如下：<br />
   db2 &#8220;select * from syscat.bufferpools&#8221;;  </p>
<p>9、DB2 日志处理：<br />
    DB2日志是以文件的形式存放在文件系统中，分为两种模式：循环日志和归档日志。当创建新数据库时，日志的缺省模式是循环日志。在这种模式下，只能实现数 据库的脱机备份和恢复。如果要实现联机备份和恢复，必须设为归档日志模式。 目前在综合业务系统中，设置的均是归档日志模式；其它系统（如事后监督、经营决策、中间业务等）一般都设置为循环日志模式。至于采用何种模式，可以通过修 改数据库配置参数（LOGRETAIN）来实现： 归档日志模式：db2 update db cfg for <dbname> using logretain on 注：改为on后，查看数据库配置参数logretain的值时，实际显示的是recovery。改变此参数后，再次连接数据库会显示数据库处于备份暂挂 （BACKUP PENDING）状态。这时，需要做一次对数据库的脱机备份（db2 backup db <dbname>），才能使数据库状态变为正常。 循环日志模式：db2 update db cfg for <dbname> using logretain off</p>
<p>10、Db2 日志处理：<br />
    必须按照以下正确的步骤进行操作： &#1048698; 要求必须使用DB2命令PRUNE进行清理，不建议使用rm命令删除。 &#1048698; 删除前应保证应用已停止（即联机已下来）。 &#1048698; 查看当前使用的日志文件目录及第一活动日志文件 &#1048766; 用 “db2 get db cfg for <dbname>”命令查看日志文件目录（Path to log files）参数，确定数据库当前使用的日志文件目录。 例如：Path to log files = /db2log/，说明DB2日志存放目录是/db2log &#1048766; 用 “db2 get db cfg for <dbname>”命令查看第一活动日志文件（First active log file）参数，该参数对应的日志文件之前的日志文件均为归档日志文件，如果确认没有用，可以删除。 例如：First active log file = S0015913.LOG，说明当前第一活动日志文件是S0015913.LOG。 &#1048698; 备份好要删除的归档日志 &#1048698; 删除归档日志 以应用用户（如BTP）登录，执行：<br />
$ db2 connect to <dbname><br />
$ db2 prune logfile prior to S???????.LOG<br />
注：S???????.LOG为查看到的第一活动日志文件。此命令可以将当前第一活动日志文件之前的归档日志文件全部删除。<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
11、如何清理db2diag.log文件<br />
    db2diag.log，是用来记录DB2数据库运行中的信息的文件。可以通过此文件，查看记录的有关DB2数据库详细的错误信息。此文件也是不断增大 的，需要定期进行清理。 可以通过查看实例的配置参数DIAGPATH，来确定db2diag.log文件是放在哪个目录下：db2 get dbm cfg 如果Diagnostic data directory path(DIAGPATH) = /home/db2inst1/sqllib/db2dump，则此文件是放在/home/db2inst1/sqllib/db2dump目录下。当文 件系统/home的使用率达到80%－90%左右时，应及时删除db2diag.log文件。 请按以下正确步骤操作： &#1048698; 确认应用（如BTP）、DB2已经停止。 &#1048698; 将原db2diag.log文件备份到其它文件系统下。 &#1048698; 删除db2diag.log文件。删除后，DB2会自动创建一个新的文件。</p>
<p>12、Load 操作<br />
   在进行load的时候<br />
   db2 &#8220;load from acmmst.txt of del modified by coldel| replace into acmmst nonrecoverable ”<br />
   由于数据不规范出现错误，强行中断以后，进行操作的时候出现如下错误：<br />
     SQL0668N  Operation not allowed for reason code &#8220;3&#8243; on table &#8220;BTP.ACMMST&#8221;.<br />
     SQLSTATE=57016<br />
   此时，进行反方向操作即可：<br />
   db2 &#8220;load from /dev/null of del terminate into acmmst nonrecoverable&#8221;。</p>
<p>   如果没有使用参数nonrecoverable，则会出现数据库状态不正确的情况，使用:<br />
     db2 list tablesapces show detail 查看状态，如果不是正常状态，则脱机状态进行备份即可。</p>
<p>两个表文件之间UPDATE的方法：<br />
   db2 &#8220;update cdmcrd set offset = (select cdmlsl.offset from cdmlsl where cdmlsl.crdno=cdmcrd.crdno) where cdmcrd.crdno in (select cdmlsl.crdno from cdmlsl)</p>
<p>13、多字段条件查询和修改：<br />
    表A中的字段有actno, cnlno,bal,pwd；表B中的字段为Actno，Cnlno，TxnAmt；目的是将A表中的bal修改为B表中的TxnAmt，命令：<br />
  db2 &#8220;update A set bal=(select txnamt from B where actno=A.actno and cnlno=A.Cnlno) where A.actno||A.cnlno in (select Actno||cnlno from B );</p>
<p>14、多条件匹配查询<br />
   查询某个表中条件是B？AAA的记录：<br />
  db2 &#8220;select * from A where actno like &#8216;B_AAA%&#8217;&#8221;.<br />
    查询数据中存在某些字符的记录：<br />
   db2 &#8220;select * from A where actno like &#8216;%-AAA%&#8221;.<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
15/数据库恢复的处理<br />
  进行数据库恢复的时候使用以下的命令：<br />
     restore db db1 to /tstdb2/catalog  into db newlogpath /tstdb2/db2log buffer 2048<br />
     replace existing redirect parallelism  16;<br />
     set tablespace containers for 1  using  (path &#8216;/tstdb2/db2tmp&#8217;);<br />
     set tablespace containers for 2  using<br />
            (device &#8216;/dev/rtstcontlv00&#8242; 2621440, device &#8216;/dev/rtstcontlv01&#8242; 2621440,<br />
             device &#8216;/dev/rtstcontlv02&#8242; 2621440, device &#8216;/dev/rtstcontlv03&#8242; 2621440 ) ;<br />
     restore db db1 continue;</p>
<p>恢复完成以后执行命令db2s时报如下的错误：<br />
P570:>db2s<br />
  SQL1117N  A connection to or activation of database &#8220;DB&#8221; cannot be made<br />
  because of ROLL-FORWARD PENDING.  SQLSTATE=57019<br />
  DB21034E  The command was processed as an SQL statement because it was not a<br />
  valid Command Line Processor command.  During SQL processing it returned:<br />
  SQL1024N  A database connection does not exist.  SQLSTATE=08003<br />
解决办法如下：<br />
P570:>db2 rollforward db db to end of logs and complete</p>
<p>                                Rollforward Status</p>
<p>Input database alias                   = db<br />
Number of nodes have returned status   = 1</p>
<p>Node number                            = 0<br />
Rollforward status                     = not pending<br />
Next log file to be read               =<br />
Log files processed                    =  -<br />
Last committed transaction             = 2005-11-20-10.59.23.000000</p>
<p>DB20000I  The ROLLFORWARD command completed successfully.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/913.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Debian lenny/etch 安装Oracle 9i (简要)指南</title>
		<link>http://www.evanjiang.net.cn/archives/900.html</link>
		<comments>http://www.evanjiang.net.cn/archives/900.html#comments</comments>
		<pubDate>Thu, 09 Apr 2009 13:43:25 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[debian  安装 oracle9i]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=900</guid>
		<description><![CDATA[<p>本(简要)指南基于X86系列,以debian 5.0为模板。 虚拟环境(ESXi 3.5)</p>
<p>前言：</p>
<p>由于项目需要，不得不在安装Oracle 9i 而不是10g .</p>
<p>内容：</p>
<p>1.基本条件.
安装debian 5.0 base-system, 然后安装gnome-desktop-environment. (KDE 也测试通过)</p>
<p>2.准备工作
  1)调整系统内核参数.
   根据ORACLE 官网的教程进行调整:
   ;</p>
<p>#############################################
cat >> /etc/sysctl.conf 





        2) 链接文件找不到的错误
        然后创建 /usr/lib/libstdc++-libc6.1-1.so.2 -> libstdc++-libc6.2-2.so.3 的链接
        否则出现1.error while loading [...]]]></description>
			<content:encoded><![CDATA[<p>本(简要)指南基于X86系列,以debian 5.0为模板。 虚拟环境(ESXi 3.5)</p>
<p>前言：</p>
<p>由于项目需要，不得不在安装Oracle 9i 而不是10g .</p>
<p>内容：</p>
<p>1.基本条件.<br />
安装debian 5.0 base-system, 然后安装gnome-desktop-environment. (KDE 也测试通过)</p>
<p>2.准备工作<br />
  1)调整系统内核参数.<br />
   根据ORACLE 官网的教程进行调整:<br />
   <http://www.oracle.com/technology/pub/articles/smiley_10gdb_install.html>;</p>
<p>#############################################<br />
cat >> /etc/sysctl.conf <<EOF<br />
        kernel.shmall = 2097152<br />
        kernel.shmmax = 536870912<br />
        kernel.shmmni = 4096<br />
        kernel.sem = 250 32000 100 128<br />
        fs.file-max = 65536 #debian 5.0 在ESXi下默认101858 当然是大点好阿<br />
        net.ipv4.ip_local_port_range = 1024 65000<br />
        net.core.rmem_default=262144<br />
        net.core.wmem_default=262144<br />
        net.core.rmem_max=262144<br />
        net.core.wmem_max=262144<br />
        EOF</p>
<p>        /sbin/sysctl -p #让其立即生效<br />
##############################################</p>
<p>   2)添加用户和组<br />
##############################################<br />
        /usr/sbin/groupadd oinstall<br />
        /usr/sbin/groupadd dba<br />
        /usr/sbin/useradd -m -g oinstall -G dba oracle</p>
<p>    passwd oracle  ##为用户oracle 设置密码<br />
    然后修改/etc/passwd 中oracle 使用bash  默认的使用sh.</p>
<p>##############################################<br />
<span id="more-900"></span><br />
        3)设置环境变量<br />
    添加以下内容到oracle的.bashrc中<br />
##############################################<br />
        export LC_ALL=en_US.UTF-8<br />
        export ORACLE_BASE=/u01/app/oracle<br />
        export ORACLE_HOME=$ORACLE_BASE/OEM #我们设置放置的位置。<br />
        export ORACLE_TERM=xterm #此处可修改为gnome-terminal 或其他你喜好的终端<br />
        export ORACLE_SID=test  #修改此处为你要设置的SID<br />
        export LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib<br />
        export PATH=$PATHORACLE_HOME/bin<br />
        export CLASSPATH=$ORACLE_HOME/JREORACLE_HOME/jlibORACLE_HOME/rdbms/jlibORACLE_HOME/network/jlib<br />
        #export LD_PRELOAD=/usr/lib/libcwait.so<br />
##############################################<br />
   4)下载Oracle 9i for linux 的安装盘.<br />
      保存于文件夹属性为oracleinstall 的文件夹下。<br />
      例如： /home/oracle/<br />
3. 解决安装过程中可能出现的问题.<br />
        1) 安装编译环境. gcc make 等<br />
        Oracle 9i 基于 gcc 2.95 需要<br />
    安装gcc-2.95 和 g++-2.95<br />
        把默认的gcc 的链接修改为 到gcc-2.95的链接<br />
        添加etch 的源，update.<br />
##############################################<br />
        aptitude install gcc-2.95 g++-2.95<br />
        ln -s /usr/bin/gcc-2.95 /usr/bin/gcc<br />
##############################################<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
        2) 链接文件找不到的错误<br />
        然后创建 /usr/lib/libstdc++-libc6.1-1.so.2 -> libstdc++-libc6.2-2.so.3 的链接<br />
        否则出现1.error while loading shared libraries:<br />
        libstdc++-libc6.1-1.so.2: cannot open shared object file: No such file or directory<br />
##############################################<br />
        ln -s /usr/lib/libstdc++-libc6.2-2.so.3  /usr/lib/libstdc++-libc6.1-1.so.2<br />
##############################################<br />
        3)libdb1-compat 这个是必须的否则会在安装过程中出错<br />
##############################################<br />
        aptitude install libdb1-compat<br />
##############################################<br />
        4)在vmware中安装的时候注意：把hostname 加到 /etc/hosts 中，不要用dhcp,否则出现个<br />
                Parameter &#8220;nodeinfo&#8221; = NO_VALUE 错误 (vmware server 1.x)<br />
        5)Unable to load native library: /tmp/OraInstallxxxx/jre/lib/i386/libjava.so: symbol __libc_wait, version GLIBC_2.0 not defined in                         file libc.so.6 with link time reference<br />
##############################################<br />
        取消/home/oracle/.bashrc中<br />
        #export LD_PRELOAD=/usr/lib/libcwait.so<br />
    处的&#8221;#&#8221;号<br />
    把附件中的libcwait.so.zip 解压然后 把libcwait.so文件拷贝到&#8221;/usr/lib/&#8221;中<br />
##############################################</p>
<p>4 安装<br />
   以用户oracle 的身份登录桌面.<br />
   进入放置Oracle 9i 的安装盘进行安装。<br />
   安装路径放在我们预先设置好的/u01/app/oracle/OEM 处即$ORACLE_HOME<br />
5 创建数据库</p>
<p>  我们用dbca 来创建数据库。<br />
  首先解决建库过程中出现的错误。</p>
<p>        1. rm $ORACLE_HOME/JRE (此JRE目录是1.1.8 的符号链接)<br />
        2. ln -s $ORACLE_BASE/jre/1.3.1 $ORACLE_HOME/JRE<br />
        3. cd $ORACLE_BASE/jre/1.3.1/bin<br />
        4. ln -s java jre<br />
        5. cd i386/native_threads/<br />
        6.ln -s java jre</p>
<p>  期间会需要给root权限给 root.sh 当你留空升级组的时候.<br />
  设置你的数据库名称，SID 我们设置为test.（合前面的SID相吻合）<br />
  忽略ORA-29807 ORA-01430 错误。<br />
  解决方法见：http://blog.csdn.net/grant85612/archive/2008/03/14/2182882.aspx</p>
<p>        访问数据库:<br />
        开个终端, sqlplus &#8220;sys/system as sysdba&#8221; 现在你已经能访问你的数据库了。<br />
    根据$ORACLE_HOME/network/admin/sample 中的范例设置你的监听端口等等。</p>
<p>        Web 方式:<br />
    启用web方式 $ORACLE_HOME/Apache/Apcache/bin/./apachectl start<br />
        $ORACLE_HOME/Apache/Apache/bin/http</p>
<p>http://hpserv01:7777/isqlplus</p>
<p>http://hpserv01:7777/isqlplusdba</p>
<p>        首先需要初始化用户密码:<br />
        $ cd $ORACLE_HOME/sqlplus/admin<br />
        $ORACLE_HOME/Apache/Apache/bin/htpasswd iplusdba.pw oracle</p>
<p>6.这次关于RAW 方面的没有测试， 已经在ESXi 3.5 上做了软的 Raw .<br />
先在把上次的 Etch 中添加raw 的一些东西贴出来，（未加整理）<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
创建裸设备<br />
首先确保有raw加载<br />
lsmod |grep raw<br />
如果无者加入： modprobe raw<br />
然后<br />
=============================================================================<br />
建立文件/etc/rawconfig，内容如下<br />
# This file and interface are deprecated.<br />
# Applications needing raw device access should open regular<br />
# block devices with O_DIRECT.<br />
# raw device bindings<br />
# format:  <rawdev> <major> <minor><br />
#          <rawdev> <blockdev><br />
# example: /dev/raw/raw1 /dev/sda1<br />
#          /dev/raw/raw2 8 5<br />
#/dev/raw/raw1 /dev/sdb1  #去掉&#8221;#&#8221; 修改成的需要的设备<br />
/dev/.static/dev/raw/raw1 /dev/sdb1<br />
#/dev/raw/raw2 /dev/sdb2<br />
#/dev/raw/raw3 /dev/sdb3<br />
#/dev/raw/raw4 /dev/sdb4<br />
=============================================================================<br />
建立文件/etc/init.d/rawdevices,内容如下：<br />
#!/bin/bash<br />
#<br />
# rawdevices       This shell script assignes rawdevices to block devices<br />
#<br />
# chkconfig: 345 56 44<br />
# description: This scripts assignes raw devices to block devices \<br />
#              (such as hard drive partitions). This is for the use \<br />
#              of applications such as Oracle. You can set up the \<br />
#              raw device to block device mapping by editing \<br />
#              the file /etc/sysconfig/rawdevices. Note that the use \<br />
#              of raw devices is deprecated, and applications should \<br />
#              open regular block devices with O_DIRECT instead.<br />
#<br />
# config: /etc/sysconfig/rawdevices</p>
<p>[ -f /sbin/raw ] || exit 0<br />
[ -f /etc/rawconfig ] || exit 0<br />
# Exit if the file just has the default comments.<br />
LC_ALL=C /bin/egrep -q -v &#8220;^ *#&#8221; /etc/rawconfig 2>/dev/null || exit 0</p>
<p>function assign_raw()<br />
{<br />
   LC_ALL=C egrep -v &#8216;^ *#&#8217; /etc/rawconfig |<br />
   while read RAW BLOCK; do<br />
     if [ -n "$RAW" -a -n "$BLOCK" ]; then<br />
         rawdirname=${RAW%/*}<br />
         if [ "$rawdirname" = "/dev" -a -d /dev/raw ]; then<br />
           echo $&#8221;  Please correct your /etc/rawconfig:&#8221;<br />
           echo $&#8221;     rawdevices are now located in the directory /dev/raw/ &#8221;<br />
           echo $&#8221;  If the command &#8216;raw&#8217; still refers to /dev/raw as a file.&#8221;<br />
           echo $&#8221;   you&#8217;ll have to upgrade your util-linux package&#8221;<br />
           exit 0<br />
         fi<br />
         if [ "$rawdirname" = "/dev/raw" -a -f /dev/raw ]; then<br />
           echo $&#8221;  Please correct your /etc/rawconfig:&#8221;<br />
           echo $&#8221;     rawdevices are now located in the directory /dev/raw/ &#8221;<br />
           echo $&#8221;  If the command &#8216;raw&#8217; still refers to /dev/raw as a file.&#8221;<br />
           echo $&#8221;   you&#8217;ll have to upgrade your util-linux package&#8221;<br />
           exit 0<br />
         fi</p>
<p>       echo &#8221;           $RAW  &#8211;>   $BLOCK&#8221;;<br />
       raw $RAW $BLOCK<br />
     fi<br />
   done<br />
}</p>
<p># See how we were called.<br />
case &#8220;$1&#8243; in<br />
  start)<br />
        # Assign devices<br />
        echo $&#8221;Assigning devices: &#8221;<br />
        assign_raw<br />
        echo $&#8221;done&#8221;<br />
        ;;<br />
  stop)<br />
        # No action to be taken here<br />
        ;;</p>
<p>  status)<br />
        ID=`id -u`<br />
        if [ $ID -eq 0 ]; then<br />
          raw -qa<br />
        else<br />
          echo $&#8221;You need to be root to use this command ! &#8221;<br />
        fi<br />
        ;;</p>
<p>  restart|reload)<br />
        $0 start<br />
        ;;</p>
<p>  *)<br />
        echo $&#8221;Usage: $0 {start|stop|status|restart}&#8221;<br />
        exit 1<br />
esac</p>
<p>exit 0<br />
================================================================================<br />
出现以下错误的解决方法<br />
Cannot open raw device &#8216;/dev/rawctl&#8217; (No such file or directory)<br />
mknod /dev/rawctl c 162 0<br />
cd /dev<br />
.MAKEDEV raw<br />
位置在这里/dev/.static/dev/raw/raw1 别弄错<br />
开机自动加载raw模块<br />
编辑/etc/modules<br />
添加raw</p>
<p>结语：<br />
    掌握是一个过程。</p>
<p>补充：<br />
出现该错误:<br />
/lib/i386/libawt.so: libXp.so.6: cannot open shared object file: No such file or directory</p>
<p>安装 libxp6 即可解决～</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/900.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>L i n u x 字符环境下安装ORACLE之关键步骤</title>
		<link>http://www.evanjiang.net.cn/archives/878.html</link>
		<comments>http://www.evanjiang.net.cn/archives/878.html#comments</comments>
		<pubDate>Mon, 06 Apr 2009 11:32:38 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[linux 字符界面 安装 oracle]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=878</guid>
		<description><![CDATA[<p> L i n u x 字符环境下安装之关健步骤 </p>
<p>编辑Response 文件
　　 这一步骤是字符界面装oracle的关键步骤
　　 到oracle 10g的安装目录下编辑response文件
　　 $cd /home/share/Oracle/Oracle10g_64bit/database/response/ 　　 可以看到oracle准备了6个response文件，实际上这些文件就是用来安装和配置oracle时的模板，分别是 custom.rsp dbca.rsp emca.rsp enterprise.rsp netca.rsp standard.rsp在这里挑了一个简单的response文件 enterprise.rsp，也可以根据实际情况去选用编辑其他几个response文件。
$cp custom.rsp myinst.rsp
　　 $vi myinst.rsp</p>
<p>修改几个地方，有几个不会改的，俺用## 两个#号注释，方便以后修改。</p>
<p>cd .. 转到安装文件所在目录
改好之后运行 ./runInstaller -silent -responseFile response/myinst.rsp
注意：最后面的 response/myinst.rsp 是相对路径。只要给出正确的应答文件就可以。</p>
<p>运行命令后 看到 屏幕上提示：
End of install （后面省略两百字，一共是四行），就表示文件已经复制完毕。按回车键，出现提示符。</p>
<p>然后，转到安装目录：
cd /opt/oracle/product/10.2.0/db_1
su
口令
./root.sh
根据提示按 Enter 就可以。
这样就在字符下成功安装。

后续工作
建数据库。</p>
<p>后 续 工 作</p>
<p>测试：
sqlplus： Oracle10g 数据库(手工)的开始和关闭</p>
<p>From diagnostic point of view it is [...]]]></description>
			<content:encoded><![CDATA[<p> L i n u x 字符环境下安装之关健步骤 </p>
<p>编辑Response 文件<br />
　　 这一步骤是字符界面装oracle的关键步骤<br />
　　 到oracle 10g的安装目录下编辑response文件<br />
　　 $cd /home/share/Oracle/Oracle10g_64bit/database/response/ 　　 可以看到oracle准备了6个response文件，实际上这些文件就是用来安装和配置oracle时的模板，分别是 custom.rsp dbca.rsp emca.rsp enterprise.rsp netca.rsp standard.rsp在这里挑了一个简单的response文件 enterprise.rsp，也可以根据实际情况去选用编辑其他几个response文件。<br />
$cp custom.rsp myinst.rsp<br />
　　 $vi myinst.rsp</p>
<p>修改几个地方，有几个不会改的，俺用## 两个#号注释，方便以后修改。</p>
<p>cd .. 转到安装文件所在目录<br />
改好之后运行 ./runInstaller -silent -responseFile response/myinst.rsp<br />
注意：最后面的 response/myinst.rsp 是相对路径。只要给出正确的应答文件就可以。</p>
<p>运行命令后 看到 屏幕上提示：<br />
End of install （后面省略两百字，一共是四行），就表示文件已经复制完毕。按回车键，出现提示符。</p>
<p>然后，转到安装目录：<br />
cd /opt/oracle/product/10.2.0/db_1<br />
su<br />
口令<br />
./root.sh<br />
根据提示按 Enter 就可以。<br />
这样就在字符下成功安装。<br />
<span id="more-878"></span><br />
后续工作<br />
建数据库。</p>
<p>后 续 工 作</p>
<p>测试：<br />
sqlplus： Oracle10g 数据库(手工)的开始和关闭</p>
<p>From diagnostic point of view it is very important to check sqlplus is<br />
functioning properly. If not then your installation is having problems.</p>
<p>从诊断的观点检查sqlplus是非常重要的，它在适当起作用。 如果不说明您的设置有问题。</p>
<p>oracle@sles10:~> sqlplus &#8220;connect /as sysdba&#8221;</p>
<p>Enter password:<br />
Connected to:<br />
&#8230;&#8230;&#8230;..<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
SQL> show rel<br />
SQL> show sga</p>
<p>SQL> exit<br />
oracle@sles10:~></p>
<p>1. To startup the database:<br />
sl10$ sqlplus /nolog<br />
SQL> connect / as sysdba<br />
SQL> startup<br />
2. To shutdown the database:<br />
sl10$ sqlplus /nolog<br />
SQL> connect / as sysdba<br />
SQL> shutdown</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
有时候安装不成功，想重新干净的安装，可以这么做：<br />
1 . 去除 /usr/local/bin 目录 下的 coraenv dbhome oraenv<br />
2 . 去除 /etc/oratab , /etc/oracle<br />
3 . 去掉安装 目录 /opt/oracle 目录下的 product admin oradata oralnventor 目录 。<br />
#####################################################################################################################</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/878.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>How to install LAMP (Apache, PHP and MySQL in Linux) using Yum</title>
		<link>http://www.evanjiang.net.cn/archives/868.html</link>
		<comments>http://www.evanjiang.net.cn/archives/868.html#comments</comments>
		<pubDate>Sun, 05 Apr 2009 13:19:58 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[lamp yum install]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=868</guid>
		<description><![CDATA[<p>Many friends ask me how to install LAMP (Linux, apache, php, mysql). There are many ways to install LAMP. Here i teach you the most easiest way to install LAMP using yum program in CentOS.
Below are the steps to install LAMP (Apache, PHP and MySQL in Linux) using Yum:-</p>
<p>•	Go to CentOS and download a copy [...]]]></description>
			<content:encoded><![CDATA[<p>Many friends ask me how to install LAMP (Linux, apache, php, mysql). There are many ways to install LAMP. Here i teach you the most easiest way to install LAMP using yum program in CentOS.<br />
Below are the steps to install LAMP (Apache, PHP and MySQL in Linux) using Yum:-</p>
<p>•	Go to CentOS and download a copy of CentOS Linux and install it (i’ll not go thru the how to install CentOS with you here)<br />
•	Once your CentOS is installed. Open a terminal (if you are using X-Window), and type yum install httpd and follow on screen instruction to install apache web server<br />
•	Once apache web server has been installed, type yum install php<br />
•	Once PHP installed successfully, type yum install mysql-servermysql<br />
•	Once everything finish, type service httpd start to start your apache web server, screen will show you if web server service successfully started<br />
•	type service mysqld start to start your mysql server<br />
•	Once both services is running, you can point your browser to http://localhost and you should see a welcome page from CentOS<br />
•	If you see that welcome page, you just installed everything successfull.<br />
•	To test if php is running, go to /var/www/html and create anindex.php file with the content below<br />
<?php phpinfo(); ?><br />
and refresh your browser again. If you see a purple PHP information page showing all the php configuration variables, then php is running now.<br />
•	Congratulation, you just successfully installed LAMP in your machine.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/868.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>今天解决 discuz7.0打开不正常并报错1146的问题。</title>
		<link>http://www.evanjiang.net.cn/archives/834.html</link>
		<comments>http://www.evanjiang.net.cn/archives/834.html#comments</comments>
		<pubDate>Thu, 19 Mar 2009 11:39:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>
		<category><![CDATA[freebsd unix]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[discuz7.0 Errno.: 1146 错误]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=834</guid>
		<description><![CDATA[<p>今天，因研习代码需要，需要安装搭建一个uchome环境，于是，就在http://www.dicuz.net里的下载频道下载uchome安装包。俺图方便，不要再过多时间去处理环境的问题，就直接下载UCenter1.5.0/UCenter Home1.5/Discuz! 7.0 集成安装包下载 ，下得是这个版本：简体中文GBK（UC1.5_UCH1.5_DZ7.0_SC_GBK.zip）不知为什么，下载好几个版本，在ubuntu 用unzip -x 来解压，总是报错。无法正确解压，俺以为是版本的问题，就在google搜了搜，搜到chinaz.com也有下载，就下载china.com所提供的集成安装包，在ubuntu 下直接解压。还是报错。真是奇怪。俺想是不是操作平台的缘故。就切换系统到winxp ,在winxp 下解压同样的集成安装包，发现一点问题都没有，很顺利，真是奇怪。难道是ubuntu8.10的问题？俺不管，就在winxp 直接传到服务器空间，然后安装这集成安装包，设文件权限那不用说，在mysql数据库后台建表，建账号，也不用说。做完这些后，就直接安装这集成安装包，安装时，很顺利，输入数据库名，账户，密码，然后切换到下一个页面，继续安装，很快就安装完，安装很顺利，没任何报错。安装完，就删掉整个install目录，然后进入uchome 首页，随便点击一下，没报错，但点击到discuz时。也就是尝试訪問bbs时，就报以下错误：
Discuz! info: MySQL Query Error</p>
<p>Time: 2009-3-19 10:54am
Script: /uchome/bbs/index.php</p>
<p>SQL: SELECT type FROM [Table]usergroups WHERE groupid=&#8217;7&#8242;
Error: Table &#8216;uchome.[Table]usergroups&#8217; doesn&#8217;t exist
Errno.: 1146</p>
<p>Similar error report has beed dispatched to administrator before.</p>
<p>到 http://faq.comsenz.com 搜索此错误的解决方案</p>
<p>凭直觉与经验，俺是认为discuz7.0所用的表损坏或者建立不正确，但为何不正确，并且因什么情况不正确，但与无法知道，但现在要解决DISCUZ7.0报错的问题，就只能死马当活马医！俺打开mysql后台数据库，发觉discuz7.0所在bbs表好像没什么异常，但报错信息，是明确说有表损坏或者不存在。那只能重建discuz7.0有关的表。那俺找到bbs 所在目录下面的discuz.sql, 打开discuz.sql，将里面的建表语句，复制，然后直接在phpmyadmin 里运行。运行没提示报错。这就说明sql运行正确。 那俺再刷新，提示cache没建好，需要再次刷新。那俺再刷新。再打开，终于可以正常看到discuz7的首页面。最后，这个问题得以解决。</p>
<p>事后，总结一上这个问题，是集成包没弄好？，还是什么原因？。为什么系统集成包的安装过程会没有正常运转discuz.sql这个建表语句。</p>
]]></description>
			<content:encoded><![CDATA[<p>今天，因研习代码需要，需要安装搭建一个uchome环境，于是，就在http://www.dicuz.net里的下载频道下载uchome安装包。俺图方便，不要再过多时间去处理环境的问题，就直接下载UCenter1.5.0/UCenter Home1.5/Discuz! 7.0 集成安装包下载 ，下得是这个版本：简体中文GBK（UC1.5_UCH1.5_DZ7.0_SC_GBK.zip）不知为什么，下载好几个版本，在ubuntu 用unzip -x 来解压，总是报错。无法正确解压，俺以为是版本的问题，就在google搜了搜，搜到chinaz.com也有下载，就下载china.com所提供的集成安装包，在ubuntu 下直接解压。还是报错。真是奇怪。俺想是不是操作平台的缘故。就切换系统到winxp ,在winxp 下解压同样的集成安装包，发现一点问题都没有，很顺利，真是奇怪。难道是ubuntu8.10的问题？俺不管，就在winxp 直接传到服务器空间，然后安装这集成安装包，设文件权限那不用说，在mysql数据库后台建表，建账号，也不用说。做完这些后，就直接安装这集成安装包，安装时，很顺利，输入数据库名，账户，密码，然后切换到下一个页面，继续安装，很快就安装完，安装很顺利，没任何报错。安装完，就删掉整个install目录，然后进入uchome 首页，随便点击一下，没报错，但点击到discuz时。也就是尝试訪問bbs时，就报以下错误：<br />
Discuz! info: MySQL Query Error</p>
<p>Time: 2009-3-19 10:54am<br />
Script: /uchome/bbs/index.php</p>
<p>SQL: SELECT type FROM [Table]usergroups WHERE groupid=&#8217;7&#8242;<br />
Error: Table &#8216;uchome.[Table]usergroups&#8217; doesn&#8217;t exist<br />
Errno.: 1146</p>
<p>Similar error report has beed dispatched to administrator before.</p>
<p>到 http://faq.comsenz.com 搜索此错误的解决方案</p>
<p>凭直觉与经验，俺是认为discuz7.0所用的表损坏或者建立不正确，但为何不正确，并且因什么情况不正确，但与无法知道，但现在要解决DISCUZ7.0报错的问题，就只能死马当活马医！俺打开mysql后台数据库，发觉discuz7.0所在bbs表好像没什么异常，但报错信息，是明确说有表损坏或者不存在。那只能重建discuz7.0有关的表。那俺找到bbs 所在目录下面的discuz.sql, 打开discuz.sql，将里面的建表语句，复制，然后直接在phpmyadmin 里运行。运行没提示报错。这就说明sql运行正确。 那俺再刷新，提示cache没建好，需要再次刷新。那俺再刷新。再打开，终于可以正常看到discuz7的首页面。最后，这个问题得以解决。</p>
<p>事后，总结一上这个问题，是集成包没弄好？，还是什么原因？。为什么系统集成包的安装过程会没有正常运转discuz.sql这个建表语句。</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/834.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Bugzilla + Oracle + Linux 安装笔记</title>
		<link>http://www.evanjiang.net.cn/archives/809.html</link>
		<comments>http://www.evanjiang.net.cn/archives/809.html#comments</comments>
		<pubDate>Sat, 14 Mar 2009 12:11:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>
		<category><![CDATA[oracle]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[Bugzilla + Oracle + Linux]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=809</guid>
		<description><![CDATA[<p>Bugzilla 3.2今天发布，该版本增加很多新的功能，其中重要的新功能包括Oracle数据库支持. 下面介绍Bugzilla + Oracle + Linux的安装过程笔记 </p>
<p>，详细请参照Bugzilla的安装文档. </p>
<p>== 准备工作 == </p>
<p>检查所需软件:
Perl 5.81 及以上
Oracle v10.02.0 及以上
Apache(httpd),sendmail等 </p>
<p>== Oracle的安装配置 == </p>
<p>Oracle需要v10.02.0以上版本支持，可以是企业版，也可以是XE版，具体用哪个版本，可以根据需要来确定. </p>
<p>Oracle安装文档到处都有，这里就不说，开始说Oracle的配置吧. </p>
<p>=== 1. 创建Tablespace(可选):=== </p>
<p>用sys 或者 system用户登陆sqlplus, 执行:
CREATE TABLESPACE bugs
    DATAFILE &#8216;/u01/oradata/bugzilla.dbf&#8217; SIZE 500M
    AUTOEXTEND ON NEXT 30M MAXSIZE UNLIMITED; </p>
<p>=== 2. 创建bugzilla用户: ===
用sys 或者 system用户登陆sqlplus, 执行(创建数据库用户bugs, 密码bugs):
CREATE USER [...]]]></description>
			<content:encoded><![CDATA[<p>Bugzilla 3.2今天发布，该版本增加很多新的功能，其中重要的新功能包括Oracle数据库支持. 下面介绍Bugzilla + Oracle + Linux的安装过程笔记 </p>
<p>，详细请参照Bugzilla的安装文档. </p>
<p>== 准备工作 == </p>
<p>检查所需软件:<br />
Perl 5.81 及以上<br />
Oracle v10.02.0 及以上<br />
Apache(httpd),sendmail等 </p>
<p>== Oracle的安装配置 == </p>
<p>Oracle需要v10.02.0以上版本支持，可以是企业版，也可以是XE版，具体用哪个版本，可以根据需要来确定. </p>
<p>Oracle安装文档到处都有，这里就不说，开始说Oracle的配置吧. </p>
<p>=== 1. 创建Tablespace(可选):=== </p>
<p>用sys 或者 system用户登陆sqlplus, 执行:<br />
CREATE TABLESPACE bugs<br />
    DATAFILE &#8216;/u01/oradata/bugzilla.dbf&#8217; SIZE 500M<br />
    AUTOEXTEND ON NEXT 30M MAXSIZE UNLIMITED; </p>
<p>=== 2. 创建bugzilla用户: ===<br />
用sys 或者 system用户登陆sqlplus, 执行(创建数据库用户bugs, 密码bugs):<br />
CREATE USER bugs<br />
    IDENTIFIED BY &#8220;bugs&#8221;<br />
    DEFAULT TABLESPACE bugs<br />
    TEMPORARY TABLESPACE TEMP<br />
    PROFILE DEFAULT;<br />
    &#8212; GRANT/REVOKE ROLE PRIVILEGES<br />
    GRANT CONNECT TO bugs;<br />
    GRANT RESOURCE TO bugs;<br />
    &#8212; GRANT/REVOKE SYSTEM PRIVILEGES<br />
    GRANT UNLIMITED TABLESPACE TO bugs;<br />
    GRANT EXECUTE ON CTXSYS.CTX_DDL TO bugs;<br />
<span id="more-809"></span><br />
===  Apache配置 ===<br />
配置ORACLE_HOME和LD_LIBRARY_PATH, 例如: </p>
<p>vi /etc/http/conf.d/bugzilla.conf </p>
<p>输入保存:<br />
# Set ORACLE_HOME and LD_LIBRARY_PATH<br />
SetEnv ORACLE_HOME /usr/lib/oracle/xe/app/oracle/product/10.2.0/server<br />
SetEnv LD_LIBRARY_PATH /usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib </p>
<p>== 安装Bugzilla 3.2 ==<br />
=== 下载并解压 ===<br />
下载Bugzilla3.2, http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-3.2.tar.gz<br />
cd /var/www/html/<br />
wget [url=http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-3.2.tar.gz]http://ftp.mozilla.org/pub/mozilla.org/webtools/bugzilla-3.2.tar.gz<br />
tar zxvf bugzilla-3.2.tar.gz<br />
mv bugzilla-3.2 bugzilla </p>
<p>=== checksetup.pl ===<br />
接下来执行checksetup.pl<br />
cd bugzilla<br />
./checksetup.pl </p>
<p>根据提示安装必须的perl模块, 在此之前你需要安装perl-CPAN<br />
yum install perl-CPAN<br />
Linux下面安装Bugzilla所需的perl模块，最简单的方式是利用Bugzilla提供的install-module.pl工具, 执行:<br />
/usr/bin/perl install-module.pl &#8211;all<br />
遇到所有提示，默认即可 </p>
<p>安装DBD::Oracle </p>
<p>export ORACLE_HOME=&#8221;/usr/lib/oracle/xe/app/oracle/product/10.2.0/server&#8221;<br />
export LD_LIBRARY_PATH=&#8221;/usr/lib/oracle/xe/app/oracle/product/10.2.0/server/lib&#8221;<br />
/usr/bin/perl install-module.pl DBD::Oracle </p>
<p>&#8221;说明: 如果Oracle数据库是在远程，则安装Bugzilla的机器上面必须安装[url=http://www.oracle.com/technology/software/tech/oci/instantclient/index.html]Oracle Instant Client或者Oracle Client，然后设置相应的ORACLE_HOME和LD_LIBRARY_PATH&#8221; </p>
<p>再次执行checksetup.pl, 产生localconfig文件:<br />
./checksetup.pl </p>
<p>编辑localconfig文件: </p>
<p>$db_driver = &#8216;oracle&#8217;;<br />
$db_host = &#8217;10.182.120.189&#8242;;              <-- 数据库IP<br />
$db_name = 'XE';                            <-- 数据库实例名SID<br />
$db_user = 'bugs';                        <-- 数据库用户名<br />
$db_pass = 'bugs'                         <-- 数据库密码 </p>
<p>配置完localconfig之后，再次运行checksetup.pl: </p>
<p>./checksetup.pl<br />
填入管理员信息: </p>
<p>Enter the e-mail address of the administrator: [email=admin@kk.com]admin@kk.com[/email]<br />
Enter the real name of the administrator: Admin<br />
Enter a password for the administrator account:<br />
Please retype the password to verify: </p>
<p>=== 配置Apache ===<br />
配置/etc/httpd/conf.d/bugzilla.conf, 加入 </p>
<p><Directory /var/www/html/bugzilla><br />
    AddHandler cgi-script .cgi<br />
    Options +Indexes +ExecCGI<br />
    DirectoryIndex index.cgi<br />
    AllowOverride Limit<br />
</Directory> </p>
<p>重新启动Apache<br />
service httpd restart </p>
<p>用管理员登陆 http://yourip/bugzilla/, 然后配置 urlbase </p>
<p>安装完成! </p>
<p>&#8221;说明：如果遇到类似下面的问题, 请关闭系统的selinux，然后重启系统：&#8221;<br />
&#8216;oracle&#8217; is not a valid choice for $db_driver in  localconfig: Can&#8217;t load &#8216;lib/i386-linux-thread-<br />
  multi/auto/DBD/Oracle/Oracle.so&#8217; for module DBD::Oracle:<br />
libclntsh.so.10.1: cannot enable executable stack as shared object requires: Permission denied at<br />
  /usr/lib/perl5/5.10.0/i386-linux-thread-<br />
multi/DynaLoader.pm line 203.<br />
at Bugzilla/DB/Oracle.pm line 41<br />
Compilation failed in require at Bugzilla/DB/Oracle.pm line 41.<br />
BEGIN failed&#8211;compilation aborted at Bugzilla/DB/Oracle.pm line 41.<br />
Compilation failed in require at (eval 30) line 3.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/809.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>BCB连接Informix数据库例程</title>
		<link>http://www.evanjiang.net.cn/archives/797.html</link>
		<comments>http://www.evanjiang.net.cn/archives/797.html#comments</comments>
		<pubDate>Fri, 13 Mar 2009 03:21:11 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[delphi/bcb]]></category>
		<category><![CDATA[informix]]></category>
		<category><![CDATA[sco unix]]></category>
		<category><![CDATA[BCB 连接 Informix数据库]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=797</guid>
		<description><![CDATA[<p>Informix Server是在SCO UNIX OPenserver 5.0.5下的IDS7.23
以下是几个配置文件：
ONCONFIG  文件：
    DBSERVERNAME    online7
    DBSERVERALIAS   online7_net
    NETTYPE         ipcshm,1,10,CPU
    NETTYPE         tlitcp,1,20,NET
sqlhosts文件:
    online7    [...]]]></description>
			<content:encoded><![CDATA[<p>Informix Server是在SCO UNIX OPenserver 5.0.5下的IDS7.23<br />
以下是几个配置文件：<br />
ONCONFIG  文件：<br />
    DBSERVERNAME    online7<br />
    DBSERVERALIAS   online7_net<br />
    NETTYPE         ipcshm,1,10,CPU<br />
    NETTYPE         tlitcp,1,20,NET<br />
sqlhosts文件:<br />
    online7     onipcshm    account     on_shm<br />
    online7_net ontlitcp    account1    sqlexec </p>
<p>在 /etc/hosts中<br />
    192.1.1.133     account account1<br />
最后在 /etc/services增加如下一行：<br />
    sqlexec     3070/tcp </p>
<p>Informix客户端使用Informix Cli 2.50 TD2，操作系统是Windows NT4 Service<br />
 Pack4<br />
首先安装Informix Cli,然后利用setnet32配置Infomrix的环境：<br />
在 Server Information:<br />
    Informix Server:online7_net<br />
    HostName   :    account1<br />
    ProtocolName:   onsoctcp<br />
    ServicesName:   sqlexec<br />
注：在NT中ServiceName可以是sqlexec的端口号，不过我用sqlexec不能连通，<br />
<span id="more-797"></span><br />
    只有利用端口号才能连通数据库服务器。<br />
在 Host Information:<br />
    Current Host:   account1<br />
    User Name:      myname<br />
    Password option:Password<br />
    Password:       mypasswd<br />
按有关手册介绍，在NT下需要将上述信息登记到系统注册表中，但设置程序并<br />
不会自动注册，需要运行$INFORMIXDIR/bin下的regcopy! </p>
<p>在环境设置项中Environment:<br />
    INFORMIXDIR=D:\informix<br />
    INFORMIXSERVER=online7_net </p>
<p>然后在系统文件中增加下面的内容：<br />
C:\WINNT\system32\drivers\etc\services (必须要与服务器上/etc/services文<br />
件中的内容<br />
一致)<br />
    sqlexec     3070/tcp </p>
<p>C:\WINNT\system32\drivers\etc\hosts<br />
    192.1.1.133    account1<br />
如果是windows95/98，以上两个文件应该在所安装目录下。 </p>
<p>最后可以利用BCB的BDE配置所需的数据库别名。<br />
注意一下在Configuration->Drivers->Native->Informix下的DLL32项中，<br />
我选择了SQLINF32.DLL，按BCB的说法SQLINF9.DLL是连Informix Online9.0以上<br />
的，<br />
而SQLINF32.DLL是连接Online7.x以下的；在databases项中，你就可以增加<br />
你所需的数据库别名。<br />
按以上步骤设置，应该是没有问题.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/797.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>mysql命令精华</title>
		<link>http://www.evanjiang.net.cn/archives/795.html</link>
		<comments>http://www.evanjiang.net.cn/archives/795.html#comments</comments>
		<pubDate>Thu, 12 Mar 2009 16:19:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[mysql]]></category>
		<category><![CDATA[mysql命令精华]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=795</guid>
		<description><![CDATA[<p>测试环境：mysql 5.0.45
【注：可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】</p>
<p>一、连接MYSQL。
格式： mysql -h主机地址 -u用户名 －p用户密码
1、连接到本机上的MYSQL。
首先打开DOS窗口，然后进入目录mysql\bin，再键入命令mysql -u root -p，回车后提示你输密码.注意用户名前可以有空格也可以没有空格，但是密码前必须没有空格，否则让你重新输入密码.
如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中，MYSQL的提示符是： mysql>
2、连接到远程主机上的MYSQL。假设远程主机的IP为：110.110.110.110，用户名为root,密码为345678。则键入以下命令：
mysql -h110.110.110.110 -u root -p 345678;（注:u与root之间可以不用加空格，其它也一样）
3、退出MYSQL命令： exit （回车）
二、修改密码。
格式：mysqladmin -u用户名 -p旧密码 password 新密码
1、给root加个密码345678。首先在DOS下进入目录mysql\bin，然后键入以下命令
mysqladmin -u root -password 345678
注：因为开始时root没有密码，所以-p旧密码一项就可以省略。</p>
<p>2、再将root的密码改为941340。
mysqladmin -u root -p ab12 password 941340
三、增加新用户。
（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符）
格式：grant select on 数据库.* to 用户名@登录主机 identified by “密码”
1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL，然后键入以下命令：
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;
但增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为，解决办法见2。

2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机），
这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问。
grant select,insert,update,delete on mydb.* to test2@localhost identified [...]]]></description>
			<content:encoded><![CDATA[<p>测试环境：mysql 5.0.45<br />
【注：可以在mysql中通过mysql> SELECT VERSION();来查看数据库版本】</p>
<p>一、连接MYSQL。<br />
格式： mysql -h主机地址 -u用户名 －p用户密码<br />
1、连接到本机上的MYSQL。<br />
首先打开DOS窗口，然后进入目录mysql\bin，再键入命令mysql -u root -p，回车后提示你输密码.注意用户名前可以有空格也可以没有空格，但是密码前必须没有空格，否则让你重新输入密码.<br />
如果刚安装好MYSQL，超级用户root是没有密码的，故直接回车即可进入到MYSQL中，MYSQL的提示符是： mysql><br />
2、连接到远程主机上的MYSQL。假设远程主机的IP为：110.110.110.110，用户名为root,密码为345678。则键入以下命令：<br />
mysql -h110.110.110.110 -u root -p 345678;（注:u与root之间可以不用加空格，其它也一样）<br />
3、退出MYSQL命令： exit （回车）<br />
二、修改密码。<br />
格式：mysqladmin -u用户名 -p旧密码 password 新密码<br />
1、给root加个密码345678。首先在DOS下进入目录mysql\bin，然后键入以下命令<br />
mysqladmin -u root -password 345678<br />
注：因为开始时root没有密码，所以-p旧密码一项就可以省略。</p>
<p>2、再将root的密码改为941340。<br />
mysqladmin -u root -p ab12 password 941340<br />
三、增加新用户。<br />
（注意：和上面不同，下面的因为是MYSQL环境中的命令，所以后面都带一个分号作为命令结束符）<br />
格式：grant select on 数据库.* to 用户名@登录主机 identified by “密码”<br />
1、增加一个用户test1密码为abc，让他可以在任何主机上登录，并对所有数据库有查询、插入、修改、删除的权限。首先用root用户连入MYSQL，然后键入以下命令：<br />
grant select,insert,update,delete on *.* to test1@”%” Identified by “abc”;<br />
但增加的用户是十分危险的，你想如某个人知道test1的密码，那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为，解决办法见2。<br />
<span id="more-795"></span><br />
2、增加一个用户test2密码为abc,让他只可以在localhost上登录，并可以对数据库mydb进行查询、插入、修改、删除的操作（localhost指本地主机，即MYSQL数据库所在的那台主机），<br />
这样用户即使用知道test2的密码，他也无法从internet上直接访问数据库，只能通过MYSQL主机上的web页来访问。<br />
grant select,insert,update,delete on mydb.* to test2@localhost identified by “abc”;<br />
如果你不想test2有密码，可以再打一个命令将密码消掉。<br />
grant select,insert,update,delete on mydb.* to test2@localhost identified by “”;<br />
下篇是MYSQL中有关数据库方面的操作。注意：你必须首先登录到MYSQL中，以下操作都是在MYSQL的提示符下进行的，而且每个命令以分号结束。</p>
<p>一、操作技巧<br />
1、如果你打命令时，回车后发现忘记加分号，你无须重打一遍命令，只要打个分号回车就可以。<br />
也就是说你可以把一个完整的命令分成几行来打，完后用分号作结束标志就OK。<br />
2、你可以使用光标上下键调出以前的命令。<br />
二、显示命令<br />
1、显示当前数据库服务器中的数据库列表：<br />
mysql> SHOW DATABASES;<br />
注意：mysql库里面有MYSQL的系统信息，我们改密码和新增用户，实际上就是用这个库进行操作。<br />
2、显示数据库中的数据表：<br />
mysql> USE 库名；<br />
mysql> SHOW TABLES;<br />
3、显示数据表的结构：<br />
mysql> DESCRIBE 表名;<br />
4、建立数据库：<br />
mysql> CREATE DATABASE 库名;<br />
5、建立数据表：<br />
mysql> USE 库名;<br />
mysql> CREATE TABLE 表名 (字段名 VARCHAR(20), 字段名 CHAR(1));<br />
6、删除数据库：<br />
mysql> DROP DATABASE 库名;<br />
7、删除数据表：<br />
mysql> DROP TABLE 表名；<br />
8、将表中记录清空：<br />
mysql> DELETE FROM 表名;<br />
9、显示表中的记录：<br />
mysql> SELECT * FROM 表名;<br />
10、往表中插入记录：<br />
mysql> INSERT INTO 表名 VALUES (”hyq”,”M”);<br />
11、更新表中数据：<br />
mysql-> UPDATE 表名 SET 字段名1=’a&#8217;,字段名2=’b’ WHERE 字段名3=’c&#8217;;<br />
12、用文本方式将数据装入数据表中：<br />
mysql> LOAD DATA LOCAL INFILE “D:/mysql.txt” INTO TABLE 表名;<br />
13、导入.sql文件命令：<br />
mysql> USE 数据库名;<br />
mysql> SOURCE d:/mysql.sql;<br />
14、命令行修改root密码：<br />
mysql> UPDATE mysql.user SET password=PASSWORD(’新密码’) WHERE User=’root’;<br />
mysql> FLUSH PRIVILEGES;<br />
15、显示use的数据库名：<br />
mysql> SELECT DATABASE();<br />
16、显示当前的user：<br />
mysql> SELECT USER();<br />
三、一个建库和建表以及插入数据的实例<br />
drop database if exists school; //如果存在SCHOOL则删除<br />
create database school; //建立库SCHOOL<br />
use school; //打开库SCHOOL<br />
create table teacher //建立表TEACHER<br />
(<br />
id int(3) auto_increment not null primary key,<br />
name char(10) not null,<br />
address varchar(50) default ‘深圳’,<br />
year date<br />
); //建表结束<br />
//以下为插入字段<br />
insert into teacher values(”,’allen’,&#8217;大连一中’,&#8217;1976-10-10′);<br />
insert into teacher values(”,’jack’,&#8217;大连二中’,&#8217;1975-12-23′);<br />
如果你在mysql提示符键入上面的命令也可以，但不方便调试。<br />
（1）你可以将以上命令原样写入一个文本文件中，假设为school.sql，然后复制到c:\\下，并在DOS状态进入目录\\mysql\\bin，然后键入以下命令：<br />
mysql -uroot -p密码 < c:\\school.sql<br />
如果成功，空出一行无任何显示；如有错误，会有提示。（以上命令已经调试，你只要将//的注释去掉即可使用）。<br />
（2）或者进入命令行后使用 mysql> source c:\\school.sql; 也可以将school.sql文件导入数据库中。<br />
四、将文本数据转到数据库中<br />
1、文本数据应符合的格式：字段数据之间用tab键隔开，null值用\\n来代替.例：<br />
3 rose 大连二中 1976-10-10<br />
4 mike 大连一中 1975-12-23<br />
假设你把这两组数据存为school.txt文件，放在c盘根目录下。<br />
2、数据传入命令 load data local infile “c:\\school.txt” into table 表名;<br />
注意：你最好将文件复制到\\mysql\\bin目录下，并且要先用use命令打表所在的库。<br />
五、备份数据库：（命令在DOS的\\mysql\\bin目录下执行）<br />
1.导出整个数据库<br />
导出文件默认是存在mysql\bin目录下<br />
mysqldump -u 用户名 -p 数据库名 > 导出的文件名<br />
mysqldump -u user_name -p123456 database_name > outfile_name.sql<br />
2.导出一个表<br />
mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名<br />
mysqldump -u user_name -p database_name table_name > outfile_name.sql<br />
3.导出一个数据库结构<br />
mysqldump -u user_name -p -d –add-drop-table database_name > outfile_name.sql<br />
-d 没有数据 –add-drop-table 在每个create语句之前增加一个drop table<br />
4.带语言参数导出<br />
mysqldump -uroot -p –default-character-set=latin1 –set-charset=gbk –skip-opt database_name > outfile_name.sql</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/795.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>centos下安装jdk15+ MySQL5+Apache22(worker+ssl)+PHP5+Resin3</title>
		<link>http://www.evanjiang.net.cn/archives/759.html</link>
		<comments>http://www.evanjiang.net.cn/archives/759.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 11:02:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[It Tips]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[resin]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[centos下安装jdk15+ MySQL5+Apache22(worker+ssl)+PHP5+Resin3]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=759</guid>
		<description><![CDATA[<p>系统：CentOS4.3</p>
<p>1、安装jdk1.5
修改jdk-1_5_0_07-linux-i586.bin为可执行：
#./jdk-1_5_0_07-linux-i586.bin进行安装，然后会在当前目录下解压，生成一个名为 jdk-1_5_0_07的目录
#mv jdk-1_5_0_07 /usr/local/jdk
安装ok后设置环境变量：
修改/etc/profile
增加如下内容：
JAVA_HOME=/usr/local/jdk
RESIN_HOME=/usr/local/resin
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:/usr/local/jdbc
export RESIN_HOME JAVA_HOME CLASSPATH
存盘退出。。。
source /etc/profile</p>
<p>2、安装openssl
解压openssl-0.9.8b.tar.gz
#tar zxvf openssl-0.9.8b.tar.gz
#cd openssl-0.9.8b
#./Configure
#make install

接下来安装相关应用软件：
1.MySQL5 </p>
<p>2.安装mysql5.0.18（源码包）
源码包可以在这个网址获得：</p>
<p>http://download.mysql.cn/src/2006/0208/62.html</p>
<p>所有这些操作需要root权限
安装开始：
1&#62;cd /home/ftpsite
2&#62;groupadd mysql&#8212;&#8212;&#8212;-添加mysql用户组,如果提示该组存在,则不用再加
3&#62;useradd -g mysql mysql&#8212;&#8211;加mysql用户,并把它归到mysql组,如果提示用户存在,则不用再加
4&#62;tar zxvf mysql-5.0.18.tar.tar
5&#62;cd mysql-5.0.18
6&#62;./configure &#8211;prefix=/usr/local/mysql
7&#62;make
8&#62;make install
9&#62;cp support-files/my-medium.cnf /etc/my.cnf
10&#62;cd /usr/local/mysql
11&#62;./bin/mysql_install_db
12&#62;chown -R root /usr/local/mysql
13&#62;chown -R mysql /usr/local/mysql/var
14&#62;chgrp -R root /usr/local/mysql
15&#62;./bin/mysqld_saft &#8211;user=mysql &#38;
16&#62;./bin/mysql
17&#62;mysql&#62;&#8212;&#8212;&#8212;&#8212;&#8212;经过第16步,你应该能看到mysql&#62;提示符,那么恭喜你安装初步成功</p>
<p>2.Apache22








下载httpd-2.0.55.tar.gz, php-5.0.5.tar.gz等二进制源码包
执行下列命令解压源码包
# tar -zxvf httpd-2.0.55.tar.gz
进入安装目录
# cd httpd-2.0.55
配置apache安装信息：
#./configure &#8211;enable-layout=Apache &#8211;enable-so &#8211;enable-ssl=shared &#8211;with-mpm=worker &#8211;with-ssl=/usr/share/ssl
执行make安装：
# make; make install
使用/usr/local/apache/bin/apachectl start 启动apache</p>
<p>#/usr/local/sbin/httpd -l
看看是否存在以下几个模块
core.c
worker.c
http_core.c
mod_so.c
现在是使用worker方式运行的apache。</p>
<p>OK，完成。</p>
<p>3.PHP5
安装php
tar -zxvf [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">系统：CentOS4.3</span></p>
<p><span style="color: #000000;">1、安装jdk1.5<br />
修改jdk-1_5_0_07-linux-i586.bin为可执行：<br />
#./jdk-1_5_0_07-linux-i586.bin进行安装，然后会在当前目录下解压，生成一个名为 jdk-1_5_0_07的目录<br />
#mv jdk-1_5_0_07 /usr/local/jdk<br />
安装ok后设置环境变量：<br />
修改/etc/profile<br />
增加如下内容：<br />
JAVA_HOME=/usr/local/jdk<br />
RESIN_HOME=/usr/local/resin<br />
CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$RESIN_HOME/lib:/usr/local/jdbc<br />
export RESIN_HOME JAVA_HOME CLASSPATH<br />
存盘退出。。。<br />
source /etc/profile</span></p>
<p><span style="color: #000000;">2、安装openssl<br />
解压openssl-0.9.8b.tar.gz<br />
#tar zxvf openssl-0.9.8b.tar.gz<br />
#cd openssl-0.9.8b<br />
#./Configure<br />
#make install<br />
<span id="more-759"></span><br />
接下来安装相关应用软件：<br />
1.MySQL5 </span></p>
<p><span style="color: #000000;">2.安装mysql5.0.18（源码包）<br />
源码包可以在这个网址获得：</p>
<p>http://download.mysql.cn/src/2006/0208/62.html</p>
<p>所有这些操作需要root权限<br />
安装开始：<br />
1&gt;cd /home/ftpsite<br />
2&gt;groupadd mysql&#8212;&#8212;&#8212;-添加mysql用户组,如果提示该组存在,则不用再加<br />
3&gt;useradd -g mysql mysql&#8212;&#8211;加mysql用户,并把它归到mysql组,如果提示用户存在,则不用再加<br />
4&gt;tar zxvf mysql-5.0.18.tar.tar<br />
5&gt;cd mysql-5.0.18<br />
6&gt;./configure &#8211;prefix=/usr/local/mysql<br />
7&gt;make<br />
8&gt;make install<br />
9&gt;cp support-files/my-medium.cnf /etc/my.cnf<br />
10&gt;cd /usr/local/mysql<br />
11&gt;./bin/mysql_install_db<br />
12&gt;chown -R root /usr/local/mysql<br />
13&gt;chown -R mysql /usr/local/mysql/var<br />
14&gt;chgrp -R root /usr/local/mysql<br />
15&gt;./bin/mysqld_saft &#8211;user=mysql &amp;<br />
16&gt;./bin/mysql<br />
17&gt;mysql&gt;&#8212;&#8212;&#8212;&#8212;&#8212;经过第16步,你应该能看到mysql&gt;提示符,那么恭喜你安装初步成功</span></p>
<p><span style="color: #000000;">2.Apache22<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
下载httpd-2.0.55.tar.gz, php-5.0.5.tar.gz等二进制源码包<br />
执行下列命令解压源码包<br />
# tar -zxvf httpd-2.0.55.tar.gz<br />
进入安装目录<br />
# cd httpd-2.0.55<br />
配置apache安装信息：<br />
#./configure &#8211;enable-layout=Apache &#8211;enable-so &#8211;enable-ssl=shared &#8211;with-mpm=worker &#8211;with-ssl=/usr/share/ssl<br />
执行make安装：<br />
# make; make install<br />
使用/usr/local/apache/bin/apachectl start 启动apache</span></p>
<p><span style="color: #000000;">#/usr/local/sbin/httpd -l<br />
看看是否存在以下几个模块<br />
core.c<br />
worker.c<br />
http_core.c<br />
mod_so.c<br />
现在是使用worker方式运行的apache。</span></p>
<p><span style="color: #000000;">OK，完成。</span></p>
<p><span style="color: #000000;">3.PHP5<br />
安装php<br />
tar -zxvf php-5.1.4.tar.gz<br />
cd php-5.1.4<br />
./configure &#8211;prefix=/usr/local/php5 (配置php的参数)<br />
&#8211;with-apxs2=/usr/local/apache2/bin/apxs<br />
&#8211;with-libxml-dir=/usr/local/lib<br />
&#8211;enable-sockets<br />
&#8211;with-mysql=/usr/local/mysql (mysql 的安装目录 就是那个解压后的目录)<br />
# make<br />
# make install<br />
将安装目录下的php.ini-dist文件改为php.ini存放的/usr/local/lib下。 </span></p>
<p><span style="color: #000000;">安装后修改httpd.conf文件：<br />
将httpd.conf中的loadmodule 最后一个刚加进去的php的#去掉<br />
在AddType application/x-gzip .gz .tgz后面加：<br />
AddType application/x-httpd-php .php<br />
AddType application/x-httpd-php-source .phps<br />
随后设置网站默认启动页允许为index.php，找到 DirectoryIndex这行，改为：<br />
DirectoryIndex index.html index.htm index.php</span></p>
<p><span style="color: #000000;">写一个phpinfo()测试一下就可以。 </span></p>
<p><span style="color: #000000;">4.安装phpMyAdmin</span></p>
<p><span style="color: #000000;">下面我们开始安装phpMyAdmin2.8.0.1! 这个文件应该从网上找的到！<br />
把下载好的源码放在/usr/local/www/data下面，解压！<br />
#tar xvzf phpMyAdmin.tar.gz<br />
进入phpmyadmin下的libraries 目录！<br />
修改 config.default.php:<br />
找到$cfg['PmaAbsoluteUri'] = &#8221;;<br />
修改成 $cfg['PmaAbsoluteUri'] = &#8216;http://你的IP/phpmyadmin&#8217;;<br />
找到$cfg['Servers'][$i]['auth_type'] = &#8216;config&#8217;; // Authentication method (config, http or cookie based)?<br />
$cfg['Servers'][$i]['user'] = &#8216;root&#8217;; // MySQL user<br />
$cfg['Servers'][$i]['password'] = &#8221;;<br />
写上你的Mysql用户名and密码！<br />
保存退出！<br />
然后用http://your/ IP/phpmyadmin访问！如果出现mysql管理页面，则安装成功，如果没有出现，请检查配制文件！</span></p>
<p><span style="color: #000000;">5．安装resin<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
安装resin：<br />
1）到http://www.caucho.com/下载resin-3.0.18.tar.gz，这个是目前的最新版本<br />
2）解压 生成目录 resin-3.0.18<br />
3）执行 mv resin-3.0.18 /usr/local/resin<br />
4）重新编译resin：<br />
./configure &#8211;with-apxs=/usr/local/apache2/bin/apxs &#8211;with-java-home=/usr/local/jdk/ &#8211;prefix=/usr/local/resin<br />
make &amp;&amp; make install &amp;&amp; make clean<br />
如果/etc/profile设置没有问题的话，该步骤能够正常运行</span></p>
<p><span style="color: #000000;">6．整合Apache和Resin<br />
1）修改/usr/local/apache/conf/httpd.conf<br />
增加：<br />
LoadModule caucho_module /usr/local/apache/libexec/mod_caucho.so<br />
ResinConfigServer localhost 6802<br />
CauchoStatus yes</p>
<p>SetHandler caucho-status</p>
<p>2）修改/usr/local/resin/conf/resin.conf<br />
修改以下片断：</p>
<p>3）<br />
重新启动 apache,<br />
/usr/local/apache/bin/apachectl start<br />
启动 resin<br />
/usr/local/resin/bin/httpd.sh start<br />
写一个简单的脚本可以测试，jsp执行是否成功。</span></p>
<p><span style="color: #000000;">7．Resin连接MySQL数据库</span></p>
<p><span style="color: #000000;">下载相相应的jbdc 驱动，俺下载的是:mysql-connector-java-3.1.12-bin.jar，将此文件放<br />
到/usr/local/resin/lib下!<br />
然后再写一个jsp连接mysql的jsp文件测试一下!</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/759.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Centos 5.0安装Oracle9208笔记</title>
		<link>http://www.evanjiang.net.cn/archives/755.html</link>
		<comments>http://www.evanjiang.net.cn/archives/755.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 10:59:36 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[Centos 5.0  安装  Oracle9208  笔记]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=755</guid>
		<description><![CDATA[<p>Linux as 2.6.18-8.EL5 #1 smp
一，解压缩Oracle9204的安装文件
1． Oracle 9iR2 (9.2.0)
(1) 简化过程（以oracle登录，释放安装文件,使用更少的磁盘空间，速度更快）
在安装LINUX时最好分一个区/orasetup,这样一来即使系统坏了,也只是重装系统,而无须重新拷贝数据库安装文件.
在Linux下使用ISO文件:
Mkdir /mnt/iso1 iso2 iso3
mount -t iso9660 -o loop linux_ora9_d1.iso /mnt/iso1/
mount -t iso9660 -o loop linux_ora9_d2.iso /mnt/iso2/
mount -t iso9660 -o loop linux_ora9_d3.iso /mnt/iso3/
umount /mnt/isoX
或
zcat ship_9204_linux_disk1.cpio.gz &#124; cpio –idmv &#38;&#38;
zcat ship_9204_linux_disk2.cpio.gz &#124; cpio –idmv &#38;&#38;
zcat ship_9204_linux_disk3.cpio.gz &#124; cpio –idmv
(2) 解包和解压过程中，自动创建了3个包含安装文件的目录：
Disk1
Disk2
Disk3
之后就可以安装Oracle9iR2了。
二，安装前的检查和准备工作；
1， 查看这些开发包是否已安装；
Centos 5.0完全安装.</p>
<p>安装需要的软件包和补丁包:
p4198954_21_linux.zip 在运行 runInstaller 之前打.
p3238244_9204_LINUX.zip 修复agent错误的补丁.
p2617419_210_GENERIC.zip 打3238244补丁所需要的补丁.
其中compat-oracle-rhel4和compat-libcwait可以在如下网站:</p>
<p>http://oss.oracle.com/projects/compat-oracle/files/RedHat/</p>
<p># rpm -qa [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">Linux as 2.6.18-8.EL5 #1 smp<br />
一，解压缩Oracle9204的安装文件<br />
1． Oracle 9iR2 (9.2.0)<br />
(1) 简化过程（以oracle登录，释放安装文件,使用更少的磁盘空间，速度更快）<br />
在安装LINUX时最好分一个区/orasetup,这样一来即使系统坏了,也只是重装系统,而无须重新拷贝数据库安装文件.<br />
在Linux下使用ISO文件:<br />
Mkdir /mnt/iso1 iso2 iso3<br />
mount -t iso9660 -o loop linux_ora9_d1.iso /mnt/iso1/<br />
mount -t iso9660 -o loop linux_ora9_d2.iso /mnt/iso2/<br />
mount -t iso9660 -o loop linux_ora9_d3.iso /mnt/iso3/<br />
umount /mnt/isoX<br />
或<br />
zcat ship_9204_linux_disk1.cpio.gz | cpio –idmv &amp;&amp;<br />
zcat ship_9204_linux_disk2.cpio.gz | cpio –idmv &amp;&amp;<br />
zcat ship_9204_linux_disk3.cpio.gz | cpio –idmv<br />
(2) 解包和解压过程中，自动创建了3个包含安装文件的目录：<br />
Disk1<br />
Disk2<br />
Disk3<br />
之后就可以安装Oracle9iR2了。<br />
二，安装前的检查和准备工作；<br />
1， 查看这些开发包是否已安装；<br />
Centos 5.0完全安装.</span></p>
<p><span style="color: #000000;">安装需要的软件包和补丁包:<br />
p4198954_21_linux.zip 在运行 runInstaller 之前打.<br />
p3238244_9204_LINUX.zip 修复agent错误的补丁.<br />
p2617419_210_GENERIC.zip 打3238244补丁所需要的补丁.<br />
其中compat-oracle-rhel4和compat-libcwait可以在如下网站:</p>
<p>http://oss.oracle.com/projects/compat-oracle/files/RedHat/</p>
<p># rpm -qa | grep ‘compat’<br />
三，创建数据库安装的准备工作；<br />
1，创建user/group；<br />
#groupadd dba<br />
#groupadd oinstall<br />
#useradd oracle -g oinstall -G dba<br />
#passwd oracle<br />
2，建立oracle安装文件夹；<br />
# mkdir -pv /u01/app/oracle/product/9.2.0<br />
# chown -R oracle.dba /u01/app<br />
# chmod -R 755 /u01/app/</span><br />
<span id="more-755"></span><br />
<span style="color: #000000;"># mkdir –pv /u01/cwdata<br />
# chmod 755 /u01/cwdata<br />
# chown oracle.dba /u01/cwdata<br />
# chown –R oracle.dba /orasetup<br />
# chmod 755 /orasetup</span></p>
<p><span style="color: #000000;">#mkdir /var/opt/oracle<br />
#chown oracle.dba /var/opt/oracle<br />
#chmod 755 /var/opt/oracle<br />
#修改/etc/hosts 把x.x.x.x servername加入<br />
把权限分配好</span></p>
<p><span style="color: #000000;">2， 配置环境变量；<br />
以root用户登录，设置root用户的环境打开.bash_profile文件，将如下内容加入：<br />
export ORACLE_BASE=/u01/app/oracle<br />
export ORACLE_HOME=/u01/app/oracle/product/9.2.0<br />
export PATH=$PATH ORACLE_HOME/bin ORACLE_HOME/Apache/Apache/bin<br />
export ORACLE_OWNER=oracle<br />
export ORACLE_SID=oradb<br />
export ORACLE_TERM=xterm<br />
#export LD_ASSUME_KERNEL=2.4.19<br />
export THREADS_FLAG=native<br />
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH ORACLE_HOME/lib<br />
export ORACLE_OEM_JAVARUNTIME=/u01/app/oracle/jre1.3.1<br />
export NLS_LANG=”American_america.zhs16gbk”<br />
# export NLS_LANG=&#8221;SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221;<br />
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data<br />
export DISPLAY=:0.0<br />
#export LANG=en_US<br />
#export GDM_LANG= en_US<br />
#export LC= en_US<br />
使用Oracle用户登陆:<br />
#su – oracle<br />
#cp /etc/sysconfig/i18n /home/oracle/.i18n 然后修改LANG=&#8221;en_US&#8221;<br />
$vi .bash_profile<br />
以下是配置文件的内容（其中红色字体为添加的内容）<br />
# .bash_profile</span></p>
<p><span style="color: #000000;"># Get the aliases and functions<br />
if [ -f ~/.bashrc ]; then<br />
. ~/.bashrc<br />
fi</span></p>
<p><span style="color: #000000;"># User specific environment and startup programs</span></p>
<p><span style="color: #000000;">PATH=$PATH HOME/bin<br />
#ORACLE_BASE 可以定位到盘阵上/data<br />
export ORACLE_BASE=/u01/app/oracle<br />
export ORACLE_HOME=/u01/app/oracle/product/9.2.0<br />
export PATH=$PATH ORACLE_HOME/bin ORACLE_HOME/Apache/Apache/bin<br />
export ORACLE_OWNER=oracle<br />
export ORACLE_SID=oradb<br />
export ORACLE_TERM=xterm<br />
#export LD_ASSUME_KERNEL=2.4.19<br />
export THREADS_FLAG=native<br />
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH ORACLE_HOME/lib<br />
export ORACLE_OEM_JAVARUNTIME=/u01/app/oracle/jre1.3.1<br />
export NLS_LANG=”American_america.zhs16gbk”<br />
# export NLS_LANG=&#8221;SIMPLIFIED CHINESE_CHINA.ZHS16GBK&#8221;<br />
export ORA_NLS33=$ORACLE_HOME/ocommon/nls/admin/data<br />
export DISPLAY=:0.0<br />
export LANG=en_US<br />
export GDM_LANG= en_US<br />
export LC= en_US<br />
export PATH<br />
unset USERNAME<br />
4， 设置系统参数；<br />
要检查内存空间，在命令行方式（bash环境）下执行如下命令：<br />
#grep MemTotal /proc/meminfo<br />
要检查交换空间，在命令行下执行如下命令：<br />
# grep SwapTotal /proc/meminfo</p>
<p>#su – root切换到root用户<br />
a) 修改#vi /etc/sysctl.conf, 以下是配置文件的内容（其中红色字体为添加的内容）：<br />
# Kernel sysctl configuration file for Red Hat Linux<br />
#<br />
# For binary values, 0 is disabled, 1 is enabled. See sysctl( and<br />
# sysctl.conf(5) for more details.</span></p>
<p><span style="color: #000000;"># Controls IP packet forwarding<br />
net.ipv4.ip_forward = 0</span></p>
<p><span style="color: #000000;"># Controls source route verification<br />
net.ipv4.conf.default.rp_filter = 1</span></p>
<p><span style="color: #000000;"># Controls the System Request debugging functionality of the kernel<br />
kernel.sysrq = 0</span></p>
<p><span style="color: #000000;"># Controls whether core dumps will append the PID to the core filename.<br />
# Useful for debugging multi-threaded applications.<br />
kernel.core_uses_pid = 1<br />
#512M<br />
kernel.shmmax = 536870912<br />
# 268435456 (256M)<br />
kernel.shmmni = 4096<br />
kernel.shmall = 2097152<br />
kernel.sem = 250 32000 100 128<br />
fs.file-max = 65536<br />
net.ipv4.ip_local_port_range = 1024 65000<br />
修改后运行#sysctl –p命令使得内核改变立即生效；<br />
译者注：一般情况下可以设置最大共享内存为物理内存的一半，如果物理内存是 2G，则可以设置最大共享内存为 1073741824，如上；如物理内存是 1G，则可以设置最大共享内存为 512 * 1024 * 1024 = 536870912；以此类推。）<br />
建议永久地增加 shmmax 设置。<br />
sem 4个参数依次为SEMMSL(每个用户拥有信号量最大数)；SEMMNS(系统信号量最大数)；SEMOPM(每次semopm系统调用操作数)；SEMMNI(系统辛苦量集数最大数).Shmmax 最大共享内存，官方文档建议是内存的1/2,Shmmni 最小共享内存 4096KB.Shmall 所有内存大小</span></p>
<p><span style="color: #000000;">B) 设置oracle对文件的要求：<br />
编辑文件：#vi /etc/security/limits.conf 加入以下语句：<br />
oracle 　　　soft 　　　nofile 　　 65536<br />
oracle 　　　hard 　　 nofile　　　65536<br />
oracle 　　　soft 　　　nproc 　　 16384<br />
oracle 　　　hard 　　 nproc 　　 16384</span></p>
<p><span style="color: #000000;">5，安装oracle补丁<br />
当你从 Oracle 9iR2 光盘执行 runInstaller 时，会出现错误信息：<br />
Error occurred during initialization of VM<br />
Unable to load native library:<br />
/tmp/OraInstall2003-10-25_03-14-57PM/jre/lib/i386<br />
/libjava.so symbol _libc_wait, version GLIBC_2.0 not<br />
defined in file libc.so.6 with link time reference<br />
为了解决 _libc_wait 符号问题，<br />
从http://oss.oracle.com/projects/compat-oracle/files/RedHat/ 下载补丁<br />
compat-libcwait-2.1-1.i386.rpm 为了应用这个补丁，可以运行：<br />
$su – root<br />
# cd /orasetup<br />
#ls compat*.rpm<br />
compat-libcwait-2.0-2.i386.rpm<br />
# rpm -Uvh compat*.rpm<br />
Preparing&#8230; ########################################### [100%]<br />
1: compat-libcwait-2.0-2.i386.rpm ##################################### [ 100%]</span></p>
<p><span style="color: #000000;">打p3006854_9204_LINUX.zip<br />
# unzip p3006854_9204_LINUX.zip<br />
# chmod +x 3006854/rhel3_pre_install.sh<br />
# 3006854/rhel3_pre_install.sh</span></p>
<p><span style="color: #000000;">创建链接<br />
# ln -s /usr/lib/libstdc++-libc6.2-2.so.3 /usr/lib/libstdc++-libc6.1-1.so.2</span></p>
<p><span style="color: #000000;">6,安装j2re<br />
Download the Java Runtime Enviroment (j2re-1_3_1_20-linux-i586.bin) from the Sun website. Keep in mind you need to download j2re1.3.1_11 or higher<br />
注意：下载jre jre1.3.1_2x 其中x为任意，但前面的版本不可改。</span></p>
<p><span style="color: #000000;">Login as root and make the the file executable and then execute it. When the JRE is exracted move the &#8220;jre1.3.1_20&#8243; di rectory to &#8220;/opt&#8221; directory.<br />
以root用户的登录执行下面的<br />
# chmod +x j2re-1_3_1_20-linux-i586.bin<br />
# ./j2re-1_3_1_20-linux-i586.bin<br />
# mv jre1.3.1_20 /u01/app/oracle/ jre1.3.1<br />
四，开始安装oracle9iR2<br />
（一）开始安装：<br />
1.以oracle用户登录系统，进行Oracle的安装：<br />
$ cd Disk1<br />
$ ./runInstaller过一会儿就会出现Oracle的安装界面，如下图所示：<br />
中间部分省略<br />
&#8230;&#8230;&#8230;<br />
16,安装完后打补丁：<br />
切换到root：#su – root 首先安装 opatch.<br />
#cd /orasetup<br />
#unzip p2617419_210_GENERIC.zip<br />
Archive: p2617419_210_GENERIC.zip<br />
creating: OPatch/<br />
creating: OPatch/docs/<br />
inflating: Opatch/docs/FAQ<br />
&#8230;&#8230;<br />
inflating: README.txt<br />
#export PATH=$PATH:/orasetup/ebf/OPatch:/sbin<br />
(修改PATH时要要包括解压缩出来的Opatch 和 sbin目录)<br />
# unzip p3238244_9204_LINUX.zip<br />
# cd 3238244<br />
# opatch apply<br />
PERL5LIB=/u01/app/oracle/product/9.2.0/Apache/perl/lib/5.00503:/soft/oracle9i/OPatch/perl_modules; export PERL5LIB<br />
/u01/app/oracle/product/9.2.0/Apache/perl/bin/perl /soft/oracle9i/OPatch/opatch.pl apply<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
OPatch Version 1.0.0.0.46<br />
Perl Version 5.00503</span></p>
<p><span style="color: #000000;">Oracle Home = /u01/app/oracle/product/9.2.0<br />
Location of Oracle Inventory = /u01/app/oracle/oraInventory<br />
Oracle Universal Installer shared library = /u01/app/oracle/oui/bin/linux/liboraInstaller.so<br />
Path to Java = /u01/app/oracle/jre/1.3.1/bin/java<br />
Location of Oracle Inventory Pointer = /etc/oraInst.loc<br />
Location of Oracle Universal Installer components = /u01/app/oracle/oui<br />
Required Jar File under Oracle Universal Installer = lib/OraInstaller.jar</span></p>
<p><span style="color: #000000;">Please shut down Oracle instances running out of this ORACLE_HOME<br />
(Oracle Home = /u01/app/oracle/product/9.2.0)<br />
Is this system ready for updating?<br />
Please respond Y|N &gt;<br />
y<br />
Patching&#8230;<br />
Updating inventory&#8230;<br />
/soft/oracle9i/OPatch/opatch.pl version: 1.0.0.0.46<br />
Copyright (c) 2001,2002,2003 Oracle Corporation. All Rights Reserved.</span></p>
<p><span style="color: #000000;">OPatch succeeded.<br />
如果提示HOME变量错误可执行语句：<br />
#export ORACLE_BASE=/u01/app/oracle<br />
#export ORACLE_HOME=/u01/app/oracle/product/9.2.0<br />
出现success的提示就全部安装成功.</span></p>
<p><span style="color: #000000;">补丁打完后，还要relinked一个.mk文件，切换到oracle用户窗口<br />
cd $ORACLE_HOME/network/lib<br />
make –f ins_oemagent.mk install<br />
之后就可以启动Agent服务了.</span></p>
<p><span style="color: #000000;">17, 最后执行 #dbca 建oracle数据库</span></p>
<p><span style="color: #000000;">当你执行 dbca 时，会出现错误信息：(参考 我的的Fedora 7最新安装Oracle9204手记)<br />
/u01/app/oracle/jre/1.1.8/bin/../lib/i686/green_threads/libzip.so: symbol errno, version GLIBC_2.0 not defined in file libc.so.6 with link time reference (libzip.so)<br />
Unable to initialize threads: cannot find class java/lang/Thread<br />
Could not create Java VM<br />
可以运行：<br />
#su &#8211; oracle<br />
$cd /u01/app/oracle/product/9.2.0<br />
$rm JRE<br />
$ln -s /u01/app/oracle/jre1.3.1 JRE<br />
$su -<br />
# cd /u01/app/oracle/product/9.2.0/JRE/bin<br />
# ln -s java jre<br />
# cd i386/native_threads<br />
# ln -s java jre</span></p>
<p><span style="color: #000000;">&#8230;&#8230;..</span></p>
<p><span style="color: #000000;">21，点击OK，然后退出即可,正常登陆并启动数据库的操作。<br />
[oracle@oracle oracle]$ lsnrctl start<br />
[oracle@oracle oracle]$ sqlplus /nolog<br />
SQL*Plus: Release 9.2.0.0 &#8211; Production on Sat Mar 12 22:58:53 2005<br />
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.<br />
SQL&gt; connect / as sysdba<br />
Connected.<br />
SQL&gt; shutdown immediate 关闭数据库<br />
Database closed.<br />
Database dismounted.<br />
ORACLE instance shut down.<br />
SQL&gt; startup; 启动数据库<br />
ORACLE instance started.<br />
Total System Global Area 236000356 bytes<br />
Fixed Size 451684 bytes<br />
Variable Size 201326592 bytes<br />
Database Buffers 33554432 bytes<br />
Redo Buffers 667648 bytes<br />
Database mounted.<br />
Database opened.</span></p>
<p><span style="color: #000000;">22, 数据库创建完成后，修改/etc/oratab，把oradb那一行最后的N改成Y，然后执行dbstart启动数据库数据库可能无法启动，报告Can’t find init file …的错误，需要复制一个初始化文件:<br />
cp /u01/app/oracle/admin/oradb/pfile/ initoradb.ora* /u01/app/oracle/product/9.2.0/dbs/initoradb.ora<br />
重新执行dbstart就可以了。<br />
为了方便管理，可以写一个启动脚本ora9i：<br />
以root身份进入，编写以下脚本：</span></p>
<p><span style="color: #000000;">#!/bin/bash<br />
#start and stop the oracle instance<br />
# chkconfig –level 5 &#8211;add ora9i<br />
#chkconfig: 345 91 19<br />
# description: starts the oracle listener and instance</span></p>
<p><span style="color: #000000;">export ORACLE_HOME=&#8221;/u01/app/oracle/product/9.2.0&#8243;<br />
export PATH=$ORACLE_HOME/bin ORACLE_HOME/Apache/Apache/bin PATH<br />
export ORACLE_OWNER=&#8221;oracle&#8221;<br />
export ORACLE_SID=oradb</span></p>
<p><span style="color: #000000;">if [ ! -f $ORACLE_HOME/bin/dbstart -o ! -d $ORACLE_HOME ]<br />
then<br />
echo &#8220;oracle startup:cannot start&#8221;<br />
exit 1<br />
fi</span></p>
<p><span style="color: #000000;">case &#8220;$1&#8243; in<br />
start)<br />
#startup the listener and instance<br />
echo -n &#8220;oracle startup: &#8221;<br />
su &#8211; $ORACLE_OWNER -c &#8220;$ORACLE_HOME/bin/lsnrctl start&#8221;<br />
su &#8211; $ORACLE_OWNER -c $ORACLE_HOME/bin/dbstart<br />
touch /var/lock/subsys/oracle<br />
echo &#8220;finished&#8221;<br />
;;<br />
stop)<br />
# stop listener, apache and database<br />
echo -n &#8220;oracle shutdown:&#8221;<br />
su &#8211; $ORACLE_OWNER -c &#8220;$ORACLE_HOME/bin/lsnrctl stop&#8221;<br />
su &#8211; $ORACLE_OWNER -c $ORACLE_HOME/bin/dbshut<br />
rm -f /var/lock/subsys/oracle<br />
echo &#8220;finished&#8221;<br />
;;<br />
reload|restart)<br />
$0 stop<br />
$0 start<br />
;;<br />
*)<br />
echo &#8220;Usage: ora9i [start|stop|reload|restart]&#8221;<br />
exit 1</span></p>
<p><span style="color: #000000;">esac<br />
exit 0<br />
注意:如果 cat –v ora9i 可以看到文件每行结尾有^M<br />
去除^M的脚本为:<br />
#sed &#8216;s/.$//&#8217; ora9i &gt;ora9x<br />
#mv ora9x ora9i<br />
或</span></p>
<p><span style="color: #000000;">#mv ora9i ora9x<br />
# dos2unix ora9x ora9i<br />
存为ora9i后，然后用chmod a+x ora9,即可在以后以root身份运行/etc/rc.d/init.d/ora9i start |stop 来管理oracle的启动和停止了。如果要将这个脚本加入到系统中使其可开机运行，那么要运行以下命令：<br />
#chkconfig –add ora9i<br />
#chkconfig ora9i on<br />
#chkconfig –list ora9i</span></p>
<p><span style="color: #000000;">也可自启动oracle9i!<br />
或者可在/etc/rc.d/rc.local中加入如下：<br />
su &#8211; oracle -c &#8220;/u01/app/oracle/product/9.2.0/bin/lsnrctl start&#8221;<br />
su &#8211; oracle -c &#8220;/u01/app/oracle/product/9.2.0/bin/dbstart start&#8221;</span></p>
<p><span style="color: #000000;">添加listener.ora, tnsnames.ora<br />
#cd $ORACLE_HOME/network/admin<br />
#vi listener.ora &#8211;网络监听<br />
LISTENER =<br />
(DESCRIPTION =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))<br />
)</span></p>
<p><span style="color: #000000;">#vi tnsnames.ora &#8211;本地管理器所用<br />
ORADB_hostname =<br />
(DESCRIPTION =<br />
(ADDRESS_LIST =<br />
(ADDRESS = (PROTOCOL = TCP)(HOST = hostname)(PORT = 1521))<br />
)<br />
(CONNECT_DATA =<br />
(SID = oradb)<br />
(SERVER = DEDICATED)<br />
)<br />
)</span></p>
<p><span style="color: #000000;">23,<br />
关于数据库删除重新安装的问题:<br />
把ORACLE安装目录删除及/etc/ora*.*删除就行了<br />
#rm –f /etc/ora*.*<br />
或#dbca 删除数据后,再建数据,如果重新启动后,不能自动启动oracle就<br />
#vi /etc/oratab<br />
修改<br />
*:/u01/app/oracle/product/9.2.0:Y<br />
oradb:/u01/app/oracle/product/9.2.0:Y<br />
24,关于在LINUX中运行管理软件<br />
25,升级oracle9i为9.2.0.8<br />
$ lsnrctl stop<br />
$dbshut<br />
# unzip p4547809_92080_LINUXfor_AS4.zip<br />
#cd Disk1<br />
$./runinstall<br />
Starting Oracle Universal Installer&#8230;<br />
Checking installer requirements&#8230;<br />
Checking operating system version: must be SuSE-7, redhat-2.1AS, redhat-2.1, UnitedLinux-1.0, redhat-3, redhat-4, SuSE-8 or SuSE-9<br />
Failed &lt;&lt;&lt;&lt;<br />
Exiting Oracle Universal Installer, log for this session can be found at /u01/app/oracle/oraInventory/logs/installActions2008-03-23_03-15-18PM.log $su – </span></p>
<p><span style="color: #000000;">#cd /Disk1/install<br />
#vi oraparam.ini (添加红色的)<br />
[Certified Versions]<br />
#You can customise error message shown for failure through CERTIFIED_VERSION_FAILURE_MESSAGE<br />
Solaris=5.6,5.7,5.8,5.9<br />
Linux=SuSE-7,redhat-2.1AS,redhat-2.1,UnitedLinux-1.0,redhat-3,redhat-4,redhat-5,SuSE-8,SuSE-9<br />
HPUX=B.11.11<br />
Decunix=V5.1A,V5.1<br />
AIX=5.1.0.0<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
[Linux-redhat-4.0-optional]<br />
TEMP_SPACE=80<br />
SWAP_SPACE=150<br />
MIN_DISPLAY_COLORS=256</span></p>
<p><span style="color: #000000;">[Linux-redhat-5.0-optional]<br />
TEMP_SPACE=80<br />
SWAP_SPACE=150<br />
MIN_DISPLAY_COLORS=256</span></p>
<p><span style="color: #000000;">&#8230;&#8230;.</span></p>
<p><span style="color: #000000;">升级后把 listener.ora .,tnsnames.ora拷贝到/u01/app/oracle/product/9.2.0/network/admin<br />
下,并修改对应的(HOST = hostname).</span></p>
<p><span style="color: #000000;">[root@mail 9.2.0]# service ora9i start<br />
oracle startup:<br />
LSNRCTL for Linux: Version 9.2.0.8.0 &#8211; Production on 18-JAN-2008 19:56:44<br />
Copyright (c) 1991, 2006, Oracle Corporation. All rights reserved.<br />
Starting /u01/app/oracle/product/9.2.0/bin/tnslsnr: please wait&#8230;<br />
TNSLSNR for Linux: Version 9.2.0.8.0 &#8211; Production<br />
System parameter file is /u01/app/oracle/product/9.2.0/network/admin/listener.ora<br />
Log messages written to /u01/app/oracle/product/9.2.0/network/log/listener.log<br />
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mail.domain.com)(PORT=1521)))<br />
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=mail)(PORT=1521)))<br />
STATUS of the LISTENER<br />
&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
Alias LISTENER<br />
Version TNSLSNR for Linux: Version 9.2.0.8.0 &#8211; Production<br />
Start Date 18-JAN-2008 19:56:44<br />
Uptime 0 days 0 hr. 0 min. 0 sec<br />
Trace Level off<br />
Security OFF<br />
SNMP OFF<br />
Listener Parameter File /u01/app/oracle/product/9.2.0/network/admin/listener.ora<br />
Listener Log File /u01/app/oracle/product/9.2.0/network/log/listener.log<br />
Listening Endpoints Summary&#8230;<br />
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=mail.domain.com)(PORT=1521)))<br />
The listener supports no services<br />
The command completed successfully</span></p>
<p><span style="color: #000000;">SQL*Plus: Release 9.2.0.8.0 &#8211; Production on Fri Jan 18 19:56:45 2008</span></p>
<p><span style="color: #000000;">Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.</span></p>
<p><span style="color: #000000;">SQL&gt; Connected to an idle instance.<br />
SQL&gt; ORACLE instance started.</span></p>
<p><span style="color: #000000;">Total System Global Area 235999648 bytes<br />
Fixed Size 450976 bytes<br />
Variable Size 201326592 bytes<br />
Database Buffers 33554432 bytes<br />
Redo Buffers 667648 bytes<br />
Database mounted.<br />
Database opened.<br />
SQL&gt; Disconnected from Oracle9i Enterprise Edition Release 9.2.0.8.0 &#8211; Production<br />
With the Partitioning, OLAP and Oracle Data Mining options<br />
JServer Release 9.2.0.8.0 &#8211; Production</span></p>
<p><span style="color: #000000;">Database &#8220;oradb&#8221; warm started.<br />
Finished</span></p>
<p><span style="color: #000000;">#oemapp<br />
Usage: oemapp<br />
The installed applications are: cpta, cp, ocm, worksheet, topsess, oemutil, dbastudio, console, lmviewer, esm, esmsrv, jdbctest, opm, txtmgr, sdoadvisor, ocmcli, pm, dataguard</span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/755.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>CentOS 4.4下安装Oracle 10g</title>
		<link>http://www.evanjiang.net.cn/archives/752.html</link>
		<comments>http://www.evanjiang.net.cn/archives/752.html#comments</comments>
		<pubDate>Fri, 06 Mar 2009 10:56:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[oracle]]></category>
		<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[CentOS 4.4下 安装 Oracle 10g]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=752</guid>
		<description><![CDATA[<p>一、下载软件
OracleDatabase10gRelease2 (10.2.0.1) </p>
<p>下载后可采用
解压命令：unzip 10201_database_linux32.zip </p>
<p>二、 设置核心参数
1、在/etc/sysctl.conf文件中加入下列行：
vi /etc/sysctl.conf </p>
<p>kernel.shmall =2097152
kernel.shmmax =2147483648
kernel.shmmni =4096
kernel.sem =25032000100128
fs.file-max =65536
net.ipv4.ip_local_port_range =102465000
net.core.rmem_default=262144
net.core.rmem_max=262144
net.core.wmem_default=262144
net.core.wmem_max=262144 </p>
<p>2、运行下列命令使修改后的内核参数生效
/sbin/sysctl –p

3、在/etc/security/limits.conf文件中加入下列行：
*softnproc2047
*hardnproc16384
*softnofile1024
*hardnofile65536 </p>
<p>4、在/etc/pam.d/login文件中加入下列行：
sessionrequired /lib/security/pam_limits.so </p>
<p>5、检查下列包： 若没有安装就要装上否则会安装错误无法继续
本人是采用DVD的都在一张盘上，如果你是使用CD 的话，这些包是分布在234三张盘上的</p>
<p>Rpm –qa &#124; grep compat</p>
<p>setarch-1.6-1.i386.rpm
compat-libstdc++-33-3.2.3-47.3.i386.rpm
make-3.80-5.i386.rpm
glibc-2.3.4-2.i386.rpm
openmotif-2.2.3-6.RHEL4.2.i386.rpm
compat-db-4.1.25-9.i386.rpm
libaio-0.3.102-1.i386.rpm
gcc-3.4.3-9.EL4.i386.rpm
compat-gcc-32-3.2.3-47.3.i386.rpm
compat-gcc-32-c++-3.2.3-47.3.i386.rpm </p>
<p>三、创建下列组和用户








groupaddoinstall
groupadddba
groupaddoper
useradd -goinstall -Gdbaoracle
passwdoracle </p>
<p>2.创建安装oracle的目录
mkdir -p /u01/app/oracle/product/10.2.0/db_1
mkdir -p /u02/oradata
chown -Roracle.oinstall /u01 /u02/oradata </p>
<p>说明：/u01/app/oracle/product/10.2.0/db_1 是用于放置程序文件的位置。
　　　/u02/oradata 用于放置数据库文件的位置，在安装的时候一定要确认安装的位置正确。 </p>
<p>四、设置oracle用户的环境变量 </p>
<p>上面的工作都是在root下进行，下面的就要在oracle 下操作。
注销root 使用oracle 登陆操作。</p>
<p>.bash_profile文件末尾,注意把其中ORACLE_SID换成自己的实例名：
vi /home/oracle/.bash_profile
加上一下内容
#OracleSettings
TMP=/tmp;
exportTMP
TMPDIR=$TMP;
exportTMPDIR </p>
<p>ORACLE_BASE=/u01/app/oracle;
exportORACLE_BASE
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;
exportORACLE_HOME
ORACLE_SID=TEST;
exportORACLE_SID
ORACLE_TERM=xterm;
exportORACLE_TERM
PATH=/usr/sbin:$PATH;
exportPATH
PATH=$ORACLE_HOME/bin:$PATH;
exportPATH </p>
<p>LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;
exportLD_LIBRARY_PATH
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;
exportCLASSPATH
#LD_ASSUME_KERNEL=2.4.1;
exportLD_ASSUME_KERNEL </p>
<p>if [ $USER = \"oracle\" ];then
if [ $SHELL [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #000000;">一、下载软件<br />
OracleDatabase10gRelease2 (10.2.0.1) </span></p>
<p><span style="color: #000000;">下载后可采用<br />
解压命令：unzip 10201_database_linux32.zip </span></p>
<p><span style="color: #000000;">二、 设置核心参数<br />
1、在/etc/sysctl.conf文件中加入下列行：<br />
vi /etc/sysctl.conf </span></p>
<p><span style="color: #000000;">kernel.shmall =2097152<br />
kernel.shmmax =2147483648<br />
kernel.shmmni =4096<br />
kernel.sem =25032000100128<br />
fs.file-max =65536<br />
net.ipv4.ip_local_port_range =102465000<br />
net.core.rmem_default=262144<br />
net.core.rmem_max=262144<br />
net.core.wmem_default=262144<br />
net.core.wmem_max=262144 </span></p>
<p><span style="color: #000000;">2、运行下列命令使修改后的内核参数生效<br />
/sbin/sysctl –p<br />
<span id="more-752"></span><br />
3、在/etc/security/limits.conf文件中加入下列行：<br />
*softnproc2047<br />
*hardnproc16384<br />
*softnofile1024<br />
*hardnofile65536 </span></p>
<p><span style="color: #000000;">4、在/etc/pam.d/login文件中加入下列行：<br />
sessionrequired /lib/security/pam_limits.so </span></p>
<p><span style="color: #000000;">5、检查下列包： 若没有安装就要装上否则会安装错误无法继续<br />
本人是采用DVD的都在一张盘上，如果你是使用CD 的话，这些包是分布在234三张盘上的</span></p>
<p><span style="color: #000000;">Rpm –qa | grep compat</span></p>
<p><span style="color: #000000;">setarch-1.6-1.i386.rpm<br />
compat-libstdc++-33-3.2.3-47.3.i386.rpm<br />
make-3.80-5.i386.rpm<br />
glibc-2.3.4-2.i386.rpm<br />
openmotif-2.2.3-6.RHEL4.2.i386.rpm<br />
compat-db-4.1.25-9.i386.rpm<br />
libaio-0.3.102-1.i386.rpm<br />
gcc-3.4.3-9.EL4.i386.rpm<br />
compat-gcc-32-3.2.3-47.3.i386.rpm<br />
compat-gcc-32-c++-3.2.3-47.3.i386.rpm </span></p>
<p><span style="color: #000000;">三、创建下列组和用户<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
groupaddoinstall<br />
groupadddba<br />
groupaddoper<br />
useradd -goinstall -Gdbaoracle<br />
passwdoracle </span></p>
<p><span style="color: #000000;">2.创建安装oracle的目录<br />
mkdir -p /u01/app/oracle/product/10.2.0/db_1<br />
mkdir -p /u02/oradata<br />
chown -Roracle.oinstall /u01 /u02/oradata </span></p>
<p><span style="color: #000000;">说明：/u01/app/oracle/product/10.2.0/db_1 是用于放置程序文件的位置。<br />
　　　/u02/oradata 用于放置数据库文件的位置，在安装的时候一定要确认安装的位置正确。 </span></p>
<p><span style="color: #000000;">四、设置oracle用户的环境变量 </span></p>
<p><span style="color: #000000;">上面的工作都是在root下进行，下面的就要在oracle 下操作。<br />
注销root 使用oracle 登陆操作。</span></p>
<p><span style="color: #000000;">.bash_profile文件末尾,注意把其中ORACLE_SID换成自己的实例名：<br />
vi /home/oracle/.bash_profile<br />
加上一下内容<br />
#OracleSettings<br />
TMP=/tmp;<br />
exportTMP<br />
TMPDIR=$TMP;<br />
exportTMPDIR </span></p>
<p><span style="color: #000000;">ORACLE_BASE=/u01/app/oracle;<br />
exportORACLE_BASE<br />
ORACLE_HOME=$ORACLE_BASE/product/10.2.0/db_1;<br />
exportORACLE_HOME<br />
ORACLE_SID=TEST;<br />
exportORACLE_SID<br />
ORACLE_TERM=xterm;<br />
exportORACLE_TERM<br />
PATH=/usr/sbin:$PATH;<br />
exportPATH<br />
PATH=$ORACLE_HOME/bin:$PATH;<br />
exportPATH </span></p>
<p><span style="color: #000000;">LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib;<br />
exportLD_LIBRARY_PATH<br />
CLASSPATH=$ORACLE_HOME/JRE:$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib;<br />
exportCLASSPATH<br />
#LD_ASSUME_KERNEL=2.4.1;<br />
exportLD_ASSUME_KERNEL </span></p>
<p><span style="color: #000000;">if [ $USER = \"oracle\" ];then<br />
if [ $SHELL = \"/bin/ksh\" ];then<br />
ulimit -p16384<br />
ulimit -n65536<br />
else<br />
ulimit -u16384 -n65536<br />
fi<br />
fi<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
五、安装<br />
cd 到oracle10.2的目录下</span></p>
<p><span style="color: #000000;">运行：./runInstaller<br />
就可以开启Oracle10.2的安装界面，剩下的就是依据自己需要看提示装下去啦！ </span></p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/752.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASE SyBase 12.5.4_x86_64在rhel5上的安装配置</title>
		<link>http://www.evanjiang.net.cn/archives/725.html</link>
		<comments>http://www.evanjiang.net.cn/archives/725.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 07:34:20 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[redhat linux]]></category>
		<category><![CDATA[sybase]]></category>
		<category><![CDATA[ASE SyBase 12.5.4_x86_64在rhel5上的安装配置]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=725</guid>
		<description><![CDATA[<p>1、
tar -xvf ase12.5.4_linux_x86_64.zip
2、安装openmotif包，否则后面srvbuildres的时候会出现提示libXm.so.3无法找到错误。
rpm -ivh openmotif-2.3.0-0.3.el5.i386.rpm
rpm -ivh openmotif-2.3.0-0.3.el5.x86_64.rpm
ln -s /usr/lib64/libXm.so.4 /usr/lib64/libXm.so.3</p>
<p>3、 修改/etc/sysctl.conf文件调整操作系统共享内存参数。加入：
kernel.shmmax = 1024*1024*1024*0.75(75%计算)*8(8G内存)
(num为需要分配的共享内存大小，以字节为单位，一般设置为总内存的50％－70％，本例为8G)(在rhel5上已经自动按这样配置了,本步骤不需要)
4、 运行sysctl -p，使共享内存配置生效(在rhel5上已经自动按这样配置了,本步骤不需要)
5、 修改hosts文件，加入服务器内网IP：192.168.1.51
db
6、 创建sybase用户。
useradd -d /opt/sybase-12.5.4 sybase
passwd sybase
7、创建数据库存放目录：mkdir /sda/data
8、更改/sda/data目录的所有者为sybase用户
chown -R sybase:sybase /sda/data
9、切换到sybase用户 su -sybase
9、进入12.5.4安装目录，执行：./setup -console
10、安装到配置服务器时，退出安装

11、为了以后操作方便，可建立OCS-12_5和ASE-12_5的映射：
ln -s ASE-12_5 ASE，ln -s OCS-12_5 OCS
12、修改sybase用户的.bash_profile文件。
vi ~/.bash_profile
输入vi命令行命令，:r ~/SYBASE.sh，会自动将内容添加到文件末尾。
13、在.bash_profile最后再加入LANG=
14、在.bash_profile最后再加入export LD_POINTER_GUARD=0,否则在后面srvbuildres的时候会出现“segmentation fault”错误。
16、重启服务器
17、在sybase用户目录下新建目录rs，用来存放配置文件。
mkdir ~/rs
18、从ASE-12_5/init/sample_resource_files目录下拷贝例子到rs目录下。
cp ~/ASE-12_5/init/sample_resource_files/srvbuild.adaptive_server.rs ~/rs/db.rs
cp ~/ASE-12_5/init/sample_resource_files/srvbuild.backup_server.rs ~/rs/backup.rs
19、本例配置如下：
db.rs：
sybinit.release_directory: /opt/sybase-12.5.4
sybinit.product: sqlsrv
sqlsrv.server_name: db
sqlsrv.new_config: yes
sqlsrv.do_add_server: yes
sqlsrv.network_protocol_list: tcp
sqlsrv.network_hostname_list: 192.168.1.51
sqlsrv.network_port_list: 5000
sqlsrv.server_page_size: 8k
sqlsrv.force_buildmaster: yes
sqlsrv.master_device_physical_name: /sda/data/master.dat
sqlsrv.master_device_size: 180
sqlsrv.master_database_size: [...]]]></description>
			<content:encoded><![CDATA[<p>1、<br />
tar -xvf ase12.5.4_linux_x86_64.zip<br />
2、安装openmotif包，否则后面srvbuildres的时候会出现提示libXm.so.3无法找到错误。<br />
rpm -ivh openmotif-2.3.0-0.3.el5.i386.rpm<br />
rpm -ivh openmotif-2.3.0-0.3.el5.x86_64.rpm<br />
ln -s /usr/lib64/libXm.so.4 /usr/lib64/libXm.so.3</p>
<p>3、 修改/etc/sysctl.conf文件调整操作系统共享内存参数。加入：<br />
kernel.shmmax = 1024*1024*1024*0.75(75%计算)*8(8G内存)<br />
(num为需要分配的共享内存大小，以字节为单位，一般设置为总内存的50％－70％，本例为8G)(在rhel5上已经自动按这样配置了,本步骤不需要)<br />
4、 运行sysctl -p，使共享内存配置生效(在rhel5上已经自动按这样配置了,本步骤不需要)<br />
5、 修改hosts文件，加入服务器内网IP：192.168.1.51<br />
db<br />
6、 创建sybase用户。<br />
useradd -d /opt/sybase-12.5.4 sybase<br />
passwd sybase<br />
7、创建数据库存放目录：mkdir /sda/data<br />
8、更改/sda/data目录的所有者为sybase用户<br />
chown -R sybase:sybase /sda/data<br />
9、切换到sybase用户 su -sybase<br />
9、进入12.5.4安装目录，执行：./setup -console<br />
10、安装到配置服务器时，退出安装<br />
<span id="more-725"></span><br />
11、为了以后操作方便，可建立OCS-12_5和ASE-12_5的映射：<br />
ln -s ASE-12_5 ASE，ln -s OCS-12_5 OCS<br />
12、修改sybase用户的.bash_profile文件。<br />
vi ~/.bash_profile<br />
输入vi命令行命令，:r ~/SYBASE.sh，会自动将内容添加到文件末尾。<br />
13、在.bash_profile最后再加入LANG=<br />
14、在.bash_profile最后再加入export LD_POINTER_GUARD=0,否则在后面srvbuildres的时候会出现“segmentation fault”错误。<br />
16、重启服务器<br />
17、在sybase用户目录下新建目录rs，用来存放配置文件。<br />
mkdir ~/rs<br />
18、从ASE-12_5/init/sample_resource_files目录下拷贝例子到rs目录下。<br />
cp ~/ASE-12_5/init/sample_resource_files/srvbuild.adaptive_server.rs ~/rs/db.rs<br />
cp ~/ASE-12_5/init/sample_resource_files/srvbuild.backup_server.rs ~/rs/backup.rs<br />
19、本例配置如下：<br />
db.rs：<br />
sybinit.release_directory: /opt/sybase-12.5.4<br />
sybinit.product: sqlsrv<br />
sqlsrv.server_name: db<br />
sqlsrv.new_config: yes<br />
sqlsrv.do_add_server: yes<br />
sqlsrv.network_protocol_list: tcp<br />
sqlsrv.network_hostname_list: 192.168.1.51<br />
sqlsrv.network_port_list: 5000<br />
sqlsrv.server_page_size: 8k<br />
sqlsrv.force_buildmaster: yes<br />
sqlsrv.master_device_physical_name: /sda/data/master.dat<br />
sqlsrv.master_device_size: 180<br />
sqlsrv.master_database_size: 160<br />
sqlsrv.errorlog: /opt/sybase-12.5.4/ASE-12_5/install/db.log<br />
sqlsrv.do_upgrade: no<br />
sqlsrv.sybsystemprocs_device_physical_name: /sda/data/sysprocs.dat<br />
sqlsrv.sybsystemprocs_device_size: 250<br />
sqlsrv.sybsystemprocs_database_size: 200<br />
sqlsrv.sybsystemdb_device_physical_name: /sda/data/sybsystemdb.dat<br />
sqlsrv.sybsystemdb_device_size: 50<br />
sqlsrv.sybsystemdb_database_size: 50<br />
sqlsrv.default_backup_server: SYB_BACKUP</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
<p>backup.rs：<br />
sybinit.release_directory: /opt/sybase-12.5.4<br />
sybinit.product: bsrv<br />
bsrv.server_name: SYB_BACKUP<br />
bsrv.new_config: yes<br />
bsrv.do_add_backup_server: yes<br />
bsrv.do_upgrade: no<br />
bsrv.network_protocol_list: tcp<br />
bsrv.network_hostname_list: 192.168.1.51<br />
bsrv.network_port_list: 5001<br />
bsrv.language: USE_DEFAULT<br />
bsrv.character_set: USE_DEFAULT<br />
bsrv.tape_config_file: USE_DEFAULT<br />
bsrv.errorlog: USE_DEFAULT<br />
sqlsrv.related_sqlsrvr: db<br />
sqlsrv.sa_login: sa<br />
sqlsrv.sa_password: USE_DEFAULT<br />
20、编译资源配置文件。<br />
srvbuildres -r ~/rs/db.rs<br />
srvbuildres -r ~/rs/backup.rs<br />
21、修改数据库字符集：<br />
cd ~/charsets/cp936/<br />
charset<br />
-Sda -Usa -P binary.srt cp936<br />
isql -Sda -Usa -P<br />
select id from syscharsets where name=&#8217;cp936&#8242;<br />
go<br />
@REM 找到 cp936对应的id，如171<br />
sp_configure &#8220;default character set id&#8221;,171<br />
go<br />
@REM 执行完成后退出isql，重启server两次<br />
@REM （注:第一次启动后，server会自动当掉，需要第二次重启后才能使用）</p>
<p>22、修改本地字符集：<br />
编辑sybase用户home目录下的locales目录下的locales.dat文件。<br />
vi ~/locales/locales.dat<br />
将[linux]段内的locale = default,us_english,cp936中的设置修改为指定设置即可。<br />
23、      使ASE与Linux操作系统一起启动：<br />
在/etc/rc.local中增加<br />
su -c &#8220;/opt/sybase-12.5.4/ASE-12_5/install/startserver -f /opt/sybase-12.5.4/ASE-12_5/install/RUN_db&#8221; &#8211; sybase &#038;<br />
sleep 10<br />
su -c&#8221;/opt/sybase-12.5.4/ASE-12_5/install/startserver -f /opt/sybase-12.5.4/ASE-12_5/install/RUN_SYB_BACKUP &#8221; &#8211; sybase &#038;<br />
sleep 1<br />
24、<br />
disk init name<br />
= &#8216;tempdb&#8217;,physname = &#8216;/sda/data/tempdb.dat&#8217;,size<br />
= &#8217;1024M&#8217;,cntrltype= 0,dsync = false<br />
go<br />
alter database tempdb on tempdb=1024 with override<br />
go</p>
<p>附sybase ase在linux上的支持情况及在rhel上安装时候的注意事项。</p>
<p>http://certification.sybase.com/ucr/platformResult.do;jsessionid=f29d5bc3AAB2xrPY=+dnbrkHaFM3wQ?platformId=117&#038;productId=2</p>
<p>ID 	Product 	Prod<br />
Version 	Prod<br />
Word Size 	OS Version 	Status<br />
1692 	Adaptive Server Enterprise 	12.5 	64-bit 	Red Hat EL 5.0 (AMD64/EM64T) 	Certified<br />
  
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
General Notes:  	  	Due to recent changes in glibc, the environment variable LD_POINTER_GUARD should be set to 0 for ASE to function properly. This variable should be set before starting any ASE binary. Note that there is known bug with the configuration step of the ASE installer. Please use &#8220;srvbuild&#8221; or &#8220;srvbuildres&#8221; to configure devices. This bug will be fixed in a future release of ASE.<br />
Minimum Product Level :  	  	12.5.4<br />
Minimum Required OS Level :  	  	Redhat 5.0 (kernel-2.6.18-8.el5, glibc-2.5-12, compat-libstdc++-33-3.2.3-61)<br />
Following patches are required for GUI components to work correctly:<br />
xorg-x11-libs-6.7.0-2 (both x86_64 and i386)<br />
(http://rpm.pbone.net/index.php3/ &#8230; 7.0-2.i386.rpm.html and http://rpm.pbone.net/index.php3/ &#8230; 0-2.x86_64.rpm.html)<br />
openmotif-2.2.3-6.x86_64 (both x86_64 and i386) </p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/725.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ASE Sybase for Unixware安装步骤</title>
		<link>http://www.evanjiang.net.cn/archives/723.html</link>
		<comments>http://www.evanjiang.net.cn/archives/723.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 07:31:44 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[sco unix]]></category>
		<category><![CDATA[sybase]]></category>
		<category><![CDATA[Sybase for Unixware  安装步骤]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/archives/723.html</guid>
		<description><![CDATA[<p>一、        Unixware 7.1.1安装（CDROM安装）
1、        从CDROM安装引导启动Unixware CD-1（CDROM必须是Slot1或Slot2的Master）
2、        安装语言，选择Proceed with installation in English，回车继续
3、        Choose a zone for this system and press ;，选择Americas(Latin-1)，F10继续
4、        Choose [...]]]></description>
			<content:encoded><![CDATA[<p>一、        Unixware 7.1.1安装（CDROM安装）<br />
1、        从CDROM安装引导启动Unixware CD-1（CDROM必须是Slot1或Slot2的Master）<br />
2、        安装语言，选择Proceed with installation in English，回车继续<br />
3、        Choose a zone for this system and press <F10>;，选择Americas(Latin-1)，F10继续<br />
4、        Choose a Locale for this system and press <F10>;，选择C(English) ，F10继续<br />
5、        Keyboard，选择United States，F10继续<br />
6、        输入License Number、License Code、License Data，F10继续<br />
7、        提示插入HBA盘，将服务器的特殊设备驱动（如Raid、SCSI、网卡等，必须是Unixware的HBA格式软盘）插入A盘，选择Install HBA diskette，按F10装入驱动，重复此步骤直到所有的附加驱动装载完毕，选择Proceed with installation，F10继续<br />
8、        DCU设置，选择Do not enter the DCU(auto-configure drivers) ，F10继续<br />
9、        System Node Name，在Name:后输入本服务器的主机名称（必须字母打头，长度3-63个字符），F10继续<br />
10、        选择Install from CD-ROM，F10继续（如果此时仅出现Install from TCP network server、Install from SPX network server等，说明安装程序没有识别出CDROM，检查步骤7装载的CDROM驱动是否正确，并选择Cancel installation and shut down，重新启动后重复上述步骤，在步骤7的时候装入正确的CDROM驱动）<br />
11、        Disk Configuration，在Action处用F2选择Use whole disk for UNIX，指定所有硬盘空间用于Unixware，F10继续<br />
12、        文件系统配置，选择Customize filesystem and slices，按以下表格修改Swap slice的大小：<br />
服务器物理内存（MB）        Swap空间（MB）<br />
16        32<br />
64        75<br />
256        200<br />
1024        430<br />
4096        1330<br />
8192        2530<br />
在Filesystem and Raw Disk Slices表的Swap slice一行上，将Size的内容改为所需要的Swap空间尺寸（以MB为单位），F10继续<br />
<span id="more-723"></span><br />
13、        磁盘配置，选择Use default disk options，F10继续<br />
14、        Choose System Profile，选择Full (All Packages) ,F10继续<br />
15、        Select Network Adapter，如果屏幕已列出服务器所使用的网卡，选择Use network adapter list above，否则，选择Select from the full list of supported adapters，在随后的网卡列表中选择，F10继续<br />
16、        TCP/IP配置，输入服务器IP地址，其余均可为空，F10继续<br />
17、        IPX配置，按F8跳过<br />
18、        NIS配置，按F8跳过<br />
19、        输入当前的日期与时间，在Timezone上按F2选择Asia/Australasia，在后续屏幕上用PgDn翻到第二页，选择China，F10继续<br />
20、        安全级配置，选择Traditional，F10继续<br />
21、        System owner配置，System Owner name输入root，System Owner login name输入root，输入System Owner password，再次输入System Owner password，F10继续<br />
22、        确定root密码，输入并确认root密码，F10继续<br />
23、        有关License协议提示，选择Accept，F10继续<br />
24、        系统接着提示将进行安装，此时可按F3将以前所有的配置存入软盘，以后重新安装时，在步骤3之前可按F3读入该配置，以节省安装回答选择时间<br />
25、        系统安装完CD-1之后，将提示取出CDROM和软盘，并重新启动<br />
26、        启动完成后，选择响应的鼠标类型，然后提示继续安装CD-2，在安装过程中，系统系统将提示插入步骤7所使用的HBA软盘。CD-3上是一些附加的应用程序，当CD-2安装完成后可跳过CD-3的安装<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
二、        Unixware 7.1.1安装（软盘引导安装）<br />
1、        从Unixware 7.1.1 Boot Disk 1引导系统<br />
2、        安装语言，选择Proceed with installation in English，回车继续<br />
3、        Disk 1引导完成后，按系统提示，插入Unixware 7.1.1 Boot Disk 2，继续安装<br />
4、        Choose a zone for this system and press <F10>;，选择Americas(Latin-1)，F10继续<br />
5、        Choose a Locale for this system and press <F10>;，选择C(English) ，F10继续<br />
6、        Keyboard，选择United States，F10继续<br />
7、        输入License Number、License Code、License Data，F10继续<br />
8、        提示插入HBA盘，此时必须插入Unixware自带的默认HBA软盘，并选择Install HBA diskette，按F10装入，否则后继操作将无法继续<br />
9、        以后的安装步骤从CDROM安装的步骤7开始<br />
三、        Sybase安装前准备<br />
1、        用SCO Admin→Hardware→Video Manager将屏幕分辨率调整到1024&#215;768<br />
2、        通过控制面版的字体设置将屏幕字体调整为3号<br />
3、        用SCO Admin→Account Manager加入一个sybase用户组<br />
4、        用SCO Admin→Account Manager加入一个sybase用户，默认home directory为/home/sybase，login group为sybase<br />
5、        用sybase用户登录<br />
6、        通过控制面版的字体设置将屏幕字体调整为3号<br />
7、        用root登录<br />
8、        设置sybase用户登录选项：<br />
编辑并修改 /home/sybase/.env，增加两行：<br />
SYBASE /sybase<br />
DSQUERY sybserver        （其中sybserver代表SYBASE服务器名字，需要按实际情况修改，一般情况下SYBASE服务器名字与服务器主机名字相同）<br />
编辑并修改 /home/sybase/.dtprofile，将最后一行内容之前的#号去掉：<br />
# DTSOURCEPROFILE=true                                （将此行之前的#号去掉）<br />
编辑并修改 /home/sybase/.profile，在PATH=$PATH……行最后增加以下内容：<br />
 SYBASE SYBASE/install SYBASE/bin，修改后该行内容可能为：<br />
PATH=$PATH:/usr/sbin:/usr/java/bin:. SYBASE SYBASE/install SYBASE/bin<br />
并将该行以及该行之后的EXPORT PATH行移动到文件最后<br />
9、        设置root用户登录选项：<br />
编辑并修改 /.dtprofile，是其最后几行的内容如下所示：<br />
# DTSOURCEPROFILE=true<br />
SYBASE=/sybase<br />
DSQUERY=sybserver        （其中sybserver代表SYBASE服务器名字，需要按实际情况修改，一般情况下SYBASE服务器名字与服务器主机名字相同）<br />
PATH=$PATH SYBASE SYBASE/install SYBASE/bin<br />
export SYBASE DSQUERY PATH<br />
10、        建立SYBASE目录<br />
#cd /<br />
#mkdir /sybase<br />
#chown sybase /sybase<br />
#chgrp sybase /sybase<br />
11、        建立SYBASE安装目录（如果直接从CDROM安装SYBASE，可跳过此步骤）<br />
#cd /<br />
#mkdir /sybsetup<br />
#chown sybase /sybsetup<br />
#chgrp sybase /sybsetup<br />
以下步骤将使root具有FTP访问权限：<br />
a、        在SCO admin→Networking→FTP Server Manager中，选择View/Denied users，在列表中单击root行，选择Edit/Delete，删除该行<br />
b、        编辑并修改 /etc/shells，将其中 /sbin/sh 一行前的#号去掉<br />
在后台PC上用FTP登录服务器（用户为sybase），并将SYBASE安装盘所有文件及目录上传到 /sybsetup目录<br />
执行以下命令改变文件属性<br />
#cd /sybsetup<br />
#chmod 777 sybsetup<br />
#chmod 777 sybload<br />
12、        建立SYBASE数据文件目录（以后SYBASE系统内数据设备文件均存放在此目录下）<br />
#cd /<br />
#mkdir /sybdata<br />
#chown sybase /sybdata<br />
#chgrp sybase /sybdata<br />
13、        改变系统文件属性<br />
#cd /dev<br />
#chown sybase async<br />
#chgrp sybase async<br />
14、        系统参数调整，编辑并修改 /etc/conf/cf.d/stune，增加以下内容：<br />
SHMMNI        100<br />
SHMSEG        15<br />
SHMMAX        256000000        （该值为Unixware最大共享内存尺寸，以字节为单位，在SYBASE中所设置的“Total Memory”的值必须比该值略小，因此该数值一般为系统物理内存的70%~80%）<br />
SHMALL        2048<br />
NPROC        500<br />
ARG_MAX        51200<br />
SFNOLIM        400<br />
SFSZLIM        0x7FFFFFFF<br />
HFSZLIM        0x7FFFFFFF<br />
SDATLIM        0x7FFFFFFF<br />
HDATLIM        0x7FFFFFFF<br />
SCORLIM        0x7FFFFFFF<br />
HCORLIM        0x7FFFFFFF<br />
SVMMLIM        0x7FFFFFFF<br />
HVMMLIM        0x7FFFFFFF<br />
SSTKLIM        0x7FFFFFFF<br />
HSTKLIM        0x7FFFFFFF<br />
15、        重建内核<br />
#/etc/conf/bin/idbuild<br />
16、        重新启动系统<br />
#cd /<br />
#shutdown –y –g0 –i6<br />
四、        SYBASE安装<br />
1、        如果通过FTP已完成SYBASE安装盘的上传，可直接跳到步骤4<br />
2、        用root登录<br />
3、        建立CDROM映射（执行命令前必须先放入光盘）<br />
#mount /dev/cd0 /sybsetup<br />
4、        用sybase登录<br />
5、        执行安装<br />
%cd /sybsetup<br />
%sybsetup<br />
6、        检查SYBASE Directory下输入行内是否为 /sybase，如果不是，检查上述步骤关于环境变量SYBASE=/sybase的设置是否正确<br />
7、        选择Unload SYBASE Products from CD-ROM or tape<br />
8、        检查SYBASE安装目录是否为 /sybase，继续<br />
9、        选择Device Media为CDROM，并输入SYBASE安装文件为：<br />
/sybsetup/sybimage<br />
Installation Source Machine选择为Local，继续<br />
10、        选择安装产品为11.9.2 Adaptive Server Enterprise，继续<br />
11、        安装完成后，回到sybsetup主窗口<br />
12、        选择Build New Servers<br />
13、        选择Adaptive Server以及Backup Server，注意其名字默认为主机名称，一般情况下不要修改<br />
14、        按以下内容输入Adaptive Server安装选项，然后继续<br />
Master Device Path: /sybdata/master.dat<br />
Sybsystemprocs Device Path: /sybdata/systemprocs.dat<br />
Port number: 5000<br />
15、        按以下内容输入Backup Server安装选项，然后按Build Server继续<br />
Port number: 5001<br />
16、        安装完成后，回到sybsetup主窗口<br />
17、        选择Localize Adaptive Server，并选择Adaptive Server名称，按OK继续<br />
18、        输入sa密码（默认为空），继续<br />
19、        选择安装语言为Us English，字符集为Code Page 850，排序方式为Binary Sort Order for Code Page 850 (cp850)<br />
20、        编辑并修改/sybase/SYBSERVER.cfg（其中SYBSERVER为SYBASE服务器名称）<br />
total memory = xxxxx        (设置SYBASE可用内存，2KB单位，通常设为物理内存的50%~60%)<br />
enable cis = 1<br />
max cis remote connections = 0<br />
number of locks = 20000<br />
default network packet size = 2048<br />
number of user connections = 100<br />
max network packet size = 2048<br />
cpu grace time = 500<br />
max network listerns = DEFAULT<br />
number of open indexes = 2000<br />
number of open objects = 1000<br />
21、        停止并重新启动sybase服务器<br />
22、        用isql验证登录<br />
23、        用showserver显示Backup Server的名字，显示为……/sybase/bin/backupserver –Sxxxxx_back，其中的xxxxx_back即为Backup Server的名字<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
24、        启动isql，执行以下命令<br />
sp_configure ‘allow updates to system tables’,1<br />
go<br />
checkpoint<br />
go<br />
use master<br />
go<br />
update sysservers set srvnetname=’xxxxx_back’<br />
      where srvnetname=’SYB_BACKUP’<br />
go<br />
sp_configure ‘allow updates to system tables’,0<br />
go<br />
checkpoint<br />
go<br />
25、        如果配有磁带机，首先检查/dev/rmt目录是否存在，如果不存在需要安装SCSI驱动<br />
26、        启动isql，执行以下命令配置磁带机并验证<br />
sp_addumpdevice “tape”, tapedev, “/dev/rmt/ntape1”, x<br />
        (其中x为单盘磁带容量，M为单位，比实际容量略小一些)<br />
go<br />
dump database master to tapedev with init<br />
go</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/723.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Apache PHP MySQL Zend GD OpenSSL vsftpd For Debian  完全编译</title>
		<link>http://www.evanjiang.net.cn/archives/720.html</link>
		<comments>http://www.evanjiang.net.cn/archives/720.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 07:28:42 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[debian linux]]></category>
		<category><![CDATA[ftp]]></category>
		<category><![CDATA[mysql]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[www]]></category>
		<category><![CDATA[Apache PHP MySQL Zend GD OpenSSL vsftpd For Debian  完全编译]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=720</guid>
		<description><![CDATA[<p>系统 Debian Linux v3.1r0 (Sarge) Kernel v2.6.11 i686</p>
<p>安装方式：源码编译</p>
<p>################
##### 软件 #####
################</p>
<p>Apache v2.0.54 官方主页： http://www.apache.org
http://www.apache.org/dist/httpd/httpd-2.0.54.tar.gz  [7.16MB]</p>
<p>PHP v4.3.11 官方主页： http://www.php.net
http://cn.php.net/distributions/php-4.3.11.tar.gz  [4.64MB]</p>
<p>Zend Optimizer v2.5.10 官方主页： http://www.zend.com
http://downloads.zend.com/optimizer/2.5.10/ZendOptimizer-2.5.10-linux-glibc21-i386.tar.gz  [3.36MB]</p>
<p>MySQL v4.0.24 官方主页： http://www.mysql.com
http://ftp.stu.edu.tw/pub/Unix/Database/Mysql/Downloads/MySQL-4.0/mysql-4.0.24.tar.gz  [16.1MB]</p>
<p>GD Library v2.0.33 官方主页： http://www.boutell.com/gd/
http://www.boutell.com/gd/http/gd-2.0.33.tar.gz  [573KB]</p>
<p>FreeType v2.1.10 官方主页： http://www.freetype.org
http://savannah.nongnu.org/download/freetype/freetype-2.1.10.tar.gz  [1.31MB]</p>
<p>Jpeg v6b 官方主页： http://www.ijg.org
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz  [598KB]</p>
<p>LibPNG v1.2.8 官方主页： http://www.libpng.org/pub/png/
http://switch.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.8.tar.gz  [498KB]</p>
<p>OpenSSL v0.9.7g 官方主页： http://www.openssl.org
http://www.openssl.org/source/openssl-0.9.7g.tar.gz [...]]]></description>
			<content:encoded><![CDATA[<p>系统 Debian Linux v3.1r0 (Sarge) Kernel v2.6.11 i686</p>
<p>安装方式：源码编译</p>
<p>################<br />
##### 软件 #####<br />
################</p>
<p>Apache v2.0.54 官方主页： http://www.apache.org<br />
http://www.apache.org/dist/httpd/httpd-2.0.54.tar.gz  [7.16MB]</p>
<p>PHP v4.3.11 官方主页： http://www.php.net<br />
http://cn.php.net/distributions/php-4.3.11.tar.gz  [4.64MB]</p>
<p>Zend Optimizer v2.5.10 官方主页： http://www.zend.com<br />
http://downloads.zend.com/optimizer/2.5.10/ZendOptimizer-2.5.10-linux-glibc21-i386.tar.gz  [3.36MB]</p>
<p>MySQL v4.0.24 官方主页： http://www.mysql.com<br />
http://ftp.stu.edu.tw/pub/Unix/Database/Mysql/Downloads/MySQL-4.0/mysql-4.0.24.tar.gz  [16.1MB]</p>
<p>GD Library v2.0.33 官方主页： http://www.boutell.com/gd/<br />
http://www.boutell.com/gd/http/gd-2.0.33.tar.gz  [573KB]</p>
<p>FreeType v2.1.10 官方主页： http://www.freetype.org<br />
http://savannah.nongnu.org/download/freetype/freetype-2.1.10.tar.gz  [1.31MB]</p>
<p>Jpeg v6b 官方主页： http://www.ijg.org<br />
ftp://ftp.uu.net/graphics/jpeg/jpegsrc.v6b.tar.gz  [598KB]</p>
<p>LibPNG v1.2.8 官方主页： http://www.libpng.org/pub/png/<br />
http://switch.dl.sourceforge.net/sourceforge/libpng/libpng-1.2.8.tar.gz  [498KB]</p>
<p>OpenSSL v0.9.7g 官方主页： http://www.openssl.org<br />
http://www.openssl.org/source/openssl-0.9.7g.tar.gz  [2.98MB]</p>
<p>vsftpd v2.0.3 官方主页： http://vsftpd.beasts.org<br />
ftp://vsftpd.beasts.org/users/cevans/vsftpd-2.0.3.tar.gz  [149KB]</p>
<p>zlib v1.2.2 官方主页： http://www.gzip.org/zlib/<br />
http://www.zlib.net/zlib-1.2.2.tar.gz  [420KB]</p>
<p>ClibPDF v2.02-r1-1 官方网站： http://www.fastio.com<br />
http://www.fastio.com/clibpdf202r1.tar.gz  [836KB]</p>
<p>mod_limitipconn v0.22 官方网站： http://dominia.org/djao/<br />
http://dominia.org/djao/limit/mod_limitipconn-0.22.tar.gz  [6.18KB]</p>
<p>Bandwidth Module v0.6 官方网站： http://www.ivn.cl/apache/<br />
http://www.ivn.cl/apache/bw_mod-0.6.tgz  [28.5KB]</p>
<p>Apache DoS Evasive Maneuvers Module v1.10 官方网站： http://www.nuclearelephant.com/projects/dosevasive/<br />
http://www.nuclearelephant.com/projects/dosevasive/mod_dosevasive_1.10.tar.gz  [19.1KB]<br />
<span id="more-720"></span><br />
################<br />
##### 安装 #####<br />
################</p>
<p>1、解压缩，把所有源码压缩包放在一个目录中，解压缩所有 .tar.gz 压缩包<br />
for i in `ls *.gz`;do tar zxvf $i; done;</p>
<p>2、开始安装</p>
<p>##### zlib #####</p>
<p>cd zlib-1.2.2<br />
./configure<br />
make<br />
make install<br />
cd ..</p>
<p>##### OpenSSL #####</p>
<p>cd openssl-0.9.7g<br />
./config &#8211;prefix=/usr/local/ssl \<br />
&#8211;openssldir=/usr/local/ssl \<br />
shared \<br />
zlib</p>
<p>make<br />
make install<br />
ln -s /usr/local/ssl /usr/lib/ssl<br />
cd ..</p>
<p>##### MySQL #####</p>
<p>cd mysql-4.0.24</p>
<p>编辑 sql/mysqld.cc ：<br />
搜索：&#038;max_connections, 0, GET_ULONG, REQUIRED_ARG, 100, 1, 16384, 0, 1,<br />
修改：&#038;max_connections, 0, GET_ULONG, REQUIRED_ARG, 1000, 1, 16384, 0, 1,</p>
<p>groupadd mysql<br />
useradd -g mysql mysql</p>
<p>./configure \<br />
&#8211;prefix=/server/mysql \<br />
&#8211;sysconfdir=/server/mysql \<br />
&#8211;without-isam \<br />
&#8211;without-debug \<br />
&#8211;enable-assembler \<br />
&#8211;with-unix-socket-path=/tmp/mysql.sock \<br />
&#8211;with-mysqld-user=mysql \<br />
&#8211;with-extra-charset=all \<br />
&#8211;with-client-ldflags=-all-static \<br />
&#8211;with-mysqld-ldflags=-all-static \<br />
&#8211;localstatedir=/data/mysql/data</p>
<p>如果出现以下错误：<br />
checking for tgetent in -ltermcap&#8230; no<br />
checking for termcap functions library&#8230; configure: error: No curses/termcap library found<br />
说明 curses/termcap 库没有安装<br />
apt-cache search curses | grep lib<br />
安装 libncurses5-dev ，然后重新运行配置</p>
<p>mkdir /data<br />
mkdir /data/mysql<br />
mkdir /data/mysql/data</p>
<p>make<br />
make install</p>
<p>/server/mysql/bin/mysql_install_db &#8211;user=mysql</p>
<p>chown -R mysql /data/mysql<br />
chgrp -R mysql /data/mysql<br />
chown -R root /server/mysql<br />
chgrp -R mysql /server/mysql<br />
cp /server/mysql/share/mysql/my-medium.cnf /server/mysql/my.cnf</p>
<p>/server/mysql/share/mysql/mysql.server start<br />
/server/mysql/bin/mysqladmin -u root password 123456789<br />
cd ..<br />

<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
</p>
<p>##### Apache2 #####</p>
<p>cd httpd-2.0.54</p>
<p>./configure &#8211;prefix=/server/httpd \<br />
&#8211;enable-so \<br />
&#8211;with-mysql=/server/mysqld \<br />
&#8211;enable-cgi \<br />
&#8211;with-config-file-path=/server/httpd/conf \<br />
&#8211;enable-track-vars \<br />
&#8211;enable-mods-shared=all \<br />
&#8211;enable-cache \<br />
&#8211;enable-disk-cache \<br />
&#8211;enable-mem-cache \<br />
&#8211;enable-rewrite \<br />
&#8211;with-mpm=worker \<br />
&#8211;with-ssl=/usr/local/ssl \<br />
&#8211;enable-ssl</p>
<p>make<br />
make install<br />
cd ..</p>
<p>##### mod_deflate #####</p>
<p>cd httpd-2.0.54/modules/filters</p>
<p>/server/httpd/bin/apxs -i -c -a mod_deflate.c</p>
<p>修改 Apache 配置文件 /server/httpd/conf/httpd.conf ：<br />
添加：<br />
<Location />;<br />
# Insert filter<br />
SetOutputFilter DEFLATE</p>
<p># Netscape 4.x has some problems&#8230;<br />
BrowserMatch ^Mozilla/4 gzip-only-text/html</p>
<p># Netscape 4.06-4.08 have some more problems<br />
BrowserMatch ^Mozilla/4\.0[678] no-gzip</p>
<p># MSIE masquerades as Netscape, but it is fine<br />
# BrowserMatch \bMSIE !no-gzip !gzip-only-text/html</p>
<p># NOTE: Due to a bug in mod_setenvif up to Apache 2.0.48<br />
# the above regex won&#8217;t work. You can use the following<br />
# workaround to get the desired effect:<br />
BrowserMatch \bMSI[E] !no-gzip !gzip-only-text/html</p>
<p># Don&#8217;t compress images<br />
SetEnvIfNoCase Request_URI \<br />
\.(?:gif|jpe?g|png|ico)$ no-gzip dont-vary</p>
<p># Make sure proxies don&#8217;t deliver the wrong content<br />
#Header append Vary User-Agent env=!dont-vary<br />
</Location>;</p>
<p>DeflateFilterNote ratio<br />
LogFormat &#8216;&#8221;%v %h %l %u %t &#8220;%r&#8221; %>;s %b &#8220;%{Referer}i&#8221; &#8220;%{User-Agent}i&#8221;" (%{ratio}n)&#8217; deflate</p>
<p>CustomLog logs/deflate_log deflate</p>
<p>然后<br />
cd ../../../</p>
<p>##### FreeType #####</p>
<p>cd freetype-2.1.10</p>
<p>./configure &#8211;prefix=/usr/local/freetype</p>
<p>make<br />
make install<br />
cd ..</p>
<p>##### LibPNG #####</p>
<p>cd libpng-1.2.8</p>
<p>cp scripts/makefile.linux makefile</p>
<p>make test<br />
make install<br />
cd ..</p>
<p>##### Jpeg #####</p>
<p>cd jpeg-6b</p>
<p>mkdir /usr/local/jpeg<br />
mkdir /usr/local/jpeg/bin<br />
mkdir /usr/local/jpeg/lib<br />
mkdir /usr/local/jpeg/include<br />
mkdir /usr/local/jpeg/man<br />
mkdir /usr/local/jpeg/man/man1<br />
./configure &#8211;prefix=/usr/local/jpeg &#8211;enable-shared &#8211;enable-static</p>
<p>make<br />
make install<br />
cd ..</p>
<p>##### GD Library #####</p>
<p>cd gd-2.0.33</p>
<p>./configure &#8211;prefix=/usr/local/gd \<br />
&#8211;with-jpeg=/usr/local/jpeg \<br />
&#8211;with-freetype=/usr/local/freetype \<br />
&#8211;with-png \<br />
&#8211;with-zlib</p>
<p>make<br />
make install<br />
cd ..</p>
<p>##### ClibPDF #####</p>
<p>cd ClibPDF/source<br />
cp Makefile.Linux makefile<br />
make<br />
make install<br />
cd ..</p>
<p>##### PHP #####</p>
<p>cd php-4.3.11</p>
<p>./configure &#8211;prefix=/server/php \<br />
&#8211;with-apxs2=/server/httpd/bin/apxs \<br />
&#8211;with-gd=/usr/local/gd \<br />
&#8211;enable-gd \<br />
&#8211;enable-gd-native-ttf \<br />
&#8211;with-jpeg-dir=/usr/local/jpeg \<br />
&#8211;with-png \<br />
&#8211;with-ttf \<br />
&#8211;with-zlib \<br />
&#8211;with-freetype-dir=/usr/local/freetype \<br />
&#8211;enable-magic-quotes \<br />
&#8211;with-mysql=/server/mysql \<br />
&#8211;with-mysql-sock=/tmp/mysql.sock \<br />
&#8211;with-iconv \<br />
&#8211;with-mbstring \<br />
&#8211;enable-mbstring \<br />
&#8211;enable-track-vars \<br />
&#8211;enable-force-cgi-redirect \<br />
&#8211;enable-ftp \<br />
&#8211;with-config-file-path=/server/httpd/conf \<br />
&#8211;with-openssl=/usr/local/ssl \<br />
&#8211;with-openssl-dir=/usr/local/ssl \<br />
&#8211;with-cpdflib=/usr/local \<br />
&#8211;with-pear=/server/php/pear</p>
<p>make<br />
make install</p>
<p>cp php.ini-dist /server/httpd/conf/php.ini<br />
cd ..</p>
<p>
<!-- Begin alimama Adserver code -->
<script type="text/javascript"><!--
google_ad_client = "pub-8438729971248494";
/* 728x90, ������ 10-2-7 */
google_ad_slot = "4752526529";
google_ad_width = 728;
google_ad_height = 90;
//-->
</script>
<script type="text/javascript"
src="http://pagead2.googlesyndication.com/pagead/show_ads.js">
</script>
<!-- End Alimama Adserver code -->
<br />
##### Zend Optimizer #####</p>
<p>cd ZendOptimizer-2.5.10-linux-glibc21-i386</p>
<p>./install</p>
<p>操作 [OK] [EXIT] [YES] [/server/zend] [/server/httpd/conf] [YES] [/server/httpd/bin/apachectl] [OK] [OK] [NO]</p>
<p>cd ..</p>
<p>##### mod_limitipconn #####</p>
<p>cd mod_limitipconn-0.22</p>
<p>/server/httpd/bin/apxs -i -c -a mod_limitipconn.c</p>
<p>修改 Apache 配置文件 /server/httpd/conf/httpd.conf：<br />
查找：#ExtendedStatus On ，去掉注释&#8221;#&#8221;<br />
查找：CustomLog logs/access_log common ，修改成 CustomLog logs/access_log common env=!LIMITIP<br />
添加：<br />
<IfModule mod_limitipconn.c>;<br />
    <Location />;<br />
        MaxConnPerIP 5<br />
        NoIPLimit image/*<br />
    </Location>;</p>
<p>    <Location /mp3>;<br />
        MaxConnPerIP 2<br />
        OnlyIPLimit audio/mpeg video<br />
    </Location>;<br />
</IfModule>;</p>
<p>然后<br />
cd ..</p>
<p>##### Bandwidth Module #####</p>
<p>cd bw_mod-0.6</p>
<p>/server/httpd/bin/apxs -i -c -a bw_mod-0.6.c</p>
<p>cd ..</p>
<p>带宽限制在虚拟主机中设置</p>
<p>##### Apache DoS Evasive Maneuvers Module #####</p>
<p>cd mod_dosevasive</p>
<p>/server/httpd/bin/apxs -i -c -a mod_dosevasive20.c</p>
<p>cd ..</p>
<p>等一下启动 Apache2 后可以测试<br />
perl test.pl</p>
<p>###############################################################################################</p>
<p>现在，WEB 服务已经安装完毕！<br />
测试 WEB 服务：</p>
<p>mkdir /data/vhosts<br />
mkdir /data/vhosts/localhost</p>
<p>启动 Apache2<br />
/server/httpd/bin/apachectl start<br />
如果出错请参考下一贴中的 httpd.conf 和 虚拟主机配置文件示例</p>
<p>MySQL 服务前面已经启动，密码是：123456789</p>
<p>编辑一个 info.php 放在 /data/vhosts/localhost 下面，内容如下：</p>
<p><?php<br />
phpinfo();<br />
?>;</p>
<p>测试： http://localhost/info.php<br />
OK，看到 PHP 信息吧 </p>
<p>##### 开机自动启动服务 #####</p>
<p>cp /server/httpd/bin/apachectl /etc/init.d/httpd<br />
cp /server/mysql/share/mysql/mysql.server /etc/init.d/mysql<br />
recconf<br />
配置，已经有 httpd 和 mysql 选项，选中，OK</p>
<p>如果没有 rcconf ，用 apt-get install rcconf 安装</p>
<p>#######################<br />
##### 使 SSL 工作 #####<br />
#######################</p>
<p>mkdir /server/ssl<br />
cd /server/ssl</p>
<p>##### 手工签署证书 #####<br />
/usr/local/ssl/bin/openssl genrsa -des3 \<br />
-rand 任意大文件1:任意大文件2 \<br />
-out server.key 1024</p>
<p>输入密码<br />
重复密码</p>
<p>/usr/local/ssl/bin/openssl req -new -key server.key -out server.csr</p>
<p>Enter pass phrase for localhost.key:  #<&#8211;## 输入密码<br />
You are about to be asked to enter information that will be incorporated<br />
into your certificate request.<br />
What you are about to enter is what is called a Distinguished Name or a DN.<br />
There are quite a few fields but you can leave some blank<br />
For some fields there will be a default value,<br />
If you enter &#8216;.&#8217;, the field will be left blank.<br />
&#8212;&#8211;<br />
Country Name (2 letter code) [AU]:CN  #<&#8211;## 国家代码<br />
State or Province Name (full name) [Some-State]N  #<&#8211;## 省或州<br />
Locality Name (eg, city) []:SY  #<&#8211;## 城市<br />
Organization Name (eg, company) [Internet Widgits Pty Ltd]:micronsky.net  #<&#8211;## 组织名称<br />
Organizational Unit Name (eg, section) []:root  #<&#8211;## 部门<br />
Common Name (eg, YOUR name) []:keelort  #<&#8211;## 名字<br />
Email Address []:keelort@gmail.com  #<&#8211;## 电子邮件</p>
<p>Please enter the following &#8216;extra&#8217; attributes<br />
to be sent with your certificate request<br />
A challenge password []:  #<&#8211;## 直接回车就可以<br />
An optional company name []:  #<&#8211;## 直接回车就可以</p>
<p>/usr/local/ssl/bin/openssl x509 -req \<br />
-days 3650 \<br />
-in server.csr \<br />
-signkey server.key \<br />
-out server.crt</p>
<p>&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;&#8230;..</p>
<p>注意：SSL 部分目前还不是很明白，apachectl startssl 启动后 http:// 不能用，只能用 https:// 连接，<br />
不知道怎么回事请高手指教，暂时没有写全</p>
<p>###############################################################################################</p>
<p>##### vsftpd #####</p>
<p>cd vsftpd-2.0.3</p>
<p>编辑 builddefs.h ：<br />
#define VSF_BUILD_PAM<br />
修改为<br />
#undef VSF_BUILD_PAM</p>
<p>编辑 defs.h ：<br />
#define VSFTP_DEFAULT_CONFIG    &#8220;/etc/vsftpd.conf&#8221;<br />
修改为<br />
#define VSFTP_DEFAULT_CONFIG    &#8220;/server/vsftpd/conf/vsftpd.conf&#8221;</p>
<p>make</p>
<p>useradd nobody<br />
mkdir /usr/share/empty<br />
mkdir /data/ftp<br />
useradd -d /data/ftp ftp<br />
chown root:root /data/ftp<br />
chmod og-w /data/ftp</p>
<p>install -m 755 vsftpd /server/vsftpd/vsftpd<br />
install -m 644 vsftpd.8 /usr/share/man/man8<br />
install -m 644 vsftpd.conf.5 /usr/share/man/man5<br />
mkdir /server/vsftpd/conf<br />
install -m 644 vsftpd.conf /server/vsftpd/conf/vsftpd.conf</p>
<p>使 vsftpd 以 standalone 方式启动：<br />
编写名为 vsftpd 的启动脚本：</p>
<p>CODE:<br />
[Copy to clipboard]<br />
#!/bin/sh<br />
# /etc/init.d/vsftpd<br />
#</p>
<p>set -e</p>
<p># Exit if vsftpd.conf doesn&#8217;t have listen=yes or listen_ipv6=yes<br />
# (mandatory for standalone operation)<br />
if [ -f /server/vsftpd/conf/vsftpd.conf ] &#038;&#038; ! egrep -iq &#8220;^ *listen(_ipv6)? *= *yes&#8221; </p>
<p>/server/vsftpd/conf/vsftpd.conf; then<br />
    exit 0<br />
fi</p>
<p>DAEMON=/server/vsftpd/vsftpd<br />
NAME=vsftpd</p>
<p>test -x $DAEMON || exit 0</p>
<p>case &#8220;$1&#8243; in<br />
  start)<br />
    echo -n &#8220;Starting FTP server: $NAME&#8221;<br />
    start-stop-daemon &#8211;start &#8211;background -m &#8211;pidfile /tmp/vsftpd.pid &#8211;exec $DAEMON<br />
    echo &#8220;.&#8221;<br />
    ;;<br />
  stop)<br />
    echo -n &#8220;Stopping FTP server: $NAME&#8221;<br />
    start-stop-daemon &#8211;stop &#8211;pidfile /tmp/vsftpd.pid &#8211;oknodo &#8211;exec $DAEMON<br />
    echo &#8220;.&#8221;<br />
      ;;<br />
  restart)<br />
    echo -n &#8220;Restarting FTP server: $NAME&#8221;<br />
    start-stop-daemon &#8211;stop &#8211;pidfile /tmp/vsftpd.pid &#8211;oknodo &#8211;exec $DAEMON<br />
    start-stop-daemon &#8211;start &#8211;background -m &#8211;pidfile /tmp/vsftpd.pid &#8211;exec $DAEMON<br />
    echo &#8220;.&#8221;<br />
    ;;<br />
  reload|force-reload)<br />
    echo &#8220;Reloading $NAME configuration files&#8221;<br />
    start-stop-daemon &#8211;stop &#8211;pidfile /tmp/vsftpd.pid &#8211;signal 1 &#8211;exec $DAEMON<br />
    echo &#8220;.&#8221;<br />
    ;;<br />
  *)<br />
    echo &#8220;Usage: /etc/init.d/$NAME {start|stop|restart|reload}&#8221;<br />
    exit 1<br />
    ;;<br />
esac</p>
<p>exit 0<br />
运行 rcconf 选中 vsftpd ，确定</p>
<p>重新启动，试试试不是所有的服务都启动，呵呵&#8230;</p>
<p>全文完</p>
]]></content:encoded>
			<wfw:commentRss>http://www.evanjiang.net.cn/archives/720.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>基于OpenBSD4.3 i386系统的JAVA编译及OpenFIRE&amp;PostgreSQL应用</title>
		<link>http://www.evanjiang.net.cn/archives/707.html</link>
		<comments>http://www.evanjiang.net.cn/archives/707.html#comments</comments>
		<pubDate>Thu, 05 Mar 2009 05:46:01 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[openbsd unix]]></category>
		<category><![CDATA[postgresql]]></category>
		<category><![CDATA[openbsd java编译 openfire  postgresql 应用]]></category>

		<guid isPermaLink="false">http://www.evanjiang.net.cn/?p=707</guid>
		<description><![CDATA[<p>•	前言
	1 什么是
	2 什么是PostgreSQL
•	一、安装JAVA环境
	1 开启linux支持
	2 增加数据和堆栈限额(官方建议 非必须)
	3 建立/etc/mk.conf
	4 进入jdk目录开始编译安装
	a 编译安装jdk
	b 编译安装jre
	c 下载java编译所需文件
	5 设置JAVA环境
	a 设置系统变量
	b 设置系统变量
	c 测试JAVA环境
•	二、安装PostgreSQL
	1 安装数据库
	2 建立数据库
	a 初始化数据库
	b 运行数据库
	c 建立新用户
	d 建立数据库
	3 设置自动运行和关闭
	a 设置开机自动运行
	b 设置关机自动关闭
	4 PostgreSQL 优化
	a 修改 /etc/sysctl.conf
	b 修改/etc/login.conf
	c 修改postgresql.conf文件
•	三、 安装OpenFIRE
	1 服务器端安装
	a 添加openfire系统用户
	b 解压openfire
	c 修改 openfire权限
	d 运行openfire
	2 openfire服务配置
	3 设置openfire自动运行和关闭
	a 设置开机自动运行
	b 设置关机自动关闭
•	四 设置Spark
•	后记：

前言
1 什么是OpenFire
Openfire 采用Java开发的开源的实时协作（RTC）服务器,基于XMPP（Jabber）协议。
您可以使用它轻易的构建高效率的即时通信服务器.
Openfire安装和使用都非常简单，并利用Web进行管理。单台服务器可支持上万并发用户。
由于是采用开放的XMPP协议，您可以使用各种支持XMPP协议的IM客户端软件登陆服务
简单的说是类似MSN的实时通信系统
2 什么是PostgreSQL
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES，版本 4.2为基础的对象关系型数据库管</p>
<p>理系统（ORDBMS）。
阅读指南：所有需要手工录入的部分都用加阴影的字符表示，需要特别注意的地方以【】字符加注.
【开始编译以前,请将ports升级到最新】
一、安装JAVA环境
1 开启linux支持
obsd支持【原生】的java运行环境，只在【编译】java的需要打开linux支持
sysctl kern.emul.linux=1
2 增加数据和堆栈限额(官方建议 非必须)
如果编译的时候出现类似于&#8221;Could not reserve enough space [...]]]></description>
			<content:encoded><![CDATA[<p>•	前言<br />
	1 什么是<br />
	2 什么是PostgreSQL<br />
•	一、安装JAVA环境<br />
	1 开启linux支持<br />
	2 增加数据和堆栈限额(官方建议 非必须)<br />
	3 建立/etc/mk.conf<br />
	4 进入jdk目录开始编译安装<br />
	a 编译安装jdk<br />
	b 编译安装jre<br />
	c 下载java编译所需文件<br />
	5 设置JAVA环境<br />
	a 设置系统变量<br />
	b 设置系统变量<br />
	c 测试JAVA环境<br />
•	二、安装PostgreSQL<br />
	1 安装数据库<br />
	2 建立数据库<br />
	a 初始化数据库<br />
	b 运行数据库<br />
	c 建立新用户<br />
	d 建立数据库<br />
	3 设置自动运行和关闭<br />
	a 设置开机自动运行<br />
	b 设置关机自动关闭<br />
	4 PostgreSQL 优化<br />
	a 修改 /etc/sysctl.conf<br />
	b 修改/etc/login.conf<br />
	c 修改postgresql.conf文件<br />
•	三、 安装OpenFIRE<br />
	1 服务器端安装<br />
	a 添加openfire系统用户<br />
	b 解压openfire<br />
	c 修改 openfire权限<br />
	d 运行openfire<br />
	2 openfire服务配置<br />
	3 设置openfire自动运行和关闭<br />
	a 设置开机自动运行<br />
	b 设置关机自动关闭<br />
•	四 设置Spark<br />
•	后记：<br />
<span id="more-707"></span><br />
前言<br />
1 什么是OpenFire<br />
Openfire 采用Java开发的开源的实时协作（RTC）服务器,基于XMPP（Jabber）协议。<br />
您可以使用它轻易的构建高效率的即时通信服务器.<br />
Openfire安装和使用都非常简单，并利用Web进行管理。单台服务器可支持上万并发用户。<br />
由于是采用开放的XMPP协议，您可以使用各种支持XMPP协议的IM客户端软件登陆服务<br />
简单的说是类似MSN的实时通信系统<br />
2 什么是PostgreSQL<br />
PostgreSQL是以加州大学伯克利分校计算机系开发的 POSTGRES，版本 4.2为基础的对象关系型数据库管</p>
<p>理系统（ORDBMS）。<br />
阅读指南：所有需要手工录入的部分都用加阴影的字符表示，需要特别注意的地方以【】字符加注.<br />
【开始编译以前,请将ports升级到最新】<br />
一、安装JAVA环境<br />
1 开启linux支持<br />
obsd支持【原生】的java运行环境，只在【编译】java的需要打开linux支持<br />
sysctl kern.emul.linux=1<br />
2 增加数据和堆栈限额(官方建议 非必须)<br />
如果编译的时候出现类似于&#8221;Could not reserve enough space for object heap&#8221;这类的错误,就应该增</p>
<p>加数据和堆栈的限额 ksh zsh bash环境(OB默认的就是ksh)<br />
ulimit -dS 384*1024<br />
ulimit -sS 8*1024<br />
csh tcsh 环境<br />
limit datasize 384m<br />
limit stacksize 8m<br />
本人在512M内存的电脑中编译的时候,没有做这一步,也很顺利的编译通过<br />
3 建立/etc/mk.conf<br />
java编译的时候需要检测/etc/mk.conf下有没有【ACCEPT_JRL_LICENSE=Yes】这个语句,没有的话会提示</p>
<p>错误,因此应当手工建立该文件<br />
我的mk.conf是<br />
DISTDIR=/files/dist<br />
MASTER_SITE_OVERRIDE=ftp://ftp.freebsdchina.org/pub/OpenBSD/distfiles/${DIST_SUBDIR}/<br />
PACKAGE_REPOSITORY=/files/packages<br />
FETCH_CMD=/usr/local/bin/wget<br />
ACCEPT_JRL_LICENSE=Yes<br />
其中<br />
DISTDIR是我指定的下载文件所在位置<br />
PACKAGE_REPOSITORY是我指定的生成pkg的位置<br />
只有【ACCEPT_JRL_LICENSE=Yes】是必须的<br />
4 进入jdk目录开始编译安装<br />
进入jdk的ports<br />
cd /usr/ports/devel/jdk/1.7<br />
a 编译安装jdk<br />
JDK是java的开发环境<br />
make install<br />
b 编译安装jre<br />
JRE是java的运行环境，如果不做开发，只是运行OpenFIRE的话，jre就足够<br />
env SUBPACKAGE=-jre make install<br />
c 下载java编译所需文件<br />
编译java的所需的文件需要【手动复制】到DISTDIR指定的位置<br />
默认是/usr/ports/distfiles<br />
编译所需文件make运行以前会有提示显示编译所需java文件的位置和名称，按提示下载并复制就可以<br />
如果缺少文件的话会有&#8221;Error code 1&#8243;的错误提示,编译所需下载的文件大概是<br />
bsd-jdk15-patches-8.tar.bz2<br />
bsd-jdk16-patches-3.tar.bz2<br />
bsd-jdk16-patches-4.tar.bz2<br />
javaPathHelper-0.3.tar.gz<br />
jdk-1_5_0_14-fcs-bin-b03-jrl-05_oct_2007.jar<br />
jdk-1_5_0_14-fcs-src-b03-jrl-05_oct_2007.jar<br />
jdk-1_5_0_14-solaris-i586.tar.Z<br />
jdk-6u3-fcs-bin-b05-jrl-24_sep_2007.jar<br />
jdk-6u3-fcs-mozilla_headers-b05-unix-24_sep_2007.jar<br />
jdk-6u3-fcs-src-b05-jrl-24_sep_2007.jar<br />
jdk-7-icedtea-plugs-1.6.tar.gz<br />
openjdk7-b24.tar.bz2<br />
(本人下载这些文件用了半天的时间,确切需下载的文件记不清楚了,哪位朋友有完整的下载文件列表,请</p>
<p>帮忙订正) 编译及安装过程大概需要5个小时<br />
5 设置JAVA环境<br />
JAVA的环境可以通过系统变量和用户变量两种方法来设置<br />
系统变量对整个系统中所有用户起作用,用户变量只对设置的用户起作用<br />
文中以jre1.6为例,具体配置根据读者安装的java环境自行修改<br />
a 设置系统变量<br />
建立/etc/profile文件,加入</p>
<p>PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:/usr/local</p>
<p>/jre-1.6.0/bin<br />
export PATH<br />
export JAVA_HOME=/usr/local/jre-1.6.0<br />
export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar<br />
保存退出<br />
b 设置系统变量<br />
修改用户home目录里面的.profile文件,加入【】标示部分<br />
PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/sbin:/usr/local/bin:</p>
<p>【/usr/local/jre-1.6.0/bin】<br />
export PATH<br />
【export JAVA_HOME=/usr/local/jre-1.6.0】<br />
【export CLASSPATH=:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar】<br />
: ${HOME=&#8217;/root&#8217;}<br />
export HOME<br />
umask 022<br />
if [ -x /usr/bin/tset ]; then<br />
        eval `/usr/bin/tset -sQ \?$TERM`<br />
fi<br />
c 测试JAVA环境<br />
重新登陆系统令设置的环境变量生效,输入<br />
java -version<br />
如果显示的是java相关版本信息,说明java已经生效,可以进行取消linux的支持,并进行下一步的安装<br />
(注:本人编译的时候是按照1.7编译的,环境设置都正确,可是java提示错误,可能是ports的问题)<br />
二、安装PostgreSQL<br />
1 安装数据库<br />
进入ports中postgresql，编译安装<br />
cd /usr/ports/databases/postgresql<br />
make install<br />
提示完毕以后，pgsql的客户端已经安装完毕，pgsql的数据库端，需要手动安装<br />
pkg已经在编译pgsql客户端的时候生成了，位置由mk.conf中PACKAGE_REPOSITORY字段定义<br />
默认位置是/usr/ports/packages/i386/all/<br />
cd /usr/ports/packages/i386/all/<br />
pkg_add postgres*<br />
2 建立数据库<br />
a 初始化数据库<br />
su &#8211; _postgresql<br />
mkdir /var/postgresql/data<br />
initdb -D /var/postgresql/data<br />
b 运行数据库<br />
postgres -D /var/postgresql/data<br />
或者<br />
pg_ctl -D /var/postgresql/data -l logfile start<br />
如果没有提示错误，pgsql就已经运行了<br />
c 建立新用户<br />
建立超级用户<br />
createuser 【-P】<br />
Enter name of role to add: 【输入超级用户名】<br />
Enter password for new role:【输入密码】<br />
Enter it again:【确认密码】<br />
Shall the new role be a superuser? (y/n)【 y】<br />
d 建立数据库<br />
createdb -O 【超级用户名】 -E UNICODE 【数据库名称】<br />
3 设置自动运行和关闭<br />
a 设置开机自动运行<br />
在/etc/rc.local中加入<br />
if [ -x /usr/local/bin/pg_ctl ]; then<br />
        echo -n &#8216; postgresql&#8217;<br />
        su -l _postgresql -c &#8220;nohup /usr/local/bin/pg_ctl start \<br />
            -D /var/postgresql/data -l /var/postgresql/logfile \<br />
            -o &#8216;-D /var/postgresql/data&#8217; >/dev/null&#8221;<br />
fi<br />
b 设置关机自动关闭<br />
在/etc/rc.shutdown中加入<br />
if [ -f /var/postgresql/data/postmaster.pid ]; then<br />
        su -l _postgresql -c &#8220;/usr/local/bin/pg_ctl stop -m fast \<br />
             -D /var/postgresql/data&#8221;<br />
        rm -f /var/postgresql/data/postmaster.pid<br />
fi<br />
4 PostgreSQL 优化<br />
a 修改 /etc/sysctl.conf<br />
编辑 /etc/sysctl.conf,加入以下内容<br />
kern.seminfo.semmni=256<br />
kern.seminfo.semmns=2048<br />
kern.shminfo.shmmax=50331648<br />
b 修改/etc/login.conf<br />
编辑/etc/login.conf,加入以下内容<br />
postgresql:\<br />
         <img src='http://www.evanjiang.net.cn/wp-includes/images/smilies/icon_surprised.gif' alt=':o' class='wp-smiley' /> penfiles-cur=768:\<br />
         :tc=daemon:<br />
保存退出后，输入<br />
cap_mkdb /etc/login.conf<br />
重建login.conf.db文件<br />
然后使用vipw或usermod修改postgresql<br />
usermod -L postgresql 【postgresql系统用户名】<br />
其中 -L 指定的是修改的用户的登陆类<br />
c 修改postgresql.conf文件<br />
切换成postgresql用户<br />
su &#8211; _postgresql<br />
修改/var/postgresql/data/postgresql.conf<br />
将max_connections 修改成你需要的并发链接数值,默认是40<br />
保存退出后,重启数据库,输入<br />
pg_ctl -D /var/postgresql/data -l logfile restart<br />
来重启整个数据库,或者输入<br />
pg_ctl -D /var/postgresql/data -l logfile reload<br />
来重新加载postgresql配置文件<br />
三、 安装OpenFIRE<br />
OpenFIRE服务器端最新版本openfire_3_5_1下载<br />
服务器端插件下载<br />
1 服务器端安装<br />
a 添加openfire系统用户<br />
adduser<br />
Enter username []: 【openfire用户名】<br />
Enter full name []:<br />
Enter shell csh ksh nologin sh [ksh]:【回车】<br />
Uid [1000]:【回车】<br />
Login group _openfire [_openfire]:【回车】<br />
Login group is &#8220;_openfire&#8221;. Invite _openfire into other groups: guest no<br />
[no]:【回车】<br />
Login class authpf daemon default postgresql staff [daemon]:【回车】<br />
Enter password []:【输入密码】<br />
Enter password again []:【确认密码】<br />
OK? (y/n) [y]: 【y】<br />
Add another user? (y/n) [y]: 【n】<br />
b 解压openfire<br />
tar xzvf 你的openfire压缩包位置 -C /var<br />
c 修改 openfire权限<br />
cd /var<br />
chown -R 【openfire用户名】:【openfire组名】 openfire/<br />
d 运行open