发布新日志

  • SELinux

    2013-03-27 11:19:13

      • ls -Z查看SELinux信息
      • identify:role:type(身份识别:角色:类型)
      • 身份识别(Identify):相当于账号方面的身份识别
        • root:表示root的账号身份
        • system_u:表示系统程序方面的识别
        • user_u:代表的是一般使用者账号相关的身份
      • 角色(Role):透过角色字段,我们可以知道这个暑假时属于程序、文件资源还是代表使用者
        • object_r:代表的是文档或目录等资源
        • system_r:代表就是程序
      • 类型(Type):在预设的targeted政策中,Identify与role字段基本上市不重要的,重要的在于type字段。基本上一个主体程序能不能读取到这个文件,与type有关,domain需要与type搭配,则该程序才能够顺利读取文件资源
        • type
        • domain
      • SELinux的启动与关闭
        • 查看SELinux模式 getenforce
        • 设置SELinux模式 setenforce
        • 执行restorecon -Rv 重新还原所有SElinux的类型
        • SELinux配置文件 /etc/selinux/config
        • 如果由enforcing或permissive改成disabled,或由disabled改成其他两个,必须要重新启动。这是因为SELinux是整合到内核里面去的
        • 你可以在SELinux运作下切换成enforcing或permissive模式,不能直接关闭SELinux
        • 如果熔disable转到启动SELinux的模式时,由于系统必须要针对文件写入安全性文本的信息,因此开机过程会花费不少时间在等待重新写入SElinux安全性文本,等到下次开机成功后再使用getenforce来观察是否成功启动到Enforcing的模式
        • 当你单纯的复制文件,SELinux的type字段是会继承目标的目录的
        • 当你移动文件,SELinux的type字段也会被移动过去
        • chcon 修改文件或目录的SELinux信息
        • semanage(需要安装yum install policycoreutils-python)
        • SE政策查阅 (需要安装yum install setools-console)
          • seinfo
          • sesearch
          • getsebool查看哪个布尔值是否启动
          • setsebool
        • 通过setroubleshootd 记录se错误信息
          • Centos6对setroubleshoot的运作方式
            • 先由auditd去活校audispd服务
            • 然后audispd服务去启动sedispath程序
            • sedispatch再将原本的auditd讯息转成setroubleshootd的信息,进一步存储下来

  • SRPM

    2013-03-25 11:50:25

    • SRPM是SOURCE PRM的意思,也就是这个RPM文件里含有源代码,也就是说,这个SRPM所提供的软件内容并没有经过编译过,他提供的原始代码。通常SRPM的扩展名是以***.src.rpm这种格式来命名。SRPM虽然内容是源码,但是他仍然含有该软件所需要的依赖软件说明,以及所有RPM文件所提供的数据。
    • 如果我们下载的是SRPM,就必须要
      • 现将该软件以RPM管理的方式编译,此时SRPM会编译成RPM文件
      • 然后将编译完成的RPM安装到linux系统中(SRPM使用的是rpmbuild命令)
        • rpm -i xxx.src.rpm 将SRPM文件解开,放置到/usr/src/redhat
        • 修改配置文件 /usr/src/redhat/SPECS/*.spec
        • rpmbuild -ba xxx.spec  编译并同时产生RPM于SRPM
  • 如何将动态函数库加载到高速缓存中

    2013-03-25 10:01:35

    在某些时候,你可能想让某些动态函数被快速读取,这个时候可以将动态函数写入cache中
      • 在/etc/ld.so.conf里面记录想要读入高速缓存当中的动态函数库所在的目录,注意是记录的是目录名而不是文件名
      • 利用ldconfig将/etc/ld.so.conf读取高速缓存中
      • 会将配置文件中的动态函数汇总成/etc/ldo.so.cache文件供系统cache用
  • Linux rc.sysinit

    2013-03-22 14:10:30

    • /etc/rc.d/rc.sysinit
      • 取得网络环境与主机类型:读取网络配置文件/etc/sysconfig/network,取得主机名与默认网关等网络环境
      • 测试与挂载内存装置/proc及USB装置/sys:除挂载内存装置/proc之外,还会主动侦测系统上是否具有usb的装置,如果有则会主动加载usb的驱动程序,并且尝试挂载usb的文件系统
      • 决定是否启动selinux
      • 启动系统的随机生成器:随机数生成器可以帮助系统进行一些密码加密演算的功能,在此需要启动两次随机数生成器
      • 设定终端机字形
      • 设定显示于开机过程中的欢迎画面
      • 设定系统时间与时区设定
      • 接口设备的侦测PNP参数的测试
      • 用户自定义模块的加载:使用者可以在/etc/sysconfig/modules/*.modules加入自定义的模块,则此时会被加载到系统中
      • 加载内核的相关设定:系统会主动读取/etc/sysctl.conf这个档案的设定值,使内核功能成为我们想要的样子
      • 设定主机名与初始化电源管理模块
      • 初始化软件磁盘阵列:主要透过/etc/mdadmin.conf来设定好的
      • 初始化LVM的文件系统功能
      • 以fsck检验磁盘文件系统
      • 进行磁盘配额quota的转换
      • 重新以可读写默写挂载系统磁盘
      • 启动quota功能
      • 启动系统虚拟随机数生成器
      • 清除开机过程中的临时文件
      • 将开机相关信息加载/var/log/dmesg日志中
  • 如果我有一个新的网卡驱动程序

    2013-03-22 14:09:15

    • 如果我有一个新的网卡驱动程序,文件名为a.ko如何更新内核信息
      • cp a.ko /lib/modules/$(uname -r)/kernel/drivers/net
      • depmod 

    • 操作模块常用命令
      • depmod 重建moudules.dep
      •  lsmod显示出目前已经存在于内核当中的模块
      • modinfo查看模块信息
      • insmod 手动指定加载模块
      • rmmod
      • modprobe 加载moudules.dep中的模块

  • Linux日志系统

    2013-03-22 10:50:57

    • /var/log/cron
    • /var/log/dmesg
    • /var/log/lastlog
    • /var/log/maillog 或 /var/log/mail/*:记录sendmail与dovecot所产生的信息。smtp是发信所使用的通信协议,pop3是收信使用的通信协议
    • /var/log/messages 几乎系统发生的错误信息都会记录在这个文档中,如果系统发生莫名的错误时,这个文档是一定要查看的
    • /var/log/secure 基本上只要涉及到需要输入账号密码的软件,当登录时都会被记录在此文档中(包括 login su sudo ssh telnet等)
    • /var/log/wtmp /var/log/faillog:记录正确登录系统者的账号信息(wtmp)与错误登录时所使用的账号信息
    • 日志是怎么产生的
      • 一种是由软件开发商自行定义写入的日志与相关格式 例如apache httpd
      • 另一种是由Linux提供的日志管理服务来统一管理,你只要将信息丢给这个服务后,他就会自己分门别类的将各种信息放置到先关的日志中去,Centos提供syslogd这个服务来统一管理日志。系统还提供klogd服务专门记录内核信息的日志
    • logrotate:就是将旧的日志更改名称,然后建立一个空的日志,如此一来,新的日志将重新开始记录。
    • /etc/syslog.conf
      • 服务名称
        • auth 主要与认证机制有关,例如login ssh sh等需要账号密码的
        • cron 主要是cron at等产生日志
        • daemon 与各个daemon有关
        • kern 就是核心产生的信息
        • lpr 打印机相关的信息
        • mail 与邮件收发有关
        • news 与新闻组有关
        • syslog  就是syslogd程序本身有关的信息
        • user uucp local0~local7 与unix like机器本身有关
      • 日志等级
        • info 仅是一些基本3的信息说明
        • notice 比info还需要被注意到的一些信息
        • warn 警告信息,可能有问题,但还不至于影响到某个daemon运作的信息。基本上info notice warn这三个信息都是在告知一些基本信息而已,应该还不至于造成系统运行问题
        • err 一些重大的错误信息,例如配置文件的某些设定值造成服务无法启动的信息说明,通常通过err的错误告知,应该可以了解到服务无法启动的原因
        • crit 比err还要严重的错误信息
        • alert 比crit还要严重的问题
        • emerg 最高级别,指系统已经几乎要当机的状态
        • none 不需要记录级
        • debug 错误侦测级
      • 链接符号
        • .      代表比后面还要高的等级都被记录下来,mail.info代表只要是是mail的信息,而且该信息等级高于info(含info本身)时,就会被记录下来
        • .=    代表所需要的等级就是后面接的等级而已,其他的不要
        • .!     代表不等于,也就是除了该等级外的其他等级都记录
      • 日志记录目标
        • 日志文件的绝对路径
        • 打印机: /dev/lp0
        • 使用者名称: 显示给用户看
        • 远程主机: @demo01-192-168-1-58
        • * : 代表目前在线的所有人 类似wall命令
      • -/var/log/maillog :由于邮件所产生的信息比较多,因此我们希望邮件产生的信息先存储在速度较快的内存中(buffer),等到数据量够大了才一次性的将所有数据都填入磁盘内,这样有助于日志的存取性能,不过带来的问题是如果不正常关机导致日志信息未写回到日志中,可能会造成buffer数据的遗失
      • local7.* 将本机开机时应该显示到屏幕的信息写入到/var/log/boot.log中
    • 如何将日志送到远程主机上
      • 服务器端:
        • 修改/etc/sysconfig/syslog 的 SYSLOGD_OPTION="-m 0 -r"
        • 重启syslogd服务
      • 客户端:
  • logrotate语法

    2013-03-22 10:50:05

    • 执行脚本:可以执行外部指令,这个设定需要在sharedscripts ... endscript中
    • prerotate:在启动logrotate之前执行的指令,例如修改日志的属性
    • postrotate:在昨晚logrotate之后启动的指令,例如重新启动(kill -HUP)某个服务
  • Linux PAM

    2013-03-19 09:05:03

    • PAM模块
      • 在过去,我们想要对一个使用者进行认证,得要要求用户输入账号密码,然后透过自行编写的程序来判断该账号密码是否正确,因此,我们常常得用不同的机制来判断账号密码,所以搞的一部主机上面拥有多个级别的认证系统,页造成账号密码可能不同步验证问题,PAM提供了一连串的验证机制,只要使用者将验证阶段的需求告知PAM后,PAM就能够回报使用者验证的结果。由于PAM仅是一套验证的机制,又可以提供给其他程序所呼叫使用,因此不论你使用什么程序,都可以使用PAM来进行验证,如此一来,就能让账号密码或者是其他方式的验证具有一致的结果
      • 验证类别
        • auth:这种类别主要用来检验使用者的身份验证,这种类别通常需要密码来检验,所以后续的模块使用来检验用户的身份
        • account:这种类别主要检验使用者是否具有正确的权限
        • session:这个类别通常用在记录用户登录与注销时的信息
        • password:这种类别主要提供验证的修订工作
        • 一般顺序是 auth account session password
      • 控制标准
        • required:验证成功返回success的标志,若失败返回failure,但是不论成功失败都会继续后续的验证流程,因此相当有利于资料的登录(常用)
        • requisite:验证失败返回failure,并终止后续验证流程,验证成功则继续执行
        • sufficient:验证成功返回success,并终止后续验证流程,验证失败则继续执行
        • optional:用来显示信息
      • /etc/pam.d/*  :每个程序的PAM配置文件
      • /lib/security/*:PAM模块文件实际放置目录
      • /etc/security/*:其他PAM环节的配置文件
      • /usr/share/doc/pam-*/:详细的PAM说明文件
      • PAM常用模块
        • pam_securetty.so 限制系统管理员只能从安全的终端机登录
        • pam_nologin.so限制一般用户是否能够登录主机
        • pam_selinux.so针对SELinux来进行细部管理权限
        • pam_console.so当系统出现问题,或者某些时刻你需要特殊的终端接口登录主机时,这个模块可以帮助处理一些文件权限的问题
        • pam_loginuid.so为了验证使用者的uid真的是我吗所需要的数值,可以使用这个模块来进行规范
        • pam_env.so用来设定环境变量的一个模块
        • pam_unix.so这个模块可以用在验证阶段的认证功能,可以用在授权阶段的账号许可证管理,可以用在会话阶段的登录文件记录等,甚至也可以用在密码更新阶段的检验
        • pam_cracklib.so可以用来检验密码的强度,包括密码是否在字典中,密码输入几次都失败就断掉此次联机等功能
        • pam_limits.so提供类似ulimit命令的功能
      • 如果发生任何无法登陆或者是产生一些你无法预期的错误时,由于PAM模块都会记录在/var/log/secure当中,所以发生了问题应当到该文件中去查询一下问题
      • 查询使用者 w who last lastlog
      • 与使用者对谈 write mesg wall
      • 检查工具
        • pwck检查账号与实际家目录是否存在,以及passwd内的数据字段错误
        • pwconv检查passwd中的账号是否有对应的密码
        • pwuconv
        • chpasswd
  • Linux ACL

    2013-03-19 09:03:31

    ACL(Access Control List)主要的目的是提供传统的owner,group,otrequiredhers的read,write,execute权限之外的细部权限设定。ACL可以针对单一使用者,单一档案或目录来进行rwx的权限规范,对于需要特殊权限的使用状况非常有帮助
      • 使用dumpe2fs查看文件系统是否启动acl
      • getfacl setfacl
    • sudo 执行日志保存在/var/log/secure
  • Linux账号管理

    2013-03-18 08:59:41

    • useradd 重要参数
      • -M 强制,不要建立用户家目录
      • -r 建立一个系统账号,这个账号的uid会有限制
      • -f  指定密码是否会失效
      • -D  查看useradd默认值
    • /etc/skel 用户家目录参考基准目录
      • 这个目录就是指定用户家目录的参考基准目录,如果通过useradd新增一个用户,这个用户的家目录都是由/etc/skel所复制过去的,所以未来如果我们想新增使用者时,该用户的环境变量~/.bashrc就设定妥当的话,可以到/etc/skel/.bashrc去编辑一下,也可以建立/etc/skel/www这个目录,那么未来新增使用者后,在他的家目录下就会有www那个目录了
    • /etc/login.defs 用来存储新增用户时默认的一些参数
    • useradd在建立linux上的账号时,至少会参考
      • /etc/default/useradd
      • /etc/login.defs
      • /etc/skel/*
    • useradd在建立linux上的账号时,至少会修改的文件
      • /etc/passwd
      • /etc/shadow
      • /etc/group
      • /etc/gshadow
    • 账号管理常用命令
      • useradd usermod userdel ,passwd chage ,groupadd groupmod chgrp groupdel newgrp gpasswd, id groups ,finger chfn,chsh

  • shell scripts

    2013-03-15 10:25:27

    • script的执行方式差异
      • 利用直接执行的方式来执行script:该script都会使用一个新的bash环境来执行执行脚本内的指令
      • 利用source来执行脚本:在父程序中执行(source,sh,.)
    • $#:脚本参数数量
    • $@ $*:表示脚本所有参数
    • $0:执行的脚本文件名
    • 脚本调试

  • Linux用户登录过程

    2013-03-13 10:18:50


    • login shell:取得bash时需要完整的登录流程
      • 调用/etc/profile
        • PATH:会依据UID决定PATH变量要不要含有sbin的系统指令目录
        • MAIL:依据账号设定好使用者mailbox到/var/spool/mail/账号名
        • USER:根据用户的账号设定此一变量内容
        • HOSTNAME:依据主机的hostname指令决定此一变量内容
        • HISTSIZE:历史命令记录笔数
        • 调用/etc/inputrc
        • 调用/etc/profile.d/*.sh
        • 调用/etc/sysconfig/i18n
      • 读取个人偏好配置文件(bash的login shell只会按照次序读取其中一个)
        • ~/.bash_profile
          • ~/.bashrc
          • /etc/bashrc
        • ~/.bash_login(该文件默认不存在)
        • ~/.profile(该文件默认不存在)
      • 调用/etc/man.config
      • 调用~/.bash_history
      • 调用~/.bash_logout(退出时执行)
    • non-login shell:取得bash借口的方法不需要重复登录的举动inputrc
      • 调用 ~/.bashrc
      • 调用/etc/bashrc
      • 调用/etc/profile.d/*.sh
      • 调用/etc/man.config
      • 调用~/.bash_history
      • 调用~/.bash_logout(退出时执行)
  • Linux磁盘管理常用命令

    2013-03-12 09:43:26

    • dumpe2fs :可以查看superblock里面的信息
    • df du
    • 磁盘分区:fdisk parted
    • 磁盘格式化:mkfs mke2fs(可以设定block和inode大小)
    • 磁盘检验:fsck e2fsck badblocks
    • 磁盘挂载:mount
    • 磁盘参数修订:mknod
    • 设定文件系统标头:e2label
    • 将ext2转换为ext3:tune2fs
    • partprobe:告知核心必须要读取新的分割表
    • hdparm:测试硬盘实际存取效能( hdparm -Tt /dev/sda2 性能测试的时候应该可以做参考)
  • Linux 磁盘与文件系统管理

    2013-03-11 17:48:18

    • super block:记录整个文件系统的整体信息,包括inode和block的总量、使用量、剩余量,以及文件系统的格式与相关信息等(大小为1024bytes)
    • inode:记录档案的属性,一个档案占用一个inode,同事记录此档案数据所在的block号码
    • block:实际记录档案的内容,若档案太大时,会占用多个block
    • inode的数量和大小也是在格式化时就已经固定了
      • 每个inode大小均固定为128bytes
      • 每个档案都仅会占用一个inode
      • 因此文件系统能够简历的档案数量与inode的数量有关
      • 系统读取档案时需要先找到inode,病分析inode所积累的权限与用户是否符合,若符合才能够开始实际读取block的内容
      • inode记录一个block号码要花掉4byte
      • inode记录block号码的区域定义为12个直接,一个间接,一个双间接与一个三间接记录
    • block bitmap记录的是使用与未使用的block号码
    • inode bitmap记录的是使用与未使用的inode号码
    • 目录:当我们在Linux下的ext2文件系统建立一个目录时,ext2会分配一个inode与至少一块block给该目录,其中inode记录该目录的相关权限与数学,并可记录分配到的那块block号码,而block则是记录在这个目录下的文件名与该文件名占用的inode号码数据
    • 文件:当我们在Linux下的ext2建立一个文件时,ext2会分配一个inode与相对于该文件大小的block数量给该文件
    • inode本身并不记录文件名,文件名的记录是在目录的block当中。因此当我们要读取某个文件时,就务必会经过目录的inode与block,然后才能够找到那个待读取的文件的inode号码,最终才会读到正确的文件的block内的数据
    • 我们想要新增一个文档,此时文件系统的行为是
      • 先确定用户对于欲新增档案的目录是否具有w与x的权限,若有的话才能新增
      • 根据inode bitmap找到没有使用的inode号码,并将新文件的权限/属性写入
      • 根据block bitmap找到没有使用的block号码,并将实际的数据写入block中,且更新inode的block指向数据
      • 将刚刚写入的inode与block数据同步更新inode bitmap与block bitmap,并更新superblock的内容

  • Mysql事务

    2013-03-04 16:43:02

    • MyISAM之类的存储引擎使用了数据表级的锁定机制来保证不同的发客户不能修改同一个数据表,但这种做法在更新量比较大的系统上会导致并发性能的下降
    • InnoDB存储引擎采用了另一种策略,它使用了数据行级的锁定机制为客户对数据表的访问提供了更细致的控制
    • InnoDB存储引擎提供了多种不同隔离级别以允许或预防在多个事务同时运行时可能发生的各种各样的问题
      • 脏读:指某个事务所作出的修改在它尚未被提交时就可以被其他事务看到
      • 不可重复读取:指同一事务使用同一条select语句每次读取到的结果不一样
      • 幻影数据行:指某个事务突然看到了一个它以前没有见过的数据行
      • 4种隔离级别
        • READ UNCOMMITTED 允许某个事务看到其他事务未提交的数据行改动
        • READ COMMITTED只允许某个事务看到其他事务已经提交的数据行改动
        • REPEATABLE READ如果某个事务两次执行同一个select语句,其结果可重复的
        • SERIALIZABLE:某个事务正在查看的数据行不允许其他事务修改,直到该事务完成为止
    • 隔离级别脏读不可重复读取幻影数据行
      READ UNCOMMITTED
      READ COMMITTED
      REPEATABLE READ(InnoDB默认隔离级别)
      SERIALIZABLE

  • 内联结和外联结的区别

    2013-03-04 14:57:09


      • 内联结只显示在两个数据表里都能找到匹配的数据行
      • 外联结除了显示同样的匹配结果,还可以把其中一个数据表在另一个数据表里没有匹配的数据行也显示出来
        • 外联结包括左联结和右联结
        • 在Left Join里,
          • 来自左数据表的每一个数据行在结果集里都有一个对应的数据行,不管它在右数据表里有没有匹配
          • 在右数据表里没有匹配的结果数据行有这样一个特征,来自右数据表的所有数据列都是NULL值
        • 在使用LEFT JOIN时需要注意这样一个问题,如果右数据表里的数据列没有被全部定义成NOT NULL,结果集里的数据行就可能不能反映真实情况。比如说,如果右数据表里的某个数据列运行取值为null并被收录在结果集里,用这个数据列里的NULL值来判断“在右数据表里没有匹配”就可能出现问题

  • Mysql索引

    2013-03-04 11:50:14

    • 为数据表编制索引
      • Mysql提供多种灵活的索引创建办法
        • 可以为单个数据列编制索引,也可以为多个数据列构造复合索引
        • 索引可以只包含对一无二的值,也可以包含重复的值
        • 可以为同一个数据表创建多个索引并分别利用他们来优化基于不同数据列的查询
        • 可以只为数据列的一个前缀创建索引,如果数据列在前缀长度范围内具有足够的独一无二性,查询性能会得到改善(为数据列前缀而不是整个数据列编制索引可以让索引本身更小并加快访问速度)
        • 并非所有的存储引擎都能提供全部的索引功能
      • Mysql支持的索引类型
        • 唯一索引:不允许索引项本身出现重复的值
        • 普通(非唯一)索引:运行索引值出现重复值
        • FullText索引:这种索引支持MyISAM数据表
        • SPATIAL索引:这种索引只支持MyISAM数据表和空间数据类型
        • HASH索引:这是MEMORY数据表的默认索引类型
      • PRIMARY KEY和UNIQUE索引的区别
        • 每个数据表只能由一个PRIMARY KEY
        • PRIMARY KEY不可以包含NULL值,而UNIQUE索引可以(Mysql无法判断两个NULL值是否代表同样的东西,索引里的多个NULL值将被认为代表多个不同的东西)
        • 除PRIMARY KEY以外,其他索引类型都可以用CREATE INDEX语句来添加
      • 通过3中方法添加索引
        • CREATE TABLE时(index_name是可选的)
        • CREATE INDEX时
        • ALTER TABLE时(index_name是可选的)
      • 当你从数据表删除数据列时,索引也会隐式地受到影响
        • 如果你删除的数据列是某个索引的组成部分,mysql将从索引里删除那个数据列
        • 如果你把构成某个索引的数据列全部丢弃了,mysql将删除整个索引
  • Mysql临时数据表

    2013-03-01 17:00:00

    • 一个TEMPPORARY数据表只对该数据表的客户是可见的
    • 一个TEMPPORARY数据表的名字运行于一个现有的永久性数据表相同,只是创建这个TEMPPORARY数据表的客户在此表存在期间将不再能看到那个永久性的数据表
    • 无法创建两个同名的TEMPPORARY数据表
    • 如果客户程序会在服务器的连接意外断开时自动重建连接,上次创建的TEMPPORARY数据表在你重新连接上服务器时将不复存在,这时如果执行DROP TABLE语句将会导致那个永久性的数据表被删除,如果要避免这种情况发生,就应该使用DROP TEMPPORARY TABLE语句代替
    • 因为TEMPPORARY数据表只对创建它们的连接时可见的,所以如果使用了某种连接池机制,它们的用处就没有多大了,因为连接池机制不能保证你发出的每一条语句使用的都是同一条连接
    • 如果使用了连接池或永久性连接,你与MYsql服务器之间的连接在应用程序结束时就不一定会被关闭。那些机制可能会让连接保持打开状态供其他用户使用,而这意味着你创建的TEMPPORARY数据表不一定会在你的应用程序结束时自动消失
  • 影响InnoDB可移植性的因素

    2013-02-28 17:54:38

      • 两台机器之间被移植的数据表不包含任何浮点数据列或者两台机器使用的浮点数存储格式是一样的
      • 数据库和数据表的名字应该由小写字母构成。InnoDB存储引擎在其数据字典里把这些名字统一保存为小写字母格式,但.frm文件里的名字却与你在CREATE TABLE 语句里使用的大小写情况完全一样,如果当初在创建数据库或数据表时使用的是大写字母,而现在你想把它们移植到一个队文件名区分大小写的平台上去,就有可能因为字母的大小写情况不匹配而遇到问题

  • Mysql存储引擎

    2013-02-28 17:38:47

    • MyISAM存储引擎
      • 提供了键压缩功能。它使用某种压缩算法来保存连续的,相似的字符串索引值
      • 与其他存储引擎相比MyISAM为AUTO_INCREMENT数据列提供了更多的功能
      • 每个MyISAM数据表都有一个标志,服务器或myisamchk程序在检查MyISAM数据表时会对这个标志进行设置
      • 支持全文检索,但这需要通过FULLTEXT索引来实现
      • MyISAM支持空间数据类型和SPATIAL索引
    • MERGE存储引擎
      • MERGE数据表提供了一种把多个MyISAM数据表合并为一个逻辑单元的手段,查询一个MERGE数据表相当于查询其所有的成员数据表,这个种好处之一是可以绕开文件系统对各个MyISAM数据表的最大长度限制
      • 用来构成MERGE数据表的所有数据表必须有同样的结构。这意味着必须为各成员数据表里的数据列定义同样的名字、同样的类型和同样的顺序,索引也必须以同样的办法按同样的顺序定义
      • 可以把经过压缩和未经过压缩的数据表混杂在一起而构成一个MERGE数据表
    • MEMORY存储引擎
      • 把数据表保存在内存里,这些数据表有着长度固定不变的数据行,这两个特点使得数据表的检索速度非常快
      • 在默认的情况下,MEMORY数据表使用散列索引,利用这种索引进行“相等比较”的速度非常快,单进行“范围比较”的速度就慢多了
      • 存储在MEMORY数据表里的数据行使用的是长度固定不变的格式,以此加快处理速度,这意味着你不能使用BLOB和TEXT这样长度不可变的数据类型,但是可以使用VARCHAR类型
      • 如果确实需要使用MEMORY鼠标和“>”“<”或BETWEEN操作符进行某种比较以判断某个值是否落在某个范围内,可以使用BTREE索引来加快速度
    • InnoDB存储引擎
      • 支持提交和回滚操作,确保数据在事务处理过程中万无一失。还可以通过创建保存点(savepoint)的办法来实现部分回滚
      • 在系统崩溃后可以自动恢复
      • 外键和引用完整性支持,包括递归式删除和更新
      • 数据行级别的锁定和多版本共存,这使得InnoDB数据表在需要同时进行检索和更新操作的复杂查询里表现出非常好的并发性能
      • 在默认的情况下,InnoDB存储引擎会把数据表几种存储在一个共享的表空间里,而不是为不同的数据表创建不同的文件。InnoDB表空间可以由多个文件构成,还可以包括多个原始分区。实际上InnoDB表空间就像一个虚拟的文件系统,它存储和管理所有InnoDB数据表内容。这样一来,数据表的长度就可以超过文件系统对各个文件的最大长度限制。你也可以把InnoDB存储引擎配置成为为每个数据表分别创建一个表空间的样子。
    • Falcon存储引擎
      • 支持提交和回滚操作,确保数据在事务处理中万无一失。还可以通过创建保存点来实现部分回滚
      • 在系统崩溃后可以自动恢复
      • 灵活的锁定级别和多版本共存,使得Falcon数据表在需要同时进行检索和更新操作的复杂查询里表现出非常的并发性能
      • 在春初时对数据进行压缩,在检索时对数据进行解压缩以节省空间
      • 日常管理和维护方面的开销低
    • FEDREATED存储引擎
      • 用途是访问其他Mysql服务器管理下的数据表。
      • 当你创建一个FEDREATED数据表时,需要指定一台运行着其他服务器程序的主机,并提供那个服务器的合法账户的用户名和口令。当你打算访问数据表时,本地服务器将使用这个账户连接那台远程服务器
    • NDB存储引擎
      • 是Mysql的集群存储引擎。在这个引擎工作时,Mysql服务器的作用是帮助其他进程访问NDB数据表
      • 各集群结点上的进程通过彼此通信来管理内存中的数据表。
      • 为了减少冗余,数据表在集群进程中被复制
      • 内存春初提供了高性能,集群机制提供了高度可用性,即使个别结点发生故障,系统也不会崩溃
    • ARCHIVE存储引擎
      • 对数据进行归档,最适合用来大批量地保存那些“写了就不改了”的数据行,因为只支持INSERT和SELECT
      • 为了节省空间,在存储时会对数据进行压缩
      • DELETE或UPDATE根本不能用
      • 每个数据表最多只能由一个带索引的AUTO_INCREMENT数据列
    • BLACKHOLE存储引擎
      • 写操作其实是删除数据,而读操作时返回空白记录
    • CSV存储引擎
      • 会在数据库子目录里为每个数据表创建一个csv文件
      • 不支持索引
    • EXAMPLE存储引擎
      • 用来演示如何编写存储引擎的最小化样板。它存在的价值是让开发人员通过查看其源代码去学习怎样才能正确地把存储引擎加载到服务器里

671/41234>
Open Toolbar