Awk学习笔记[转]

整理:Jims of 肥肥世家
注:此文中所有链接如无特别说明均已失效,本文尽为保护作者利益而保留。请谨慎点击

<jims.yang@gmail.com>

Copyright © 2004 本文遵从GPL协议,欢迎转载、修改、散布。

第一次发布时间:2004年8月6日

Table of Contents

1. awk简介
2. awk命令格式和选项
        2.1. awk的语法有两种形式
        2.2. 命令选项
3. 模式和操作
        3.1. 模式
        3.2. 操作
4. awk的环境变量
5. awk运算符
6. 记录和域
        6.1. 记录
        6.2. 域
        6.3. 域分隔符
7. gawk专用正则表达式元字符
8. POSIX字符集
9. 匹配操作符(~)
10. 比较表达式
11. 范围模板
12. 一个验证passwd文件有效性的例子
13. 几个实例
14. awk编程
        14.1. 变量
        14.2. BEGIN模块
        14.3. END模块
        14.4. 重定向和管道
        14.5. 条件语句
        14.6. 循环
        14.7. 数组
        14.8. awk的内建函数
15. How-to
Read More »

在CentOS上安装配置heartbeat

Heartbeat提供了高可用集群最基本的功能,例如,节点间的内部通信方式、集群合作管理机制、监控工具和失效切换功能等。但是Heartbeat仅仅是个HA软件,它仅能完成心跳监控和资源接管,不会监视它控制的资源或应用程序。要监控资源和应用程序是否运行正常,必须使用第三方的插件,例如ipfail、Mon和Ldirector等。Heartbeat自身包含了几个插件,分别是ipfail、Stonith和 Ldirectord。

在家闲着无事,就简单的测试了一下heartbeat,没怎么深入测试,所以本文只会告诉你怎么让heartbeat跑起来,不涉及服务。

安装heartbeat不是个简单的事情,很多文章说可以直接用yum来安装,但我从碟上的安装源以及rpmforge的源中都没有找到heartbeata的包(如果你知道可以告诉我哪个源里面可以直接安装heartbeat),所以我还是从官方网站下载了三个包来进行编译。

编译的顺序是:先Cluster Glue, 再Resource Agents,然后才是Heartbeat。

这个编译可不是个简单的事,它可耗费了我不少时间。首先要安装autoconf, automake,pkgconfig,libxslt-devel等包。configure都没有大问题,都不在话下,都有明确的提示。

第一个不好解决的错误就是

./.libs/libplumb.so: undefined reference to `uuid_parse'
./.libs/libplumb.so: undefined reference to `uuid_generate'
./.libs/libplumb.so: undefined reference to `uuid_copy'
./.libs/libplumb.so: undefined reference to `uuid_is_null'
./.libs/libplumb.so: undefined reference to `uuid_unparse'
./.libs/libplumb.so: undefined reference to `uuid_clear'
./.libs/libplumb.so: undefined reference to `uuid_compare'
collect2: ld returned 1 exit status
gmake[2]: *** [ipctest] Error 1
gmake[2]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib/clplumbing'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1

这个差不多能看出来是uuid方面的包的故障,所以我一开始就想去安装一个libuuid-devel的包,在这个上面消耗了不少时间。但最后通过google与linux-ha的maillist得到了提示,总算是把这个问题给解决了。解决方法其实很简单,只要在configure时在后面加上:

LIBS='/lib/libuuid.so.1'

这个问题在对三个包进行make的时候都会出现类似的错误,所以这个解决方法在make三个包时都要用到。还要提到的是,在对Heartbeat进行configure的时候,最好用他推荐的ConfigureMe而不要用configure。

第二个比较麻烦的问题也是在make时碰到的,不过只是在make Cluster Glue才有:

cc1: warnings being treated as errors 
main.c:64: warning: function declaration isn't a prototype
main.c:78: warning: function declaration isn't a prototype
gmake[2]: *** [main.o] Error 1
gmake[2]: Leaving directory
`/root/Reusable-Cluster-Components-glue-1.0.6/lib/stonith'
gmake[1]: *** [all-recursive] Error 1
gmake[1]: Leaving directory `/root/Reusable-Cluster-Components-glue-1.0.6/lib'
make: *** [all-recursive] Error 1
error: Bad exit status from /var/tmp/rpm-tmp.55884 (%build)

这个问题我都估计是Cluster Glue的一个bug,产生的原因与解决的方法实在是太鬼异了。从错误信息上来看,这是main.c文件里面的函数定义错误,解决办法就是将其version函数从stonith子目录下面的main.c文件里面删除(我对编程不懂,不过改名是没用的)。

打开stonith子目录下面的main.c。
1、找到其64行,将其注释掉。
2、找到其76到81行全部注释掉。
3、找到其390行,将其注释,或者换成

case 'V':     printf("stonith: %s (%s)\n", GLUE_VERSION, GLUE_BUILD_VERSION);

这之后来说应该都会是一帆风顺的了,当然你也有可能在make install Heartbeat碰到这个问题:

gmake[1]: Entering directory `/root/Heartbeat-3-0-STABLE-3.0.3/doc'
\
--xinclude \
http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl heartbeat.xml
gmake[1]: --xinclude: Command not found
gmake[1]: *** [heartbeat.8] Error 127
gmake[1]: Leaving directory `/root/Heartbeat-3-0-STABLE-3.0.3/doc'
make: *** [all-recursive] Error 1

这个就是因为你没有安装前面我说的那个libxslt-devel包了。安装好之后就可以。

顺便说一句,在make install Heartbeat的时候,这个–xinclude这些xml文件时可能要耗大量的时间,有时候可能由于网络原因还会报错,这个时候只要再来几次基本上也就没有问题了。

接下来就是重头戏,配置heartbeat了。
heartbeat的配置文件有两个位置/etc/ha.d与/usr/etc/ha.d,由于没有仔细去读/etc/init.d/heartbeat,导致一会儿报这里找不到一个文件一会儿那里找不到一个文件,我干脆就所/usr/etc/ha.d下面的内容全部copy到/etc/ha.d里面,再删掉/usr/etc/ha.d,然后做一个软链接指向/etc/ha.d。整个世界终于清醒了。

然后就是/etc/ha.d/ha.cf文件了,这里我就提供我的ha.cf文件,然后简单的解释一下:

debugfile /var/log/ha-debug
logfile /var/log/ha-log
logfacility local0
keepalive 2
deadtime 30
warntime 10
initdead 60
udpport 694
bcast eth0
#mcast eth1 225.0.0.1 694 1 0
#ucast eth0 192.168.0.1
auto_failback on
watchdog /dev/watchdog
node node1
node node2
ping 172.16.217.1
respawn hacluster /usr/lib/heartbeat/ipfail
compression zlib

debugfile与logfile是定义日志文件的位置,如果两个都没有定义,默认会写入/var/log/message。
keepalive指定心跳间隔时间即每隔多少秒钟在eth0上发送一次广播。
deadtime指定若备用节点在多少秒内没有收到主节点的心跳信号,则立即接管主节点的服务资源。
warntime指定心跳延迟的时间为N秒。当N秒钟内备份节点不能接收到主节点的心跳信号时,就会往日志中写入一个警告日志,但此时不会切换服务
initdead在某些系统上,系统启动或重启之后需要经过一段时间网络才能正常工作,该选项用于解决这种情况产生的时间间隔。取值至少为deadtime的两倍
bcast、mcast与ucast都是定义心跳的,三个任选一个即可。bcast是直接定义使用设备,mcast使用多播,ucast是单播。
auto_failback指定主机恢复后是否自动切换回主机服务。
node后面一定要接uname -n的结果。
ping与respawn hacluster /usr/lib/heartbeat/ipfail用来测试网络连接,ping后面接外网网关或者其他可靠的设备的IP,如果这个IP一旦ping不通了(意味该机的外网down了),则利用respawn调用/usr/lib/heartbeat/ipfail来主动进行切换。

其他的各项定义,大家自己man ha.cf看吧,我也没时间去管那么多了。

接下来就是/etc/ha.d/authkeys。
authkeys文件用于设定Heartbeat的认证方式,共有3种可用的认证方式,即crc、 md5和sha1。3种认证方式的安全性依次提高,但是占用的系统资源也依次增加。如果Heartbeat集群运行在安全的网络上,可以使用crc方式;如果HA每个节点的硬件配置很高,建议使用sha1,这种认证方式安全级别最高;如果是处于网络安全和系统资源之间,可以使用md5认证方式。
我这里直接用crc,只反注释了下面这两行:

# auth 1 
# 1 crc

最后就是/etc/ha.d/haresources
这个文件里面最有文章,大家可以去参考相关文章,我这里只解释我的(最简单的)

node1 172.16.217.200 httpd

其中的node1定义是主机(active host),172.16.217.200是VIP(虚拟IP,也就是真正对外提供服务的IP),httpd也就是httpd服务。

之后,大家就尽情测试吧。呵呵

XBMC中文设置

昨日经大M同学推荐装了一个XBMC,看起来效果还不错,用在电视上应该挺方便的。

但xbmc虽然支持中文,默认却无中文字体。我们就去 /usr/share/xbmc/media/Fonts 里面,把arial.ttf文件替换掉。下面这个命令是直接用系统自带的文驿泉的字体替换了

sudo cp /usr/share/fonts/truetype/wqy/wqy-zenhei.ttc /usr/share/xbmc/media/Fonts/arial.ttf

再提一句,原来版本如果字体体积过大,在播放视频时会出现退出重启XBMC的情况。现在已经修复这个bug了,很好!

(1)启动XBMC后,在主界面选择Settings,进入系统设置;
(2)在系统设置画面选择Appearance,进入用户界面设置;
(3)在屏幕左边选择Look and Feel,然后把Skin Fonts项目设置成arial
(4)在屏幕左边选择Region,然后把Language项目设置成Chinese(Simple)
(5)设置“字符集”为“Chinese Simplified(GBK)”

linux下用tar来进行增量备份

近来无聊,博客又好久没有更新了,权且来说说linux下面的文件备份吧。

备份无非就是全量备份与增量备份。linux下面的全量备份自然不用说,很多命令与软件都能实现;增量备份相对来说软件就要少些,我常用的就是rsync与tar。

rsync与tar相比,rsync的优点在于可以异机备份,缺点在用不能对文件进行压缩。tar的优点就是可以调用bzip2或者gzip进行压缩,但是只限于本机备份。rsync我这里就不多讲了,今天就来说说tar吧

开题不说闲话,其他参数格式我都不说了,说说我们今天要用的参数格式:

tar -g /path/to/info_file -zcvf /path/to/files_need_backup

在这里对info_file
info_file是一个纯文本文件,以UNIX时间记录备份的时间戳。这个文件一般是第一次全备时自动创建,也可以手动创建。如果你手动创建这个文件,那tar就只会备份在这个时间戳之后修改过的文件,所以严格意义上来说,tar的增量备份并不能算做是增量备份,而只是按时间戳备份而已。这点远远比不上rsync。

ok,了解了一下概念,我们正式开始:

$ mkdir dest
$ touch dest/{1,2,3}
$ tar -g /tmp/timestamp -zcvf backup0.tgz dest/
dest/
dest/1
dest/2
dest/3
$ cat /tmp/timestamp
1281096816

由于/tmp/timestamp原来是不存在的,所以这次备份下来的backup0.tgz就是一个全备份文件。备份之后的timestamp文件内容是1281096816。

然后我们继续。这个时候就要记得info_file要继续用上次全备文件之后文件:

$ tar -g /tmp/timestamp -zcvf backup1.tgz dest/
dest/
dest/4
dest/5
dest/6
$ cat /tmp/timestamp
1281097104

我们可以看到,这次生成的backup1.tgz并没有备份还在dest目录下面的文件1, 2, 3,而只备份了新生成的文件4, 5, 6。

然后,我们再来一个测试

$ touch dest/{7,8}
$ date +%s > /tmp/timestamp
$ touch dest/9
$ tar -g /tmp/timestamp -zcvf backup2.tgz dest/
dest/9
$ cat /tmp/timestamp
1281097553

我在创建文件7, 8之后,利用date命令手动刷新了一下info_file的内容,然后再创建了文件9,之后的备份,大家就可以很明显的看到,文件7, 8并没有被备份。

大家应该也就应该看出来了,这就存在一个问题,就是-g做增量备份时的这个info_file到底记录的是什么时刻的时间。大家可以通过实验得到,info_file的更新时间在在.tgz文件之后的,但究竟记录的时间是不是刚刚开始时间呢?

这个我们也可以通过一个小实验来得到:

$ for i in `seq 1 100`; do dd if=/dev/zero of=dest/test$i bs=1M count=10;done
$ date +%s && tar -g /tmp/timestamp -zcf backup3.tgz dest && cat /tmp/timestamp && date +%s
1281098446
1281098523
1281098524

怎么样,很明显了吧。如果直接用这种方式备份的话,那么从你备份开始到备份结束之间生成的文件是不会被备份的

不过,这也难不倒聪明的你吧。嘿嘿。

Zend Optimizer 3.3.3 is incompatible with XCache 1.2.2 in Unknown on line 0

想在服务器上同时使用Zend Optimizer与Xcache时遇到的问题

PHP Fatal error: [Zend Optimizer] Zend Optimizer 3.3.3 is incompatible with XCache 1.2.2 in Unknown on line 0

原因: Zend主动蔽屏其他一些插件,xcache偏在其内

解决方法:把xcache的配置写在zend配置的前面即可

来源:http://xcache.lighttpd.net/ticket/200

解决linux中sqlplus上下键显示历史sql语句

来源:http://www.boobooke.com/bbs/thread-18020-1-1.html

总而言之,SQL*PLUS在Linux没有命令上下翻滚功能,甚至也不能使用左右键进行当前命令的修改,这个实在是不爽。。。
上面的文章介绍的工具真的很强大,简单的来说,就是利用rlwrap这个工具来驱动sqlplus来实现上下翻滚以及左右键进行命令修改的功能。

如果你使用的是ubuntu,那么可以直接用apt-get来进行安装,如果你用的是redhat或者centos,那么就要进行编绎了。

rlwrap依赖于libtermcap-devel跟readline-devel,在进行安装之前,你还需要安装这两个包:

yum install -y readline-devel libtermcap-devel

然后,你就要下载rlwrap并进行编绎了:

wget "http://utopia.knoware.nl/~hlub/rlwrap/rlwrap-0.37.tar.gz"
tar -xvf rlwrap-0.37.tar.gz
cd rlwrap-0.37
./configure && make && make check && make install

之后,你运行:

rlwrap sqlplus /nolog

就会发现已经可以进行命令上下翻滚与回退修改了。

当然,为了方便,你也可以把sqlplus alias成 rlwrap,这样子你就不用每次都加rlwrap了

直接在linux中使用sqlplus客户端

首先到oracle的官方网站下载两个包:

oracle-instantclient-basic-<release>.i386.zip
oracle-instantclient-sqlplus-<release>.i386.zip

这两个其中release部分根据你的服务器端的release所决定,只跟服务器端相同或者比服务器端高,不能低于服务器端版本。
PS:下载地址:
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/linuxsoft.html

然后,先不要急着解压。我们先建立一个目录,假设为/opt/oracle,然后我们在这里面建立一些子目录

mkdir /opt/oracle/bin
mkdir /opt/oracle/lib
mkdir /opt/oracle/tns
mkdir -p /opt/oracle/sqlplus/admin
mkdir -p /opt/oracle/sqlplus/mesg

然后,我们解压开始下载的两个包:

unzip oracle-instantclient-basic-<release>.i386.zip
unzip oracle-instantclient-sqlplus-<release>.i386.zip

解压之后,会得到一个目录,应该是instantclient_release,进入之后,对文件做如下的文件

mv sqlplus /opt/oracle/bin
mv glogin.sql /opt/oracle/sqlplus/admin
mv * /opt/oracle/lib

然后,执行如下命令(最好是写入/etc/profile或者~/.profile)

export ORACLE_HOME=/opt/oracle
export PATH=$PATH:$ORACLE_HOME/bin
export TNS_ADMIN=$ORACLE_HOME/tns
export LD_LIBRARY_PATH=$ORACLE_HOME/lib

这个时候,你再执行

sqlplus /nolog

就会发现SQL*PLUS还是不能工作,会报如下这个错误:

Error 6 initializing SQL*Plus
Message file sp1<lang>.msb not found
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory

目前这个错误我没有找到真正的原因,但是也有一个临时解决方法:只要从ORACLE服务器端把sp1.msb与sp2.msb之类的的文件拷贝过来放在/opt/oracle/sqlplus/mesg中就可以了。如果你不能连接到你的ORACLE服务器去直接拷贝文件,也可以下载我的,用unzip解压,然后移动到/opt/oracle/sqlplus/mesg就可以了。

点击下载msb文件

之后,你就发现

$ sqlplus /nolog

SQL*Plus: Release 10.2.0.1.0 - Production on Sun Jul 25 10:19:32 2010

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL>

也就是说,SQL*PLUS可以工作了。

这个时候,你可以用easy connecting方式或者创建tnsnames.ora文件到/opt/oracle/tns中就可以了连接到你的ORACLE数据库了

PS:
有些朋友可能会碰到如下错误

SP2-1503: Unable to initialize Oracle call interface
SP2-0152: ORACLE may not be functioning properly

这个是因为你没有正确安装OCI(oracle call interface),其实就是你没有下载basic那个包,或者LD_LIBRARY_PATH设置错误。你至少要保证你的LD_LIBRARY_PATH里面存在如下四个文件:

libclntsh.so.10.1  libnnz10.so  libociei.so  libsqlplus.so

linux下mysql配置文件my.cnf详解[转]

mysqld程序:目录和文件

basedir = path 使用给定目录作为根目录(安装目录)。
character-sets-dir = path 给出存放着字符集的目录。
datadir = path 从给定目录读取数据库文件。
pid-file = filename 为mysqld程序指定一个存放进程ID的文件(仅适用于UNIX/Linux系统); Init-V脚本需要使用这个文件里的进程ID结束mysqld进程。
socket = filename 为MySQL客户程序与服务器之间的本地通信指定一个套接字文件(仅适用于UNIX/Linux系统; 默认设置一般是/var/lib/mysql/mysql.sock文件)。在Windows环境下,如果MySQL客户与服务器是通过命名管道进行通信 的,–sock选项给出的将是该命名管道的名字(默认设置是MySQL)。
lower_case_table_name = 1/0 新目录和数据表的名字是否只允许使用小写字母; 这个选项在Windows环境下的默认设置是1(只允许使用小写字母)。

 

mysqld程序:语言设置

character-sets-server = name 新数据库或数据表的默认字符集。为了与MySQL的早期版本保持兼容,这个字符集也可以用–default-character-set选项给出; 但这个选项已经显得有点过时了。
collation-server = name 新数据库或数据表的默认排序方式。
lanuage = name 用指定的语言显示出错信息。

 

mysqld程序:通信、网络、信息安全

enable-named-pipes 允许Windows 2000/XP环境下的客户和服务器使用命名管道(named pipe)进行通信。这个命名管道的默认名字是MySQL,但可以用–socket选项来改变。
local-infile [=0] 允许/禁止使用LOAD DATA LOCAL语句来处理本地文件。
myisam-recover [=opt1, opt2, ...] 在启动时自动修复所有受损的MyISAM数据表。这个选项的可取值有4种:DEFAULT、BACKUP、QUICK和FORCE; 它们与myisamchk程序的同名选项作用相同。
old-passwords 使用MySQL 3.23和4.0版本中的老算法来加密mysql数据库里的密码(默认使用MySQL 4.1版本开始引入的新加密算法)。
port = n 为MySQL程序指定一个TCP/IP通信端口(通常是3306端口)。
safe-user-create 只有在mysql.user数据库表上拥有INSERT权限的用户才能使用GRANT命令; 这是一种双保险机制(此用户还必须具备GRANT权限才能执行GRANT命令)。
shared-memory 允许使用内存(shared memory)进行通信(仅适用于Windows)。
shared-memory-base-name = name 给共享内存块起一个名字(默认的名字是MySQL)。
skip-grant-tables 不使用mysql数据库里的信息来进行访问控制(警告:这将允许用户任何用户去修改任何数据库)。
skip-host-cache 不使用高速缓存区来存放主机名和IP地址的对应关系。
skip-name-resovle 不把IP地址解析为主机名; 与访问控制(mysql.user数据表)有关的检查全部通过IP地址行进。
skip-networking 只允许通过一个套接字文件(Unix/Linux系统)或通过命名管道(Windows系统)进行本地连接,不允许ICP/IP连接; 这提高了安全性,但阻断了来自网络的外部连接和所有的Java客户程序(Java客户即使在本地连接里也使用TCP/IP)。
user = name mysqld程序在启动后将在给定UNIX/Linux账户下执行; mysqld必须从root账户启动才能在启动后切换到另一个账户下执行; mysqld_safe脚本将默认使用–user=mysql选项来启动mysqld程序。

 

mysqld程序:内存管理、优化、查询缓存区

bulk_insert_buffer_size = n 为一次插入多条新记录的INSERT命令分配的缓存区长度(默认设置是8M)。
key_buffer_size = n 用来存放索引区块的RMA值(默认设置是8M)。
join_buffer_size = n 在参加JOIN操作的数据列没有索引时为JOIN操作分配的缓存区长度(默认设置是128K)。
max_heap_table_size = n HEAP数据表的最大长度(默认设置是16M); 超过这个长度的HEAP数据表将被存入一个临时文件而不是驻留在内存里。
max_connections = n MySQL服务器同时处理的数据库连接的最大数量(默认设置是100)。
query_cache_limit = n 允许临时存放在查询缓存区里的查询结果的最大长度(默认设置是1M)。
query_cache_size = n 查询缓存区的最大长度(默认设置是0,不开辟查询缓存区)。
query_cache_type = 0/1/2 查询缓存区的工作模式:0, 禁用查询缓存区; 1,启用查询缓存区(默认设置); 2,”按需分配”模式,只响应SELECT SQL_CACHE命令。
read_buffer_size = n 为从数据表顺序读取数据的读操作保留的缓存区的长度(默认设置是128KB); 这个选项的设置值在必要时可以用SQL命令SET SESSION read_buffer_size = n命令加以改变。
read_rnd_buffer_size = n 类似于read_buffer_size选项,但针对的是按某种特定顺序(比如使用了ORDER BY子句的查询)输出的查询结果(默认设置是256K)。
sore_buffer = n 为排序操作分配的缓存区的长度(默认设置是2M); 如果这个缓存区太小,则必须创建一个临时文件来进行排序。
table_cache = n 同时打开的数据表的数量(默认设置是64)。
tmp_table_size = n 临时HEAP数据表的最大长度(默认设置是32M); 超过这个长度的临时数据表将被转换为MyISAM数据表并存入一个临时文件。

 

mysqld程序:日志

log [= file] 把所有的连接以及所有的SQL命令记入日志(通用查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname.log文件作为这种日志文件(hostname是服务器的主机名)。
log-slow-queries [= file] 把执行用时超过long_query_time变量值的查询命令记入日志(慢查询日志); 如果没有给出file参数,MySQL将在数据库目录里创建一个hostname-slow.log文件作为这种日志文件(hostname是服务器主机 名)。
long_query_time = n 慢查询的执行用时上限(默认设置是10s)。
long_queries_not_using_indexs 把慢查询以及执行时没有使用索引的查询命令全都记入日志(其余同–log-slow-queries选项)。
log-bin [= filename] 把对数据进行修改的所有SQL命令(也就是INSERT、UPDATE和DELETE命令)以二进制格式记入日志(二进制变更日志,binary update log)。这种日志的文件名是filename.n或默认的hostname.n,其中n是一个6位数字的整数(日志文件按顺序编号)。
log-bin-index = filename 二进制日志功能的索引文件名。在默认情况下,这个索引文件与二进制日志文件的名字相同,但后缀名是.index而不是.nnnnnn。
max_binlog_size = n 二进制日志文件的最大长度(默认设置是1GB)。在前一个二进制日志文件里的信息量超过这个最大长度之前,MySQL服务器会自动提供一个新的二进制日志文件接续上。
binlog-do-db = dbname 只把给定数 据库里的变化情况记入二进制日志文件,其他数据库里的变化情况不记载。如果需要记载多个数据库里的变化情况,就必须在配置文件使用多个本选项来设置,每个数据库一行。
binlog-ignore-db = dbname 不把给定数据库里的变化情况记入二进制日志文件。
sync_binlog = n 每经过n次日志写操作就把日志文件写入硬盘一次(对日志信息进行一次同步)。n=1是最安全的做法,但效率最低。默认设置是n=0,意思是由操作系统来负责二进制日志文件的同步工作。
log-update [= file] 记载出错情况的日志文件名(出错日志)。这种日志功能无法禁用。如果没有给出file参数,MySQL会使用hostname.err作为种日志文件的名字。

 

mysqld程序:镜像(主控镜像服务器)

server-id = n 给服务器分配一个独一无二的ID编号; n的取值范围是1~2的32次方启用二进制日志功能。
log-bin = name 启用二进制日志功能。这种日志的文件名是filename.n或默认的hostname.n,其中的n是一个6位数字的整数(日志文件顺序编号)。
binlog-do/ignore-db = dbname 只把给定数据库里的变化情况记入二进制日志文件/不把给定的数据库里的变化记入二进制日志文件。

 

mysqld程序:镜像(从属镜像服务器)

server-id = n 给服务器分配一个唯一的ID编号
log-slave-updates 启用从属服务器上的日志功能,使这台计算机可以用来构成一个镜像链(A->B->C)。
master-host = hostname 主控服务器的主机名或IP地址。如果从属服务器上存在mater.info文件(镜像关系定义文件),它将忽略此选项。
master-user = replicusername 从属服务器用来连接主控服务器的用户名。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-password = passwd 从属服务器用来连接主控服务器的密码。如果从属服务器上存在mater.info文件,它将忽略此选项。
master-port = n 从属服务器用来连接主控服务器的TCP/IP端口(默认设置是3306端口)。
master-connect-retry = n 如果与主控服务器的连接没有成功,则等待n秒(s)后再进行管理方式(默认设置是60s)。如果从属服务器存在mater.info文件,它将忽略此选项。
master-ssl-xxx = xxx 对主、从服务器之间的SSL通信进行配置。
read-only = 0/1 0: 允许从属服务器独立地执行SQL命令(默认设置); 1: 从属服务器只能执行来自主控服务器的SQL命令。
read-log-purge = 0/1 1: 把处理完的SQL命令立刻从中继日志文件里删除(默认设置); 0: 不把处理完的SQL命令立刻从中继日志文件里删除。
replicate-do-table = dbname.tablename 与–replicate-do-table选项的含义和用法相同,但数据库和数据库表名字里允许出现通配符”%” (例如: test%.%–对名字以”test”开头的所有数据库里的所以数据库表进行镜像处理)。

replicate-do-db = name 只对这个数据库进行镜像处理。
replicate-ignore-table = dbname.tablename 不对这个数据表进行镜像处理。
replicate-wild-ignore-table = dbn.tablen 不对这些数据表进行镜像处理。
replicate-ignore-db = dbname 不对这个数据库进行镜像处理。
replicate-rewrite-db = db1name > db2name 把主控数据库上的db1name数据库镜像处理为从属服务器上的db2name数据库。
report-host = hostname 从属服务器的主机名; 这项信息只与SHOW SLAVE HOSTS命令有关–主控服务器可以用这条命令生成一份从属服务器的名单。
slave-compressed-protocol = 1 主、从服务器使用压缩格式进行通信–如果它们都支持这么做的话。
slave-skip-errors = n1, n2, …或all 即使发生出错代码为n1、n2等的错误,镜像处理工作也继续进行(即不管发生什么错误,镜像处理工作也继续进行)。如果配置得当,从属服务器不应该在执行 SQL命令时发生错误(在主控服务器上执行出错的SQL命令不会被发送到从属服务器上做镜像处理); 如果不使用slave-skip-errors选项,从属服务器上的镜像工作就可能因为发生错误而中断,中断后需要有人工参与才能继续进行。

 

mysqld–InnoDB:基本设置、表空间文件

skip-innodb 不加载InnoDB数据表驱动程序–如果用不着InnoDB数据表,可以用这个选项节省一些内存。
innodb-file-per-table 为每一个新数据表创建一个表空间文件而不是把数据表都集中保存在中央表空间里(后者是默认设置)。该选项始见于MySQL 4.1。
innodb-open-file = n InnoDB数据表驱动程序最多可以同时打开的文件数(默认设置是300)。如果使用了innodb-file-per-table选项并且需要同时打开很多数据表的话,这个数字很可能需要加大。
innodb_data_home_dir = p InnoDB主目录,所有与InnoDB数据表有关的目录或文件路径都相对于这个路径。在默认的情况下,这个主目录就是MySQL的数据目录。
innodb_data_file_path = ts 用来容纳InnoDB为数据表的表空间: 可能涉及一个以上的文件; 每一个表空间文件的最大长度都必须以字节(B)、兆字节(MB)或千兆字节(GB)为单位给出; 表空间文件的名字必须以分号隔开; 最后一个表空间文件还可以带一个autoextend属性和一个最大长度(max:n)。例如,ibdata1:1G; ibdata2:1G:autoextend:max:2G的意思是: 表空间文件ibdata1的最大长度是1GB,ibdata2的最大长度也是1G,但允许它扩充到2GB。除文件名外,还可以用硬盘分区的设置名来定义表 空间,此时必须给表空间的最大初始长度值加上newraw关键字做后缀,给表空间的最大扩充长度值加上raw关键字做后缀(例如/dev/hdb1: 20Gnewraw或/dev/hdb1:20Graw); MySQL 4.0及更高版本的默认设置是ibdata1:10M:autoextend。
innodb_autoextend_increment = n 带有autoextend属性的表空间文件每次加大多少兆字节(默认设置是8MB)。这个属性不涉及具体的数据表文件,那些文件的增大速度相对是比较小的。
innodb_lock_wait_timeout = n 如果某个事务在等待n秒(s)后还没有获得所需要的资源,就使用ROLLBACK命令放弃这个事务。这项设置对于发现和处理未能被InnoDB数据表驱动 程序识别出来的死锁条件有着重要的意义。这个选项的默认设置是50s。
innodb_fast_shutdown 0/1 是否以最快的速度关闭InnoDB,默认设置是1,意思是不把缓存在INSERT缓存区的数据写入数据表,那些数据将在MySQL服务器下次启动时再写入 (这么做没有什么风险,因为INSERT缓存区是表空间的一个组成部分,数据不会丢失)。把这个选项设置为0反面危险,因为在计算机关闭时,InnoDB 驱动程序很可能没有足够的时间完成它的数据同步工作,操作系统也许会在它完成数据同步工作之前强行结束InnoDB,而这会导致数据不完整。

 

mysqld程序:InnoDB–日志

innodb_log_group_home_dir = p 用来存放InnoDB日志文件的目录路径(如ib_logfile0、ib_logfile1等)。在默认的情况下,InnoDB驱动程序将使用 MySQL数据目录作为自己保存日志文件的位置。
innodb_log_files_in_group = n 使用多少个日志文件(默认设置是2)。InnoDB数据表驱动程序将以轮转方式依次填写这些文件; 当所有的日志文件都写满以后,之后的日志信息将写入第一个日志文件的最大长度(默认设置是5MB)。这个长度必须以MB(兆字节)或GB(千兆字节)为单 位进行设置。
innodb_flush_log_at_trx_commit = 0/1/2 这个选项决定着什么时候把日志信息写入日志文件以及什么时候把这些文件物理地写(术语称为”同步”)到硬盘上。设置值0的意思是每隔一秒写一次日志并进行 同步,这可以减少硬盘写操作次数,但可能造成数据丢失; 设置值1(设置设置)的意思是在每执行完一条COMMIT命令就写一次日志并进行同步,这可以防止数据丢失,但硬盘写操作可能会很频繁; 设置值2是一般折衷的办法,即每执行完一条COMMIT命令写一次日志,每隔一秒进行一次同步。
innodb_flush_method = x InnoDB日志文件的同步办法(仅适用于UNIX/Linux系统)。这个选项的可取值有两种: fdatasync,用fsync()函数进行同步; O_DSYNC,用O_SYNC()函数进行同步。
innodb_log_archive = 1 启用InnoDB驱动程序的archive(档案)日志功能,把日志信息写入ib_arch_log_n文件。启用这种日志功能在InnoDB与 MySQL一起使用时没有多大意义(启用MySQL服务器的二进制日志功能就足够用了)。

 

mysqld程序–InnoDB:缓存区的设置和优化

innodb_log_buffer_pool_size = n 为InnoDB数据表及其索引而保留的RAM内存量(默认设置是8MB)。这个参数对速度有着相当大的影响,如果计算机上只运行有 MySQL/InnoDB数据库服务器,就应该把全部内存的80%用于这个用途。

innodb_log_buffer_size = n 事务日志文件写操作缓存区的最大长度(默认设置是1MB)。
innodb_additional_men_pool_size = n 为用于内部管理的各种数据结构分配的缓存区最大长度(默认设置是1MB)。
innodb_file_io_threads = n I/O操作(硬盘写操作)的最大线程个数(默认设置是4)。
innodb_thread_concurrency = n InnoDB驱动程序能够同时使用的最大线程个数(默认设置是8)。

 

mysqld程序:其它选项

bind-address = ipaddr MySQL服务器的IP地址。如果MySQL服务器所在的计算机有多个IP地址,这个选项将非常重要。
default-storage-engine = type 新数据表的默认数据表类型(默认设置是MyISAM)。这项设置还可以通过–default-table-type选项来设置。
default-timezone = name 为MySQL服务器设置一个地理时区(如果它与本地计算机的地理时区不一样)。
ft_min_word_len = n 全文索引的最小单词长度工。这个选项的默认设置是4,意思是在创建全文索引时不考虑那些由3个或更少的字符构建单词。
Max-allowed-packet = n 客户与服务器之间交换的数据包的最大长度,这个数字至少应该大于客户程序将要处理的最大BLOB块的长度。这个选项的默认设置是1MB。
Sql-mode = model1, mode2, … MySQL将运行在哪一种SQL模式下。这个选项的作用是让MySQL与其他的数据库系统保持最大程度的兼容。这个选项的可取值包括ansi、db2、 oracle、no_zero_date、pipes_as_concat。

 

注意:如果在配置文件里给出的某个选项是mysqld无法识别的,MySQL服务器将不启动。