发布新日志

  • Mysql字符集

    2013-02-28 11:57:45

    • Mysql字符集
      • Mysql服务器允许同时使用多种字符集
      • 一种给定的字符集可以有一种或多种多种排序方式。你可以为应用程序挑选一种最使用的派讯方式
      • Unicode支持utf8和ucs2字符集提供,从Mysql6.0.4版开始有更多的字符集可供选用
      • 你可以在服务器、数据库、数据表、数据列和字符串常数等级别设定字符集
        • 服务器有一个默认的字符集
        • CREATE DATABASE语句可以用来设定数据库级字符集,ALTER DATABASE语句可以改变设定的数据库级字符集
        • CREATE TABLE和ALTER TABLE语句有专门用来设定数据表级和数据列级的子句
        • 用于字符串常数的字符集既可以通过上下文设定,也可以明确设定
      • 既有用来转换数据值的字符集和函数和操作符,也有用来判断数据值的字符集的函数和操作符。COLLATE操作符可以用来改变某个字符串的排序方式,而COLLATE()函数将返回某给定字符串的排序方式
      • SHOW语句和INFORMATION_SCHEMA数据表提供了关于可用字符集和排序方式的信息
      • 当你改变某个带索引的字符类型的数据列时,Mysql服务器将自动对索引进行重新排序
      • 服务器的默认字符集和排序方式是在当初编译时内建的,但我们可用在启动服务器时使用--cahracter-set-server和--collation-server选项,或是在服务器启动后设置character-set-server和collation-server系统变量来覆盖它们
      • 如果只选定了字符集,它的默认排序方式就将称为服务器的默认排序方式,如果想选定一种排序方式,必须让它与字符集保持兼容
      • 通过SHOW CHARACTER SET;SHOW COLLATION;查看系统支持的字符集和排序方式
      • 通过SHOW VARIABLES LIKE 'character\_set\_%'  show variables like 'collation%',显示Mysql服务器的当前字符集和排序方式的设置情况
  • Mysql数据库和数据表命名规则

    2013-02-28 11:56:31

    • Windows文件名不区分字母的大小写,所以运行在windows主机上的msyql服务器也就不区分数据库和数据表名字的字母大小写,运行在unix主机上的mysql服务器往往要区分数据库和数据表名字的大小写,因为unix文件系统是区分字母大小写的。当你在一台区分文件名字母大小写的机器上创建数据库和数据表时,避免字母大小写问题演变成棘手的问题的办法之一,是选定一种字母大小写方案,一直遵照该方案去创建数据表和数据库,这样一来,等你日后想把某个数据库迁移到不同的服务器上时,名字的大小写问题就不存在了。建议是统一使用小写字母,这在你使用innodb数据表时也有益处,因为innodb引擎在其内部是把数据库和数据表的名字保存为小写字母的
      • 如果想统一使用小写字母来创建数据库和数据表名字--就算没在create语句里特意设定也能通过设置lower_case_table_name系统变量来配置服务器
  • Mysql服务器的sql模式

    2013-02-28 11:55:07

    • Mysql服务器有一个名为sql_mode的系统变量可以让你调控其sql模式,各个客户可以通过改变这个模式来影响它们对Mysql服务器的连接,这意味着任何一个客户都可以在不影响其他客户的前提下改变mysql服务器对自己的反应
      • STRICT_ALL_TABLES和STRICT_TRANS_TABLES将启用严格模式。Mysql服务器在接受“坏”数据值方面讲更加严格
      • TRADITIONAL是另一种复合模式,类似于严格模式,单启用了其他几种引入额外限制条件的模式以进行更加严格的数据检查
      • ANSI_QUOTES告诉Mysql服务器把双引号识别为一个标示符引用字符(启用了ANSI_QUOTES还有一个额外的效果--字符串值必须用单引号写出,如果使用双引号,mysql服务器将把该值解释为标示符而不是字符串)
      • PIPES_AS_CONCAT将导致“||”字符串被视为一个标准的SQL字符串合并操作,而不是“OR”操作的一个同义词
      • ANSI是一种复合模式,它将同时启用ANSI_QUOTES、PIPES_AS_CONCAT和另外几种模式值,其结果是让Mysql服务器的行为比它默认运行状态更接近于标准SQL
      • IGNORE_SPACE内建函数名将视为保留字
                   实现方法
      • 可以在mysqld命令上或是某个选项文件里使用sql_mode选项(--sql-mode="TRADITIONAL,PIPES_AS_CONCAT")
      • 可以在运行时改变sql模式,可以使用条set语句来设置sql_mode系统变量(SET sql_mode="TRADITIONAL,PIPES_AS_CONCAT")
      • 如果需要对sql模式做全局性设置,需要加上global关键字(SET GLOBAL sql_mode="TRADITIONAL,PIPES_AS_CONCAT")设置全局变量需要具备super管理权限,新设置值将成为此后连接的所有客户的模式sql模式
      • 如果想知道会话级或全局级sql模式的当前值(select @@session.sql_mode,@@global.sql_mode;)
  • 以二进制程序包形式安装mysql

    2013-02-26 17:52:03


    1.下载mysql二级制程序包
    2.通过md5和pgp校验
    3.安装部署
    shell> groupadd mysql
    shell> useradd -r -g mysql mysql
    shell> cd /usr/local
    shell> tar zxvf /path/to/mysql-VERSION-OS.tar.gz
    shell> ln -s full-path-to-mysql-VERSION-OS mysql
    shell> cd mysql
    shell> chown -R mysql .
    shell> chgrp -R mysql .
    shell> scripts/mysql_install_db --user=mysql --datadir=/mysql/data
    shell> chown -R root .
    shell> chown -R mysql data
    shell> cp support-files/my-default.cnf /etc/my.cnf
    shell> cp support-files/mysql.server /etc/init.d/mysqld
    shell> chkconfig --add mysqld
    4.执行测试脚本
    /usr/local/mysql/mysql-test/mysql-test-run.pl

  • 将mysql设置为自动启动

    2013-02-26 15:45:52

    1.将启动文件copy到启动目录中
    cp support-files/mysql.server /etc/init.d/mysqld
    2.添加chkconfig配置
     chkconfig --add mysqld
    3.重启
  • mysql无法登录报mysql.sock问题解决方法

    2013-02-26 15:42:19

    错误信息:
    ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)

    解决方法:
    修改/etc/my.conf:添加以下内容

    [mysqld] 
    datadir=/usr/local/mysql/data 

    socket=/var/lib/mysql/mysql.sock 

    [client] 

    socket=/var/lib/mysql/mysql.sock 

    (注意:红色标记部分文件路径必须相同)
  • 下载文件的GnuPG Signature校验

    2013-02-26 13:01:33

    1.Linux平台 Signature校验
    •  http://pgp.mit.edu/. 输入 mysql-build@oss.oracle.com后下载PGP public key到扩展名为asc的本地文件中
    • 在Mysql官方网站中下载GnuPG Signature并另存为mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz.asc(asc前面的内容要和你要校验的安装包一致)
    • 看到Good signature就ok了
    2.Windows平台 Signature校验
       参考mysql官方文档,很详细了就不写了http://dev.mysql.com/doc/refman/5.6/en/checking-gpg-signature-windows.html
  • 下载文件后md5校验

    2013-02-26 11:22:42

    最近在学mysql,其中下载安装程序后你可以拿官网提供的md5对下载后的文件进行校验防止下载后的文件被别人做手脚

    首先要下载一个mysql的安装程序 mysql-5.6.10-linux-glibc2.5-x86_64.tar.gz
    1. 在windows平台做md5校验
    • 通过http://www.nullriver.com/downloads/Install-winMd5Sum.exe 下载一个windows平台的md5校验程序
    • 安装并打开程序
    • 在FileName中选择mysql安装程序,在Compare输入mysql官方网站获得的md5码
    • 点击Compare

    2.在Linux平台做md5校验
    • 基本上md5sum命令默认会安装



  • 多台Linux服务器SSH相互访问无需密码

    2013-02-22 12:07:41

    1.在踏板机上生成远程登录的密钥对,并且取回私钥,实现客户机和踏板机的无密码登录
    注意事项:
    a.踏板机上尽量只处理登录服务,不做其他的事情
    b.踏板机控制只能认可的ip才能进行远程登录
    c.更改sshd的默认端口22

    操作方法:
    当前用户为A
    1.ssh-keygen -t rsa   //生成A用户的踏板机远程登录的密钥对
    2.ssh-copy-id -i id_rsa.pub "127.0.0.1" //将公钥转换到A用户的~/.ssh/authorized_keys中
    3.chmod 700 /home/A/.ssh //将A用户的/home/A/.ssh设置为700权限
    4.chmod 600 /home/A/.ssh/authorized_keys   //将authorized_keys设置为600权限,权限不对会导致密钥登录失败
    5.从踏板机中取回私钥
    6.su - //切换成root用户
    7.vim /etc/ssh/sshd_config //修改sshd的配置文件只允许密钥登录,并且修改ssh服务端口默认值
    PasswordAuthentication no //禁止使用基于口令认证的方式登陆
    PubkeyAuthentication yes //允许使用基于密钥认证的方式登陆
    Port 10022
    8.service sshd restart   //更新配置文件后重启sshd服务


    2.在踏板机上生成局域网访问的密钥对,私钥保存在踏板机上,公钥赋给服务器
    注意事项:
    a.最好要为服务器之间相互访问创建一个新的用户组和用户,不要默认客户机登录的远程用户


    操作方法:
    //以下操作是在踏板机端
    1.groupadd administrators //创建administrators用户组
    2.useradd admin01 -g administrators;passwd //创建属于administrators用户组的一个用户admin01
    3.su admin01 //由于admin01没有登录密码,所以先su成root,再通过root su成admin01这样会绕过密码环节
    4.mkdir ~/.ssh;chmod 700 ~/.ssh //将admin01用户的/home/admin01/.ssh设置为700权限
    5.ssh-keygen -t rsa //生成admin01用户的踏板机远程登录的密钥对,主要不要输入密码否则踏板机远程登录服务器的话还是需要输入密码的
    //以下操作是在服务端
    6.groupadd administrators;useradd admin01 -g administrators;passwd //在服务器端也建立属于administrators组的admin01 账号
    7.mkdir /home/admin01/.ssh;chmod 700 /home/admin01/.ssh //将admin01用户的/home/admin01/.ssh设置为700权限\
    //以下操作是在踏板机端并且以admin01用户登录
    8.ssh-copy-id -i id_rsa.pub "-p 22 admin01@192.168.1.44" //将公钥传到服务器的admin01用户的~/.ssh/authorized_keys中
    //以下操作是在服务端并且以root身份登录
    9.chmod 600 /home/admin01/.ssh/authorized_keys   //将authorized_keys设置为600权限,权限不对会导致密钥登录失败
    10.vim /etc/ssh/sshd_config //修改sshd的配置文件只允许密钥登录
    PasswordAuthentication no //禁止使用基于口令认证的方式登陆
    PubkeyAuthentication yes //允许使用基于密钥认证的方式登陆

    11.service sshd restart   //更新配置文件后重启sshd服务
  • 时钟同步

    2013-02-21 15:40:33

      linux的时钟
                               硬件时钟:hwclock
                               系统时钟:date
                          同步系统时钟命令:hwclock --hctosys
                                                        hwclock --systohc
        网络时钟同步
            • NTP主要用于调节系统时钟从而与外部时间源达到同步
            • 建议管理员在自己管理的网络中至少建立一台时间服务器来同步本地时间,这样可以使得在不同的系统上处理和收集日志和管理更加容易。此外如果用户使用集群服务器,一般会在内网配置本地NTP服务器
            • 如果无法与Internet连接,可以指定内部的一些主机作为时间服务器,虽然这种方案无法与标准时间严格同步,但是却可以保证内部主机之间时间同步
            • 客户端可以通过ntpdate命令与远程ntp服务器进行同步(需要yum install ntp)
      • Centos系统出现启动异常时

        2013-02-21 13:38:52

        Centos系统出现启动异常时,就需要进入单用户模式或修复模式对系统进行管理了。

        使用单用户模式有一个前提,就是你的系统引导器GRUB能正常工作,否则要进行系统维护就要使用修复模式

        单用户模式
        • 当系统进入单用户模式,不需要输入用户名和口令,系统启动完成后将直接获得管理员root的权限,控制台的提示符为“#”
        • 只有根文件系统是可读写的,系统管理员才能对系统进行维护
        • 单用户模式的一个典型应用是root用户的“口令设置”,可以进入单用户模式更改root用户的口令
        • 维护系统的分区、LVM和文件系统、进行系统备份和恢复 都可以进入单用户模式
              操作方法:按“e”键编辑“kernel”菜单项,在行末输入single,告诉linux内核后续的启动过程需要进入单用户模式

        修复模式

        步骤1:在BIOS中,设置首个启动启动器为cdrom
        步骤2:使用CentOS安装光盘启动
        骤3:选择进入修复模式 (linux rescue)
        步骤4:选择语言和键盘类型
        步骤5:配置网络连接
        步骤6:挂载硬盘上的文件系统
        1. 由于修复模式常用于对不能正常启动的硬盘进行修复,需要更新硬盘文件系统中的文件内容,隐藏通常选择以“可读可写”的方式挂载硬盘
        2. 以只读方式挂载硬盘文件系统常用于对硬盘数据进行备份,并可避免硬盘中的现有数据被更改
        步骤7:进入修复模式
        1. 当用户进入修复模式后,会获得root用户权限,硬盘中的整个根文件系统已经被挂载到目录/mnt/sysimage中
        2. 执行相应的命令对硬盘中的系统进行修复
        3. 修改系统不能正确启动的错误,例如误编辑了与启动相关的配置脚本(/etc/inittab、/etc/rc.d/rc.sysinit等)
        4. 在单用户模式下实施的系统维护工作在修复模式下也能做

      • Centos系统启动过程

        2013-02-21 11:34:59

        第一步:BIOS自检

        第二步:引导装载程序:装载第一块硬盘的前512字节的物理数据扇区MBR到内存中,位于此扇区开始位置的应道装载程序GRUB接管系统

        第三步:加载RAM盘

        第四步:在RAM盘中运行init:这个程序执行装入真正的根文件系统所需要的所有操作
        1. 装载内核模块
        2. 管理RAID和LVM
        3. 加载最终的根文件系统
        第五步:运行根文件系统上的init
        A./etc/rc.d/rc.sysinit--系统初始化脚本
        1. 挂载/proc文件系统
        2. 设置系统时钟
        3. 系统一般的环境变量设置(如主机名)
        4. 初始化USB和HID设备
        5. 设置PnP
        6. 加载键盘映射
        7. 加载系统字体
        8. 加载系统模块(如声音模块)
        9. 初始化RAID
        10. 初始化卷映射
        11. 检查文件系统
        12. 挂载文件系统
        13. 激活磁盘限额
        14. 激活swap分区
        15. 初始化串口设备
        16. 生成系统启动信息的log文件
        B./etc/rc.d/rcX.d/[KS]*--根据运行级别X配置服务
        1. 终止以“K”开头的服务
        2. 启动以“S”开头的服务
        C./etc/rc.d/rc.local--执行本地特殊配置
        D.其他--不同运行级别的特殊服务
        1. mingetty
        2. xdm gdm kdm
      • Centos安装完毕后必须要做的事情

        2013-02-20 19:41:45

        通常刚安装完成的Centos是无法访问互联网的,原因是有些配置还未完成

        1.设置固定ip,如果一台Linux服务器没有设置固定ip也太不专业了吧
        通过修改/etc/sysconfig/network-scripts/ifcfg-ethX实现
        DEVICE=eth0#物理设备名
        IPADDR=192.168.10.8#IP地址
        NETMASK=255.255.255.0#子网掩码
        GATEWAY=192.168.0.1#网关地址
        ONBOOT=yes#[yes|no]引导时是否激活设备
        USERCTL=no#[yes|no]非root用户是否可以控制该设备
        BOOTPROTO=static#[none|static|bootp|dhcp]引导时不使用协议|静态分配|BOOTP协议|DHCP协议
        DNS1=8.8.8.8
        DNS2=202.96.209.5


        2.设置主机名
        通过修改/etc/sysconfig/network实现

        3.设置DNS
        通过修改/etc/resolv.conf实现

        4.修改网关配置
        通过修改/etc/sysconfig/network实现

        5.网络测试
        通过ping互联网上任何一台服务器检验之前的配置是否正确

        注意事项
        Centos5.8以上版本开始直接修改/etc/resolv.conf中的dns信息,等到重新启动机器会被一个叫做/sbin/dhclient-script的脚本覆盖掉,所以不能直接修改该文件而是要增加/etc/sysconfig/network-scripts/ifcfg-ethX文件中的DNS配置项来实现。汗!!花了好久才明白此中道理

      • 如何扩展LVM

        2013-02-20 17:05:07

        场景1
        如果卷组无剩余空间,首先扩展卷组
        • 添加硬盘
        • 在磁盘上创建lvm分区
          • fdisk /dev/sdc
          • 并且用t 将sdc中的磁盘格式设置为8e 
        • 在lvm分区上创建物理卷
          • pvcreate /dev/sdc7
        • 将物理卷添加到卷组中
          • vgextend myvg /dev/sdc7
        场景2
        若卷组中有剩余空间,扩展卷组中的逻辑卷
        lvextend -L +4G /dev/myvg/LVhome

        场景3
        对已扩展的逻辑卷中的文件系统进行容量扩展
        umount /home
        resize2fs -f /dev/myvg/LVhome
        mount -a

        场景4
        在新建的物理卷基础上新增一个卷组,并且创建逻辑卷,挂载在新的挂载点上
        1. vgcreate wwwVg /dev/sdb1
        2. lvcreate -L 2G -n www wwwVg
        3. mkfs -t ext3 /dev/wwwVg/www
        4. 编辑/etc/fstab
        5. mount -a 
      • Linux账户管理

        2013-02-20 15:00:51

        •      在centos中组有两种类型:私有组合标准组。当创建一个新用户时,若没有指定他所属的组,centos就建立一个和该用户同名的私有组。此私有组中只包含这个用户自己。标准组可以容纳多个用户,若使用标准组,在创建一个新的用户时就应该指定他所属的组
        • 当一个用户属于多个组时,其登陆后所属组称为主组,其他的组称为附加组
        • linux下的账户系统文件主要有/etc/passwd /etc/shadow /etc/group /etc/gshadow四个文件
        • 用户要访问附加组的文件时,必须首先使用newgrp命令使自己称为所要访问的组的成员
        • 组管理  
          • groupadd [-g GID] group
          • groupmod [options] group
          • groupdel
        • 用户管理
          • useradd [options] login    (-G 指定新用户的附加组  -M不创建新用户的自家目录)
          • usermod  [options] login 
          • userdel [-r] login
        • 口令管理和口令时效
          • passwd
          • chage
        • 用户切换和用户状态命令(/etc/sudoers)
          • su  sudo
          • visudo
          • whoami:用于显示当前用户的名称
          • groups:用于显示指定用户所属的组
          • id:用于显示用户身份
          • newgrp:用于将用户从当前组转换到指定的附加组,用户必须属于该组才可以进行
      • Centos安装

        2013-02-20 10:24:04

        在安装前必须要对硬盘做一个整体规划
        1.选择静态分区还是LVM,推荐使用LVM
        2.假设有一个40G的硬盘如何规划
        3.自动裁判分区方案是不安全的,自动磁盘分区只创建了基于LV的/文件系统,这就意味着,所有的数据都将存放在唯一一个基于LV的/文件系统中,这对于实际的生产系统来说是不安全的。安全的做法是应该创建分离的多个LV
        4./boot分区不能位于卷组中,因为引导装载程序无法从逻辑卷中读取,如果想把/分区放在逻辑卷上,必须建立一个卷组分离的/boot分区
        5.安全的分区方案原则
        • 系统数据和普通用户分别存放在不同的LV(即,使用单独的home lv)
        • 不经常变化的系统数据和经常变化的数据分别置于不同的lv(即,使用单独的usr lv和var lv)
            
         Device Size  Type  Mount Point 备注
        sda1 100M ext3 /boot 
        LVswap 2G swap  
        LVroot 4G
        ext3 存放系统命令和用户数据等
        LVusr 10G ext3  /usr存放Linux的应用程序
        LVvar 10G ext3 /var 存放系统中经常变化的数据
        LVhome 14228M ext3 /home 存放普通用户数据


        在安装操作系统时设置lvm(图形化的方式是无法建立lvm的必须通过fdisk和lvm命令才能完成lvm的建立)
        操作步骤:
        • 安装的时候,在boot后面输入linux text,强制进入文本安装方式
        • 其他从左按照标准步骤进行(选择语言en,键盘en)进行到磁盘分区的时候,按alt+f2切换到控制台,这个时候出来一个类似的shell的终端
        • 在#后面驶入fdisk /dev/sda,手工分区,分两个,1个100M,将来给boot,剩余磁盘空间给另一个分区
        • 分区结束后w保存分区并退出fdisk
        • 创建pv:在#提示符后面输入 lvm pvcreate /dev/sda2
        • 创建vg:在#提示符后面输入 lvm vgcreate myvg /dev/sda2
        • 创建lv:在#提示符后面输入 
          • lvm lvcreate -L 2G -n LVswap myvg
          • lvm lvcreate -L 4G -n LVroot myvg
          • lvm lvcreate -L 10G -n LVusr myvg
          • lvm lvcreate -L 10G -n LVvar myvg
          • lvm lvcreate -L 14228M -n LVhome myvg
        • 完成后,alt+f1切换到安装界面,选择最下面的项目(自定义分区),经过扫描,安装程序就可以识别我们手工建立的lvm分区了(如果识别不出来的话要按back按钮回到键盘选择界面然后一步步进入到自定义分区页面)
        注意事项
        1. fdisk 设置分区时都要设置为主分区
        2. 到自定义分区页面需要手工设置文件系统格式和挂载点
             
      • 自由软件和开源软件

        2013-02-20 10:05:07

        自由软件赋予使用者四种自由
        1. 不论目的为何,有使用该软件的自由
        2. 有研究该软件如何运作的自由,并且可以改写该软件来符合使用者自身的需求。取得该软件的源码为达成此目的的前提
        3. 有重新散布该软件的自由
        4. 改善再利用该软件的自由,并且可以发表改写版供公众使用,如此一来,整个社群都可以受惠
        自由软件 VS 开源软件
        • 自由软件和开源软件是基于两种不同哲学理念而发起的运动,自由软件的目的在于自由的“分享”和“协作”
        • 开源软件通常旨在提高技术等级,是一种技术等级发展模式,其所带来的价值和微软所倡导的一样,都是狭窄的实际价值
        • 自由软件和开源软件目前都是软件许可的标准,虽然许可效果都差不多,但是两个标准注解区别却非常大,这之间最大的区别是哲学理念上的区别
      • 解决loadrunner 脚本和replaylog中的中文乱码问题

        2012-04-26 17:37:23

        解决这个问题必须认识到一个事实就是,loadrunner和测试服务器交换数据使用的是utf8格式,但是展现在replaylog中是使用gb2312格式,而且在脚本中如何使用web_reg_find的时候也是使用的是gb2312格式,所以知道这个原理后,事情就好办多了。

        1.获取测试服务器提供的utf8格式的文字并且转换成gb2312格式展现出来
                web_reg_save_param_ex(
                  "ParamName=aa",
                  "LB=ProductName",
                  "RB=ProductBriefName",
                  "NotFound=warning",
                  SEARCH_FILTERS,
                  LAST)     ;    


             web_url("web_url",
                  "URL=http://124.238.214.65:70/Scripts/Home/HomeHotProduct.js",
                  "TargetFrame=",
                  "Resource=0",
                  "Referer=",
                  LAST);
            lr_convert_string_encoding(lr_eval_string("{aa}"),"utf-8","gb2312","str");
        lr_output_message(lr_eval_string("{str}"));



        2.本地的gb2312的中文经过转换成utf8发给测试服务器

               lr_convert_string_encoding(lr_eval_string("智能手机"),"gb2312","utf-8","a1");
                  web_reg_save_param_ex(
                  "ParamName=aa",
                  "LB={a1}",
                  "RB=",
                  "NotFound=error",
                  SEARCH_FILTERS,
                  LAST);

                  web_url("IndexCategoryProductJson.js",
                  "URL=http://124.238.214.65:70/Scripts/Home/IndexCategoryProductJson.js",
                  "Resource=1",
                  "RecContentType=application/x-javascript",
                  "Referer=http://124.238.214.65:8081/",
                  "Snapshot=t24.inf",
                  LAST);






      • .net 开发环境 实现loadrunner对ajax的支持

        2012-04-26 17:27:23

        .net 开发环境 实现loadrunner对ajax的支持

        我们公司开发了一套电子商务网站,为了防止用户工具在很多地方程序都采取了对ajax请求的判断,也就是说服务器判断不是ajax的请求就不提供正常的工作。

        loadrunner对javascrip和ajax的处理能力非常有限,用录制脚本的方式无法记录用户的动作,查了网上的一些文档得到的结论,是不管你客户端是什么工具,真正在服务器端收到的都是http协议的内容,通过这个思路思考下去,只要我能模拟浏览器对服务器的ajax提交请求就能解决这个问题,通过firebug发现服务器是判断客户端请求的header中有X-Requested-With就认为是ajax请求

        判断是否为ajaxRequest 在http请求头中查找是否包含X-Requested-With,并且值为XMLHttpRequest
        
        C# Code
        string sheader = Request.header["X-Requested-With"];
        bool isAjaxRequest = (sheade != null && sheader == "XMLHttpRequest") ? true : false;
        所以只要在协议为ajax的脚本中在关键位置前插入 web_add_heade就能实现loadrunner对ajax的伪造
             web_add_header("X-Requested-With","XMLHttpRequest");
            
             web_custom_request("31",
                  "URL=http://{ip}/UserHome/AddPromotionReserve/34",
                  "Method=POST",
                  "Resource=0",
                  "RecContentType=text/html",
                  "Referer=http://{ip}/UserHome/UserInfo",
                  "Snapshot=t214.inf",
                  "Mode=HTTP",
                  "EncType=",
                  LAST);
      • mongleDB 系统管理(1)

        2011-05-17 20:51:14

        最近完成了一个基于MongoDB的项目虽然项目已经上线,但是要使MongoDB长期健壮的运行在产品环境作为研发团队中的一员必须要对MongoDB的系统管理要有比较深入的了解。
        我准备用4-5个篇幅来介绍MongoDB系统管理--这是第1篇,接下来的操作如果没有特别说明都以CentOS Linux环境为准

        1.要尝试使用MongoDB首先必须要在命令行运行mongod服务
        a. cd MONGO_HOME/bin
        b. ./mongod --dbpath /data/mongodb/db/  --logpath /data/mongodb/logs/mongolog  --logappend --fork

        参数说明
        --dbpath            #指定db文件存放的目录
        --port              #指定mongod服务使用的端口
        --fork              #设置mongo服务为后台运行
        --logpath           #指定log文件的目录和文件名
        --logappend         #设置每次log添加在文件最后
        --rest              #关闭rest api功能
        --nohttpinterface   #关闭web管理功能
        --auth              #指定mongo使用身份验证机制
        --bindip            #用逗号分隔ip地址,用来指定
        --f                 #将所有前面介绍的参数都可以存放到一个配置文件中,然后用这个参数调用配置文件来启动mongod服务

        2.关闭MongoDB有几种方法
        a. db.shutdownServer()  #推荐优先使用
        b. ctrl + c             #在不使用 --fork参数的时候可以使用,可能会造成数据文件损坏
        c. kill / kill -2       #在无法使用 a和b的情况下使用,可能会造成数据文件损坏
        d. kill -9              #不在万不得已的情况下,不要使用这个方法

        3. 查看MongoDB状态
        a.db.runCommand({"serverStatus":1})
        b.MONGO_HOME/bin/mongostat

        4. 添加用户,切换用户 使 --auth参数起效
        db.addUser("root","123")
        db.addUser("read_only","123",true);  #第3个参数表示设置readonly的状态

        db.auth("read_only","123")

        5. 数据库备份
        有4种方法备份数据库
        a. 关闭mongod服务后,复制--dbpath参数指定的数据文件。优点速度快,缺点需要停止mongo服务。
        b. 使用mongodump 导出数据,并用mongorestore 导入数据。优点不需要停止mongo服务,缺点在mongodump操作时用户插入的数据可能无法备份出来。
        c. fsync and lock锁定数据库的让用户只能使用read功能,再使用方法b导出并导入数据。优点不需要停止mongo服务,缺点在数据库lock期间用户无法执行insert操作。
        d. 使用slaveDB并且 使用方法c锁定slaveDB,再使用方法b导出并导入数据。优点不需要停止mongo服务,不会影响用户insert操作(推荐使用此方法)。

        6. 修复数据库
        当数据库文件遭到损坏的时候有3种方法修复数据文件
        a. MONGO_HOME/bin/mongod --repair
        b. use test
           db.repairDatabase()
        c. db.runCommand({"repairDatabase":1});

      672/4<1234>
      Open Toolbar