灌溉梦想,记录脚步

Exchange的备份与恢复

  一. Exchange的备份与恢复概谈
  Exchange备份分为联机备份和脱机备份两种。顾名思义,当运行exchange时执行的备份为联机备份,这类备份往往需要支持exchange的程序来完成,如NTBACKUP以及第三方备份软件针对exchange的数据库提供的解决方案。这类程序按逻辑备份数据,也就是说,备份所有与信息存储相关的数据和所有与目录服务相关的数据。脱机备份则是在服务停止时执行的文件级的备份。
  联机备份
  Exchange 支持四种类型的联机备份:常规或完全、复制、增量和差异。常规备份先备份您的数据库文件,然后备份事务日志文件,之后再从目录中删除事务日志文件。这意味着您可禁用循环日志记录,因为您的备份软件会删除日志文件。因此如果执行常规备份,您就不会遇到日志文件充满驱动器的问题。要还原常规备份,只需要还原上次常规备份集并启动该服务即可。
  增量备份只作用于日志文件,因此仅适用于禁用循环日志记录的情况。象常规备份一样,增量备份也会在备份后将日志文件清除。因此,它提供了在不损害可恢复性的情况下去掉日志文件的另一种方法。要还原增量备份,必须返回到上次常规备份集(其中包含您的数据库文件)。还原这些数据库文件,再还原常规备份后的每个增量备份集,然后启动该服务。请注意,只有当您还原所有的备份集之后,才能启动该服务,否则在备份集之后还原的任何日志都不能向前运行。
  象增量备份一样,差异备份也作用于日志文件,因此若要使用它,就必须禁用循环日志记录。然而与增量备份不同的是,差异备份不删除日志文件。要还原差异备份集,请返回到上次常规备份并还原您的差异备份集(它包含上次常规备份后产生的所有日志文件)。使用增量备份时,只有当您还原了所有的备份集之后,才能启动该服务。
  脱机备份
  任何备份软件都可以执行脱机备份。不过,在还原时脱机备份不能象对应的联机备份一样自动放出所有日志文件。因此,Microsoft 不推荐使用脱机备份进行每日备份。但是,当联机备份失败后,脱机备份就非常重要。
  恢复
  恢复数据的方式取决于您是返回到联机备份还是返回到脱机备份,而还原联机备份比还原脱机备份要容易一些。在每日常规备份中,您只是简单地还原上次常规备份并启动该服务。在常规加增量备份中,您将还原上次常规备份和所有增量集并启动该服务,而 Exchange 会放出所有日志文件。在常规加差异备份中,您将还原上次常规备份,还原上次差异备份,并启动该服务。
  在脱机备份中,您将执行还原目录服务的一个步骤和还原信息存储的另一个步骤。对于目录服务,应还原 DSADATA 目录,必要时使用 Windows NT 注册表在各个不同的驱动器上找到多个 DSADATA 目录。然后,启动该服务。对于信息存储,应还原 MDBDATA 目录(其位置也出现在注册表中),然后运行 Microsoft Exchange Server 下 bin 目录中的 ISINTEG.EXE 程序,并给此程序提供 -patch 命令行选项。然后,停止该服务,它自己应当再次启动。
  二. 如何做
  ü 联机备份
  要使用”备份向导”对 Exchange Server 计算机执行联机备份
  单击开始,指向程序,指向附件,指向系统工具,然后单击备份。或者,在命令提示符处键入 ntbackup。
  在”要备份的内容”对话框中,选择”备份选定的文件、驱动器或网络数据”,然后单击下一步。这将启动联机备份。
  在”要备份的项目”对话框中,展开 Exchange Server 树,选择单位中要备份的任何或所有 Exchange Server 计算机,然后单击下一步。
  备注:您不能选择词语”Microsoft Exchange”旁边变灰的框。必须双击 Microsoft Exchange 或单击加号 (+) 展开 Exchange Server 树。您可以将此树向下展开到任何服务器的目录或信息存储区。
  确认”备份媒体或文件名”框中列出的文件是您要将数据备份到的文件,然后单击下一步。
  单击完成继续进行备份。
  要不使用向导备份 Exchange Server 计算机,请按照以下步骤操作:
  单击开始,指向程序,指向附件,指向系统工具,然后单击备份。或者,在命令提示符处键入 ntbackup。
  在”欢迎使用 Windows 2000 备份及故障恢复工具”对话框中,单击备份选项卡,然后展开 Microsoft Exchange 树。选择单位中要备份的任何或所有 Exchange Server 计算机。备注:您无法选择词语”Microsoft Exchange”旁边变灰的框。您必须双击 Microsoft Exchange 或单击加号 (+) 展开 Exchange Server 树。您可以将此树向下展开到任何服务器的目录或信息存储区。
  确认”备份媒体或文件名”框中列出的文件是您要将数据备份到的文件,然后单击开始备份。
  验证备份作业信息对话框中的信息,然后单击开始备份.
  ü 脱机备份与恢复
  检查工作:
  确定是否为存储组启用循环日志(不要启用)。(exchange系统管理器>存储组->属性->通用,不钩选启用循环日志。)
  确定 Exchange 数据库、流、事务日志和检查点文件的路径位置以及存储组的日志文件前缀。(exchange系统管理器>存储组->属性->通用,记录日志文件前缀(E0n),事务日志位置 (E0n*.log)系统路径位置 (E0n.chk), 数据库路径列在每个 database_name 对象的 Database 属性中,*.stm,*.edb)
  Dismount 要备份的数据库。
  脱机备份
  1. 验证验证数据库文件(.edb 和 .stm 文件)一致且相互匹配。为此,请对每个文件运行以下命令
  eseutil /mh database(*.edb) file | find /i “DB Signature”
  eseutil /mh database file (*.stm)| find /i “DB Signature”
  若两个文件DB签名相同,则说明属于同一文件集。
  eseutil /mh database file ,state=clean shutdown
  2. 将*.edb,*.stm文件备份。
  3. 装入已备份的数据库。
  4. 若稍后要钱滚,则备份所有带编号的事务日志文件(E0nxxxxx.log 文件)。不要备份 E0n.log、Res1.log 和 Res2.log 文件。
  5. 查看检查点文件的标头,以确定可以安全删除的编号最大的日志文件。如果数据库异常停止,检查点将跟踪自动恢复所需的编号最小的日志文件。要查看检查点文件,运行以下命令:eseutil /mk E0n.chk
  6. 令验证已备份日志文件的完整性:eseutil /ml E0n
  脱机恢复
  ”时点”恢复。日志文件不会重放到数据库中。备份后所创建的所有数据都将丢失。存储组中的所有已停止数据库必须一致,并且必须存在有效的检查点文件。不要删除当前的检查点文件或任何现有的日志文件。
  ”前滚”恢复。备份后所创建的日志文件将被播放到数据库中。如果所有日志文件都可用,则备份后所创建的全部数据都可保存下来。如果启用了循环记录,则必须对脱机备份执行”时点”恢复,而不能选择”前滚”恢复。存储组中的所有数据库必须停止且一致,并且生成备份后创建的所有日志文件都必须存在(包括当前的 E0n.log)。必须删除检查点文件。
  ”时点”恢复
  1. 卸除掉要恢复的数据库,并验证其一致,匹配,且检查点有效。
  eseutil /mk E0n.chk | FIND /i “checkpoint”
  eseutil /ml E0n.log | FIND /i “lgeneration” 看检查点是否位于日志中。
  2. 将已备份的 .edb 和 .stm 文件复制到适当的数据库和流式文件位置。
  3. 在Exchange 系统管理器中数据库对象的”数据库”属性内单击以选中 This database can be overwritten by a restore(可以用恢复覆盖此数据库)复选框。
  4. 装入已恢复的数据库。
  ”前滚恢复”
  1. 卸除掉要恢复的数据库。
  2. 检查一致性。
  3. 检查每个数据库标头中记录的日志签名是否为低锚定日志的签名。运行以下命令:
  eseutil /mh database_name | find /i “Log Signature”
  eseutil /ml low_anchor_log | find /i “Signature”
  4. 检查当前数据库路径位置是否与创建备份时的路径位置相同。
  eseutil /ml “Last_Consistent”_log | find /i “database name or pattern”
  5. 从连续序列中尽可能靠前的低锚定编号开始,收集所有日志,并将这些日志复制到当前的事务日志路径中。
  6. 验证所有日志是否共享同一日志签名并处于连续序列中。
  eseutil /ml E0n > 20049995942.htm.txt
  7. 如果高锚定日志尚未命名为 E0n.log,则重命名它。
  8. 从”系统路径”文件夹中删除 E0n.chk 文件。
  9. 作为装入存储组前的最后一步检查,请验证以下几个方面:
  ü 所有数据库文件都存在于其运行路径中。
  ü 运行事务日志路径中仅有的日志文件从低锚定日志开始,并至少持续到高锚定日志,其中编号最大的可用日志名为 E0n.log。
  ü “系统路径”文件夹中没有 E0n.chk 文件。
  10. 如果信息存储尚未运行,请启动它,然后至少在存储组中装入一个数据库。
  三. 数据库故障处理
  当无法mount上数据库时,按下列步骤操作
  1. 尝试启动信息存储,看错误提示和事件日志。
  2. 检查一致性
  eseutil /mh databasename
  3. 若state=dirty shutdown,则不要remove log
  若state=clean shutdown,则把log移出,转到第11步。
  4. 不一致执行软恢复eseutil /r
  成功再检查一致性,转到第9步。
  5. 若磁盘空间不足,执行碎片整理(eseutil /d)
  6. 数据库不一致并且软恢复不成功
  删除mdbdata中的所有Log文件,还有chk文件,以及temp.edb文件。
  7. 执行eseutil /p,恢复到一致状态。
  8. 将数据库装入一次,并马上卸除。
  9. 使用 Isinteg.exe 修复 Pub1.edb 数据库和 Priv1.edb 数据库(isinteg -s (servername) -fix -test alltests)
  10. 如果能够启动信息存储服务,而且信息存储较为稳定,并且在多次运行 Isinteg.exe 后仍报告同样的错误和警告,请使用 ExMerge 实用工具,通过将数据导出为 .pst 格式,然后将其重新导入新的或干净的数据库结构中来重建信息存储。
  11. 重新启动信息存储,mount 存储。
  12. 做一次全备份。
  四. 其它信息
  .edb 和 .stm 文件是所有数据库信息的最终储存库。在大多数情况下,应将这两个文件视为一个文件;请一前一后地备份和恢复这两个文件。这两个文件必须在时间上相互保持同步;在某一天备份的 .edb 文件不能匹配在另一天备份的流式文件。为避免对哪些日志文件属于各个存储组产生混乱,以唯一的日志前缀命名属于指定存储组的 Exchange 日志,该前缀是文件名的前三个字符,存储组的当前日志文件总是 E0n.log。事务日志的大小统一为 5 MB。如果当前日志文件已满,将用十六进制序列号(称为日志生成编号)将其重命名,并生成新的当前日志文件。日志文件被编号为 E0n00001.log、E0n00002.log,依此类推。带编号的日志文件一般被指定为 E0nxxxxx.log。
  如果数据库异常停止,则检查点文件 (E0n.chk) 将记录作为恢复起点的事务日志,恢复必须从此起点处开始重放,以恢复数据库一致性。该过程称为”软恢复”。软恢复与”硬恢复”相对,后者是在恢复联机备份后重放日志文件的过程。软恢复和硬恢复之间最重要的区别是:在硬恢复期间,将修补文件数据插入了日志文件重放过程。不一致的 Exchange 数据库文件是没有将所有未完成事务全部写入其中的文件。在正常操作期间,Exchange 数据库文件是不一致的,因为在缓存中存在尚未物理写入该文件的信息。通常,只有数据库服务正常关闭后,Exchange 数据库文件才被认为是一致的。不过,数据库作为一个整体(该整体被认为是事务日志和数据库文件中的信息总和)始终是一致的,除非所需的日志文件被过早删除。
  处理数据库签名与路径不匹配问题
  与日志文件一样,数据库也有自己的签名。不同的是,虽然自创建 E0n000001.log 文件之后日志签名不会再更改,但每当数据库的物理拓扑改变时,数据库签名将会更改,并且不通过日志文件对这些更改进行跟踪。使用 Eseutil 对数据库进行脱机碎片整理或修复时,会更改 DB 签名。经过这样的事件后,数据库可以附加到先前的同一日志流,但它将不接受数据库具有先前签名时所执行的所有事务的重放。数据库的以前副本不接受数据库签名更改后所执行的任何事务的重放。由于数据库签名以这种方式重置,因此强烈建议您在对数据库进行脱机碎片整理或修复后,立即创建完全数据库备份。如果您以后恢复具有旧签名的数据库副本,将会成功重放到签名更改点,但您将会丢失该点之后的所有更改。如果在日志流中间更改了数据库路径,其效果与更改签名类似:重放将在更改点中断。(联机备份 API 提供了一种手段,可以在恢复过程中重新映射路径;因此,即使在创建备份后更改了路径,联机备份 API 也可以完全重放日志。)

top命令详解

  top命令是Linux下常用的性能分析工具,能够实时显示系统中各个进程的资源占用状况,类似于Windows的任务管理器。下面详细介绍它的使用方法。
  top – 01:06:48 up 1:22, 1 user, load average: 0.06, 0.60, 0.48
  Tasks: 29 total, 1 running, 28 sleeping, 0 stopped, 0 zombie
  Cpu(s): 0.3% us, 1.0% sy, 0.0% ni, 98.7% id, 0.0% wa, 0.0% hi, 0.0% si
  Mem: 191272k total, 173656k used, 17616k free, 22052k buffers
  Swap: 192772k total, 0k used, 192772k free, 123988k cached
  PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
  1379 root 16 0 7976 2456 1980 S 0.7 1.3 0:11.03 sshd
  14704 root 16 0 2128 980 796 R 0.7 0.5 0:02.72 top
  1 root 16 0 1992 632 544 S 0.0 0.3 0:00.90 init
  2 root 34 19 0 0 0 S 0.0 0.0 0:00.00 ksoftirqd/0
  3 root RT 0 0 0 0 S 0.0 0.0 0:00.00 watchdog/0
  统计信息区
  前五行是系统整体的统计信息。第一行是任务队列信息,同 uptime 命令的执行结果。其内容如下:
  01:06:48 当前时间
  up 1:22 系统运行时间,格式为时:分
  1 user 当前登录用户数
  load average: 0.06, 0.60, 0.48 系统负载,即任务队列的平均长度。
  三个数值分别为 1分钟、5分钟、15分钟前到现在的平均值。
  第二、三行为进程和CPU的信息。当有多个CPU时,这些内容可能会超过两行。内容如下:
  Tasks: 29 total 进程总数
  1 running 正在运行的进程数
  28 sleeping 睡眠的进程数
  0 stopped 停止的进程数
  0 zombie 僵尸进程数
  Cpu(s): 0.3% us 用户空间占用CPU百分比
  1.0% sy 内核空间占用CPU百分比
  0.0% ni 用户进程空间内改变过优先级的进程占用CPU百分比
  98.7% id 空闲CPU百分比
  0.0% wa 等待输入输出的CPU时间百分比
  0.0% hi
  0.0% si
  最后两行为内存信息。内容如下:
  Mem: 191272k total 物理内存总量
  173656k used 使用的物理内存总量
  17616k free 空闲内存总量
  22052k buffers 用作内核缓存的内存量
  Swap: 192772k total 交换区总量
  0k used 使用的交换区总量
  192772k free 空闲交换区总量
  123988k cached 缓冲的交换区总量。
  内存中的内容被换出到交换区,而后又被换入到内存,但使用过的交换区尚未被覆盖,
  该数值即为这些内容已存在于内存中的交换区的大小。
  相应的内存再次被换出时可不必再对交换区写入。
  进程信息区
  统计信息区域的下方显示了各个进程的详细信息。首先来认识一下各列的含义。
  序号 列名 含义
  a PID 进程id
  b PPID 父进程id
  c RUSER Real user name
  d UID 进程所有者的用户id
  e USER 进程所有者的用户名
  f GROUP 进程所有者的组名
  g TTY 启动进程的终端名。不是从终端启动的进程则显示为 ?
  h PR 优先级
  i NI nice值。负值表示高优先级,正值表示低优先级
  j P 最后使用的CPU,仅在多CPU环境下有意义
  k %CPU 上次更新到现在的CPU时间占用百分比
  l TIME 进程使用的CPU时间总计,单位秒
  m TIME+ 进程使用的CPU时间总计,单位1/100秒
  n %MEM 进程使用的物理内存百分比
  o VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
  p SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
  q RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
  r CODE 可执行代码占用的物理内存大小,单位kb
  s DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
  t SHR 共享内存大小,单位kb
  u nFLT 页面错误次数
  v nDRT 最后一次写入到现在,被修改过的页面数。
  w S 进程状态。
  D=不可中断的睡眠状态
  R=运行
  S=睡眠
  T=跟踪/停止
  Z=僵尸进程
  x COMMAND 命令名/命令行
  y WCHAN 若该进程在睡眠,则显示睡眠中的系统函数名
  z Flags 任务标志,参考 sched.h
  默认情况下仅显示比较重要的 PID、USER、PR、NI、VIRT、RES、SHR、S、%CPU、%MEM、TIME+、COMMAND 列。可以通过下面的快捷键来更改显示内容。
  更改显示内容
  通过 f 键可以选择显示的内容。按 f 键之后会显示列的列表,按 a-z 即可显示或隐藏对应的列,最后按回车键确定。
  按 o 键可以改变列的显示顺序。按小写的 a-z 可以将相应的列向右移动,而大写的 A-Z 可以将相应的列向左移动。最后按回车键确定。
  按大写的 F 或 O 键,然后按 a-z 可以将进程按照相应的列进行排序。而大写的 R 键可以将当前的排序倒转。
  命令使用
  1. 工具(命令)名称
  top
  2.工具(命令)作用
  显示系统当前的进程和其他状况; top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示系统中CPU最”敏感”的任务列表.该命令可以按CPU使用.内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定.
  3.环境设置
  在Linux下使用。
  4.使用方法
  4.1使用格式
  top [-] [d] [p] [q] [c] [C] [S] [s] [n]
  4.2参数说明
  d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。
  p 通过指定监控进程ID来仅仅监控某个进程的状态。
  q该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。
  S 指定累计模式
  s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。
  i 使top不显示任何闲置或者僵死进程。
  c 显示整个命令行而不只是显示命令名
  4.3其他
  下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。
  Ctrl+L 擦除并且重写屏幕。
  h或者? 显示帮助画面,给出一些简短的命令总结说明。
  k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。
  i 忽略闲置和僵死进程。这是一个开关式命令。
  q 退出程序。
  r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。
  S 切换到累计模式。
  s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。
  f或者F 从当前显示中添加或者删除项目。
  o或者O 改变显示项目的顺序。
  l 切换显示平均负载和启动时间信息。
  m 切换显示内存信息。
  t 切换显示进程和CPU状态信息。
  c 切换显示命令名称和完整命令行。
  M 根据驻留内存大小进行排序。
  P 根据CPU使用百分比大小进行排序。
  T 根据时间/累计时间进行排序。
  W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

使用yum来安装LAMP

安装vsftp
[root@Server Server]# rpm -ivh vsftpd-2.0.5-10.el5.i386.rpm
warning: vsftpd-2.0.5-10.el5.i386.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:vsftpd ########################################### [100%]
建立yum本地server
[root@Server Server]# rpm -ivh createrepo-0.4.4-2.fc6.noarch.rpm
warning: createrepo-0.4.4-2.fc6.noarch.rpm: Header V3 DSA signature: NOKEY, key ID 37017186
Preparing… ########################################### [100%]
1:createrepo ########################################### [100%]
[root@Server Server]# service vsftpd start
为 vsftpd 启动 vsftpd: [确定]
[root@Server Server]# chkconfig vsftpd on
[root@Server Server]# chkconfig –list vsftpd
vsftpd 0:关闭 1:关闭 2:启用 3:启用 4:启用 5:启用 6:关闭
[root@Server cdrom]# service vsftpd status
vsftpd (pid 2912) 正在运行…
复制光盘文件到ftp目录
[root@Server cdrom]# cp -rf . /var/ftp/pub
[root@Server cdrom]# createrepo /var/ftp/pub/
2258/2258 – Server/pvm-gui-3.4.5-7.fc6.1.i386.rpm i386.rpm
Saving Primary metadata
Saving file lists metadata
Saving other metadata
[root@Server yum.repos.d]# cp rhel-debuginfo.repo install.repo
[root@Server yum.repos.d]# vi install.repo
以上建立好yum服务器之后,就开始下面的正题了:
1:安装apache
yum install httpd httpd-devel

2:安装mysql
yum install mysql mysql-server mysql-devel

3:安装php
yum install php php-mysql php-common php-gd php-mbstring php-mcrypt php-devel php-xml
4:启动apache
测试php
建立以下文件/var/www/html/test.php
编辑其内容
// test.php

5:测试
在浏览器中输入:http://IP/test.php
看是否显示PHP的信息
6:设置开机启动
chkconfig httpd on

7:根据自己的需要安装phpmyadmin和webmin

以上配置在RHEL5.1中实现
关于MySQL的配置这里没有给出详细的过程,如设置密码,创建一个简单的数据库等都没有给出一个详细的过程。
如果打算深入的学习linux,我建议你编译安装。如果你仅仅为了使用linux,那么用yum来安装LAMP。

Mysql主从数据库设置

  mysql数据库同步方法
  1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加
  server-id=1
  log-bin=binlog_name
  2、主库增加用户,用于从库读取主库日志。
  grant replication slave,reload,super on *.* to 'slave'@'192.%' identified by '123456'
  3、从库连接主库进行测试。mysql -u slave -p123456 -h 192.168.0.205
  4、停从库,修改从库/etc/my.cnf,增加选项:
  [mysqld]
  server-id=2
  master-host=192.168.0.205
  master-user=slave
  master-password=123456
  5、启动从库,进行主从库数据同步
  /opt/mysql/share/mysql/mysql start
  /opt/mysql/bin/mysql -u root -p
  mysql>load data from master;
  说明:这一步也可以用数据库倒入或者直接目录考过来。
  6、进行测试:
  主库创建表,
  mysql>create database sampdb;
  mysql>create table new (name char(20),phone char(20));
  mysql>insert into new ('abc,'0532555555');
  打开从库,察看:
  /opt/mysql/bin/mysql -u root -p
  mysql>show database;
  mysql
  sampdb
  test
  mysql>use sampdb;
  mysql>show tables;
  new
  说明主从数据库创建成功。
  7、主从数据库相关命令:
  slave stop; slave start ;
  开始停止从数据库。
  show slave status\G;
  mysql数据库同步测试方法
  1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加
  server-id=1
  log-bin=binlog_name
  2、主库增加用户,用于从库读取主库日志。
  grant replication slave,reload,super on *.* to 'slave'@'211.%' identified by '123456'
  3、从库连接主库进行测试。mysql -u slave -p123456 -h 192.168.4.12
  4、停从库,修改从库/etc/my.cnf,增加选项:
  [mysqld]
  server-id=2
  master-host=192.168.0.205
  master-user=slave
  master-password=123456
  5、启动从库,进行主从库数据同步
  /opt/mysql/share/mysql/mysql start
  /opt/mysql/bin/mysql -u root -p
  mysql>load data from master;
  说明:这一步也可以用数据库倒入或者直接目录考过来。
  6、进行测试:
  主库创建表,
  mysql>create database sampdb;
  mysql>create table new (name char(20),phone char(20));
  mysql>insert into new ('abc,'0532555555');
  打开从库,察看:
  /opt/mysql/bin/mysql -u root -p
  mysql>show database;
  mysql
  sampdb
  test
  mysql>use sampdb;
  mysql>show tables;
  new
  说明主从数据库创建成功。
  7、主从数据库相关命令:
  slave stop; slave start ;
  开始停止从数据库。
  问题发现:
  当把这些都弄清楚的时候才发现,数据库本身没有问题.出问题的是mysql用户突然消失.可能是很久以前修改密码时弄丢了.
  增加了用户,并授权
  chown -R root .
  chown -R mysql data
  chgrp -R mysql .
  启动 ok

用JSP实现数据库图片的存储与显示实例

  1. 序言
  数据库应用程序,特别是基于WEB的数据库应用程序,常会涉及到图片信息的存储和显示。
  通常我们使用的方法是将所要显示的图片存在特定的目录下,在数据库中保存相应的图片的名称,在JSP中建立相应的数据源,利用数据库访问技术处理图片信息。但是,如果我们想动态的显示图片,上述方法就不能满足需要了。我们必须把图片存入数据库,然后通过编程动态地显示我们需要的图片。实际操作中,可以利用JSP的编程模式来实现图片的数据库存储和显示。
  2. 建立后台数据库
  if exists (select * from dbo.sysobjects
  where id = object_id(N'[dbo].[p]’) and OBJECTPROPERTY(id, N’IsUserTable’) = 1)
  drop table [dbo].[p]
  GO
  Create TABLE [dbo].[p] (
  [picid] [int] IDENTITY (1, 1) NOT NULL ,
  [picname] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
  [pic] [image] NULL
  ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
  GO
  3.向数据库存储二进制图片
  启动Dreamweaver MX后,新建一个JSP文件。其代码如下所示。
  <%@ page contentType=”text/html;charset=gb2312″%>
  <%
  String path = request.getContextPath();
  String basePath = request.getScheme()+”://”+request.getServerName()
  +”:”+request.getServerPort()+path+”/”;
  %>
  <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
  <html>
  <head>
  <base href=”<%=basePath%>”>
  <title>My JSP ‘InputImage.jsp’ starting page</title>
  <meta http-equiv=”pragma” content=”no-cache”>
  <meta http-equiv=”cache-control” content=”no-cache”>
  <meta http-equiv=”expires” content=”0″>
  <meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
  <meta http-equiv=”description” content=”This is my page”>
  <!–
  <link rel=”stylesheet” type=”text/css” href=”styles.css”>
  –>
  </head>
  <body>
  <form action=”testimage.jsp” method=”POST”><br>
  题目<input name=”picname” type=”text”><br>
  图片<input name=”pic” type=”file”><br>
  <input type=”Submit” name=”button1″ value=”提交”><br>
  </form>
  </body>
  </html>
  将此文件保存为InputImage.jsp文件,其中testimage.jsp文件是用来将图片数据存入数据库的,具体代码如下所示:
  <%@ page contentType=”text/html;charset=gb2312″%>
  <%@ page import=”java.sql.*” %>
  <%@ page import=”java.util.*”%>
  <%@ page import=”java.text.*”%>
  <%@ page import=”java.io.*”%>
  <jsp:useBean id=”conn” scope=”page” class=”dbconn.DBResult”/>
  <%
  String path = request.getContextPath();
  String basePath = request.getScheme()+”://”+request.getServerName()+
  ”:”+request.getServerPort()+path+”/”;
  %>
  <!DOCTYPE HTML PUBLIC “-//W3C//DTD HTML 4.01 Transitional//EN”>
  <html>
  <head>
  <base href=”<%=basePath%>”>
  <title>My JSP ‘testimage.jsp’ starting page</title>
  <meta http-equiv=”pragma” content=”no-cache”>
  <meta http-equiv=”cache-control” content=”no-cache”>
  <meta http-equiv=”expires” content=”0″>
  <meta http-equiv=”keywords” content=”keyword1,keyword2,keyword3″>
  <meta http-equiv=”description” content=”This is my page”>
  <!–
  <link rel=”stylesheet” type=”text/css” href=”styles.css”>
  –>
  </head>
  <body>
  <%
  request.setCharacterEncoding(“gb2312”);
  //建立Statement对象
  String picname=request.getParameter(“picname”);
  String pic=request.getParameter(“pic”);
  //获得所要显示图片的标题、存储路径、内容,并进行中文编码
  FileInputStream str=new FileInputStream(pic);
  String sql=”insert into p(picname,pic) values(?,?)”;
  PreparedStatement pstmt=conn.getPreparedStatement(sql);
  pstmt.setString(1,picname);
  pstmt.setBinaryStream(2,str,str.available());
  pstmt.execute();
  //将数据存入数据库
  out.println(“Success,You Have Insert an Image Successfully”);
  %>
  </body>
  </html>

cacti添加apache状态信息

  对Apache Server Status的启用状态信息
  对Apache的状态管理的模块是LoadModule status_module modules/mod_status.so,所以这个需要有
  然后打开下面的配置
  ExtendedStatus On
  配置Apache Server Status的权限
  <location /server-status>
  SetHandler server-status
  Order Deny,Allow
  Deny from all
  Allow from 10.0.10.22
  </location>

  下载CACTI模板和脚本
  http://forums.cacti.net/about25227.html&highlight=apachestats
  在上面的地址下载一个叫 ApacheStats08.zip的,中间有二个文件,一个处理脚本php的,另一个是xml的文件.
  1.其中的ss_apache_stats.php是脚本文件,它是一个php的文件,放到你的cacti/scripts/下面.
  2.接下来在cacti界面导入cacti_host_template_webserver_-_apache.xml这个文件
  3.你就可以在cacti中加入这些设置.就不细写了,如下
  被监测的apache服务器需要向上面一样,打开mod_status功能,记的设置好权限访问

系统平均负载(Load average)

  

        在Linux系统中,uptime、w、top等命令都会有系统平均负载load average的输出.
  系统平均负载被定义为在特定时间间隔内运行队列中的平均进程树。
  如果一个进程满足以下条件则其就会位于运行队列中:
  - 它没有在等待I/O操作的结果
  - 它没有主动进入等待状态(也就是没有调用’wait’)
  - 没有被停止(例如:等待终止)
  例如:
  [root@www2 init.d]# uptime
  7:51pm up 2 days, 5:43, 2 users, load average: 8.13, 5.90, 4.94
  命令输出的最后内容表示在过去的1、5、15分钟内运行队列中的平均进程数量。
  一般来说只要每个CPU的当前活动进程数不大于3那么系统的性能就是良好的,如果每个CPU的任务数大于5,那么就表示这台机器的性能有严重问题。对于上面的例子来说,假设系统有两个CPU,那么其每个CPU的当前任务数为:8.13/2=4.065。这表示该系统的性能是可以接受的。