2009年3月11日星期三
Oracle11g在RHEL 5.3上安装步骤
#检查系统硬件是否符合要求
grep MemTotal /proc/meminfo #内存>1G
grep SwapTotal /proc/meminfo #交换分区>2G(有根据内存大小的建议值,但是至少都要大于2G才符合要求)
#df -k /dev/shm/
df -k /tmp #临时目录空间>400M
df -k #硬盘空间>5G
#cat /proc/version #获取操作系统的版本,官方只支持:Asianux 2.0/3.0 Oracle Enterprise Linux 4.0/5.0 Red Hat Enterprise Linux 4.0/5.0 SUSE Enterprise Linux 10.0
#uname -r #获取Linux内核版本号
#安装Oracle所需要的包(应该全了)
cd /media/RHEL_5.3_i386_DVD/Server/ #RHEL_5.3_i386_DVD,是RHEL5.3的光盘,依实际情况而定
rpm -Uvh kernel-headers-2.6.18-128.el5.i386.rpm elfutils-libelf-devel-static-0.137-3.el5.i386.rpm elfutils-libelf-devel-0.137-3.el5.i386.rpm glibc-devel-2.5-34.i386.rpm libaio-devel-0.3.106-3.2.i386.rpm glibc-headers-2.5-34.i386.rpm libgomp-4.3.2-7.el5.i386.rpm gcc-4* sysstat-7* compat-libstdc++-33* libstdc++-devel-4* unixODBC-2* unixODBC-devel-2*
#修改内核参数
echo '# Kernel paramaters required by Oracle 11gR1
kernel.shmall = 2097152
kernel.shmmax = 2147483648
kernel.shmmni = 4096
kernel.sem = 250 32000 100 128
net.ipv4.ip_local_port_range = 1024 65000
net.core.rmem_default = 4194304
net.core.rmem_max = 4194304
net.core.wmem_default = 262144
net.core.wmem_max = 262144'>>/etc/sysctl.conf
#使 /etc/sysctl.conf 更改立即生效
/sbin/sysctl -p
#编辑 /etc/security/limits.conf
echo '
oracle soft nproc 2047
oracle hard nproc 16384
oracle soft nofile 1024
oracle hard nofile 65536'>>/etc/security/limits.conf
#编辑 /etc/pam.d/login
echo '
session required /lib/security/pam_limits.so
session required pam_limits.so'>>/etc/pam.d/login
#编辑 /etc/profile
echo '
if [ $USER = "oracle" ]; then
if [ $SHELL = "/bin/ksh" ]; then
ulimit -p 16384
ulimit -n 65536
else
ulimit -u 16384 -n 65536
fi
fi'>>/etc/profile
#创建软件安装用户、支持组,给新用户oracle设置密码
groupadd oinstall
groupadd dba
groupadd oper
useradd oracle
usermod -g oinstall -G dba,oper,oracle oracle
passwd oracle
#编辑/home/oracle/.bash_profile
#这里的ORACLE_BASE ORACLE_HOME根据具体情况来设定
echo '
umask 022
ORACLE_BASE=/home/u01/app/oracle
ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1
ORACLE_SID=orcl
PATH=$ORACLE_HOME/bin:$PATH
export PATH
export ORACLE_BASE ORACLE_HOME ORACLE_SID'>>/home/oracle/.bash_profile
#创建安装目录并修改用户权限等
mkdir -p /home/u01/app
chown oracle:oinstall /home/u01/app
chmod -R 775 /home/u01
#运行安装脚本runInstaller
/mount_point/db/runInstaller
这个步骤是参考:Oracle 安装包里面文档目录里面的b32280:Database Quick Installation Guide这份文档。
2009年3月10日星期二
看到一篇很...的关于《阿甘正传》的影评
《阿甘正传》:深刻控诉资本主义
《阿甘正传》到底是部什么电影?
有人看到第十三遍,说这是部爱情电影。
我看第一遍的时候,就非常清楚:这是一部深刻控诉资本主义社会的电影。
羽毛飞啊飞,电影开始了。憨厚的阿甘坐在长椅上等九路公交车。对着身边来来去去的人,他讲述他的故事:
幼小的阿甘,戴上背撑,两脚有那些金属支架,他无法走路。如果在我们社会主义社会,会有同学背着他上学,风雨无阻,团结友爱。阿甘的同学们干了什么呢?他们不给他让座,拣石头扔他,他夺路狂奔。
对,那个校长,居然因为阿甘智商75,想不让他上学。在我们社会主义社会,我们有九年义务教育,绝不允许、也不会发生这样的事!
有一个小姑娘,珍尼,她是资本主义社会贫农出身,有着善良的天性,她给阿甘让了个座位,不在意他是出租房屋食利阶层的孩子。万恶的警察,资本家的走狗们干了些什么?他们拆散这个贫农家庭,不许父亲和孩子住在一起。
阿甘和珍尼在大树上培养着他们深厚的友谊,如果在我们社会主义社会,一定会是他们俩一起做功课,互学互帮,先进带后进,先后带上红领巾、入团、成为积极分子!
是的,多么遗憾呀,在他们年少的美好时光,他们没有好好学习,甚至阿甘进了大学,也是天天不务正业,抱着个球猛跑,跑上四年就毕业了,带上学士帽。我们的大学生,一定要过英语四级、所有学科都及格才能毕业进入社会,成为栋梁之材。
这样的大学毕业生,只能去当兵。在资本主义国家,当兵就是当炮灰,阿甘所在的纵队在英勇的北越社会主义军队AK47的猛烈打击下,溃不成军,纵队的头儿中尉,也丢下双腿。阿甘的屁股上也挨了一枪。他冒着炮火,只为抢救回那个黑人奴隶的后代,他的心,和劳动人民站在一起。
如果是人民军队士兵,受这点轻伤,肯定是要从医院跑掉,跑回前线。阿甘并没有继续为资本家卖命,他在医院里打兵乓球,消极抵抗越战。
恶毒的是,美国居然派一个智商75的人和我们打兵乓球,这不是愚弄我们吗?大家都知道,我们的运动员战胜了阿甘,狠狠地打击了美国嚣张的气焰。阿甘只输过一次,唯一的一次,就是这一次。
尼克松接见了他,但阿甘的信念坚定,没有因此而投入资本家阵营,他勇敢机智地揭露了水门事件,把资本主义所谓民主政治暴露在天下人面前,暴露它的丑恶面目。
丢了双腿的头儿,象个流浪汉,酗酒,他为什么没有到全国各地,给政府公务员、给学生、给人民做英雄事迹报告呢?因为那是万恶的资本主义社会。
阿甘也退伍了。他们没有给他安排工作,在我们这里,他可以当法官、公务员、银行保卫、老师,总之会有一个很好的工作,而他没有,什么都没有,被抛弃了,在用过他之后冷酷地抛弃他……对不起,我忘了,阿甘是农村兵,他不享受这些政策。
好,说说他被欺骗的事。他拿了二万多美圆去买捕虾船,那个老头,明知道那船不值那么多钱,海里也没什么虾,却还是把船卖给他。这是欺诈性交易,在我们诚信的社会主义社会,绝不会发生这样的事,我们甚至不会给他机会被骗——街道办事处会给他安排一个工作,还有许多残疾人小厂,都可以接收他。制度的不同,导致命运的不同。
阿甘和没了双腿的中尉,悲惨地遭遇风暴,台风来了,却没有人通知他们。是那个地方的人排外,是那个地方的政府失职,但是,你能要求资本家的政府做些什么呢?他们可不是人民的公仆。
很难相信,阿甘发财了,他有了十几条船和公司。但,他不愿意做资本家,他离开了公司,给教堂、医院、学校捐了许多钱,遗憾的是,他没有把钱捐给青基会这样的组织,离开了组织,资金运用效果差很多啊。但没办法,谁让他在资本主义社会呢?命运。
说说珍尼。她被资产阶级腐朽堕落的社会吞噬,被大学开除、上花花公子杂志、跳脱衣舞、吸毒……顺便说一下,在我们社会主义社会,我们根本不会让她有拍裸照的机会,我们没有那样的色情杂志,绝不允许,所以,要是在我们这,她堕落的第一步就不会迈出。就算迈出那一步,也多的是劳教所、戒毒所等着帮助迷途的小羊羔。
阿甘的妈妈死了,癌症。因为她没有医疗保障,没有高超技术的医生给她做手术,没有白衣天使照顾她,她靠出租小房子为生,她也没什么钱,看不起病。我们,我们为了六十一个兄弟干了些什么,谁能忘记?制度不同,命运不同,影片在细节处也在阐述这个道理。
阿甘在路上跑了三年多。他为什么跑?是追寻理想?追寻一个乌托邦社会?逃避那个让人窒息的社会制度?但是,他最后无奈地停下,因为追随他的人太少。悲哀,二亿多人,只有那么几十个清醒者。
看看他们的媒体那时候都在干些什么?发生了那么多大事,领导开了那么多会,做了那么多重要讲话,他们不报道,他们追着一个邋遢的长跑者采访个不停。在那种社会制度下,人民被引向低级趣味,这就是没有人引导和把握方向的必然结果。
写到这里,很悲伤,悲伤得写不下去,还是收尾吧。阿甘在椅子上坐了那么久,才有一个人告诉他可以不用坐车,直接走过去就到珍尼的家。人情冷漠的社会……
珍尼死了,死于爱滋病。小福利没有了妈妈,资本主义社会又制造了一个单亲家庭。
羽毛飘啊飘,在那个社会,每个人都如一根飘在空中的羽毛,随时会改变方向和命运。幸运的是,我们不会轻如羽毛飘在天空,我们都是社会主义的螺丝钉。
2009年3月5日星期四
Mysql 备份解决方案的10点注意事项
1.是否是热备份?是的话,备份时服务器运行状态阻塞、I/O、缓存等对备份有什么影响?(Does the backup require shutting down MySQL? If not, what is the impact on the running server? Blocking, I/O load, cache pollution, etc? )
2.使用什么技术来备份,是mysqldump或者类似的方法,还是直接备份数据文件的方法?(What technique is used for the backup? Is it mysqldump or a custom product that does something similar? Is it a filesystem copy? )
3.InnoDB 引擎的数据库是不可以通过直接备份数据文件的方式来备份的(Does the backup system understand that you cannot back up InnoDB by simply copying its files? )
4.FLUSH TABLES, LOCK TABLES, or FLUSH TABLES WITH READ LOCK等操作都需要中断数据库的正常进程(Does the backup use FLUSH TABLES, LOCK TABLES, or FLUSH TABLES WITH READ LOCK? These all interrupt processing. )
5.对数据库还有其他的影响吗?(What other effects are there on MySQL? I’ve seen systems that do a RESET MASTER, which immediately breaks replication. Are there any FLUSH commands at all, like FLUSH LOGS? )
6.恢复备份的可靠性怎么样?(How does the system guarantee that you can perform point-in-time recovery? )
7.怎么样保证恢复后在二进制日志、InnoDB日志和主从复制之间数据的一致性?(How does the system guarantee consistency with the binary log, InnoDB logs, andreplication? )
8.可以使用这个系统来建立一个主从复制的从服务器吗?(Can you use the system to set up new MySQL replication slaves? How? )
9.此系统可验证备份是可恢复的吗?如:InnoDB 的恢复(Does the system verify that the backup is restorable, e.g. does it run InnoDB recovery before declaring success? )
10.对这个备份有系统的标准、保险和可恢复执行什么样的要求?它的强壮性如何?它的可靠性如何?(Does anyone stand behind it with support, and guarantee working, recoverable backups? How strong is the legal guarantee of this and how much insurance do they have? )
There are a lot of other things a backup solution needs to provide, but these are some of the things I’d require specifically for MySQL, or more so for MySQL than for other types of backups.
Where is this post coming from? Well, I’ve had a couple of frustrating encounters with vendors who sell backup products with some kind of agent for MySQL backup. I am almost never able to get any significant technical detail on how their backups are implemented, and often I can’t even get the most basic information such as “dump or file copy.” Sometimes they tell me to register and download a whitepaper that just has a bullet point “Support for MySQL Databases”. Or “I have to transfer you to the salesperson who covers your region” and I never get to talk to anyone.
Some of them even use the word “proprietary” as if it’s a good thing. In reality, a proprietary, secret backup black-box is unacceptable. MySQL backups are complex and difficult to get right. It is very application-dependent and technology-dependent. Unless I know exactly how it works, I cannot tell the client whether it’ll work for them at all.
So I offer the above list as a way to evaluate your backup provider’s suitability for enterprise-ready backup uses. If you can’t answer these questions, it’s a system that you can’t evaluate seriously, in my opinion.
翻译的不准确请大家谅解。
原文地址:http://www.mysqlperformanceblog.com/2009/03/03/10-things-you-need-to-know-about-backup-solutions-for-mysql/
服务器及数据库网址集合
MySQL相关网站
- mysql-master-master - Google Code
- MySQL AB -- MaxDB?
- MySQL Backup: Zmanda Recovery Manager for MySQL
- Hack MySQL :: Scripts and documents for hacking MySQL
- ndbinstaller (install MySQL Cluster) – Trac
- MySQL Performance Blog
- MySQL Sandbox in Launchpad
- Maatkit: a toolkit of utilities and tools for MySQL
- Xaprb
- High Performance MySQL ? Home
- google-mysql-tools - Google Code
- The Data Charmer
- Scalable BLOB Streaming Infrastructure for MySQL
SQL相关网站
- Apache Derby
- EnterpriseDB - Postgres Plus
- Firebird - Relational Database for the New Millenium
- Firebird中文社区
- flamerobin.org
- HG SQL
- HSQLDB
- Hypertable- An Open Source, High Performance, Scalable Database
- IBM Software - Cloudscape - Product Overview
- Oracle 公司
- PostgreSQL The world's most advanced open source database
- PostgreSQL 中文网 - PgSQL - PostgreSQL 中文网 中国
- Sleepycat Software- Berkeley DB Database, XML Database, Native Java Database
- Taffy DB : A JavaScript database for your browser
- db4o -- Native Java & .NET Object Database -- Open Source
- BNF Grammars for SQL-92, SQL-99 and SQL-2003
- SQLite home page
- Hypertable: An Open Source, High Performance, Scalable Database
- protobuf - Google Code
- Tokyo Cabinet: a modern implementation of DBM
- FREE Databases from Database Answers.org
- ConnectionStrings.com - Forgot that connection string? You will find it right here!
WEB Server相关网站:
一些中文博客:
2008年10月11日星期六
Mysql Replication(MySQL主从复制)介绍
Mysql Replication(MySQL主从复制)是MySQL数据库使用率非常高的一种技术,它使用某个数据库服务器为主,然后在其他数据库服务器上进行复制,后面复制的数据库也称从数据库。MySQL支持单向、异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。在设置链式复制服务器时,从服务器本身也可以充当主服务器,如:a->b->c,b对于a来说是从服务器,但是它又是c的主服务器。Mysql Replication(MySQL主从复制)主要用于:
1.使用一个从服务器执行备份,而不会干扰主服务器。在备份过程中主服务器可以继续处理更新;
2.解决数据库读需求很高的情况:Mysql复制架构绝大部分都是使用一个主服务器(Master)带一个或者多个从服务器(Slave)的架构模式,这样可以适用于读压力比较大的应用,这样的架构里面只要master和slave的压力不是太大(尤其是slave端压力)的话,异步复制的延时一般都可以容忍的。
尤其是自slave端的复制方式改成两个进程处理之后,更是减小了slave端的延时。而带来的效益是,对于数据实时性要求不是特别的敏感度的应用,只需要通过廉价的pc server来扩展slave的数量,将读压力分散到多台slave的机器上面,即可解决数据库端的读压力瓶颈。这在很大程度上解决了目前很多中小型网站的数据库压力瓶颈问题,甚至有些大型网站也在使用类似方案解决数据库瓶颈。这个架构方案的实施也会比较廉价同时易于扩展。
甚至还可以使用第三方软件来专门将MySQL的读写进行分离。这类软件有:MySQL Proxy及Amoeba。
二、Mysql Replication(MySQL主从复制)的原理:
1、复制进程Mysql的复制(replication)是一个异步的复制,从一个Mysql instace(称之为Master)复制到另一个Mysql instance(称之Slave)。实现整个复制操作主要由三个进程完成的,其中两个进程在Slave(Sql进程和IO进程),另外一个进程在Master(IO进程)上。
要实施复制,首先必须打开Master端的binary log(bin-log)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。复制的基本过程如下:
1)、Slave上面的IO进程连接上Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
2)、Master接收到来自Slave的IO进程的请求后,通过负责复制的IO进程根据请求信息读取制定日志指定位置之后的日志信息,返回给Slave的IO进程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息已经到Master端的bin-log文件的名称以及bin-log的位置;
3)、Slave的IO进程接收到信息后,将接收到的日志内容依次添加到Slave端的relay-log文件的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master-info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”;
4)、Slave的Sql进程检测到relay-log中新增加了内容后,会马上解析relay-log的内容成为在Master端真实执行时候的那些可执行的内容,并在自身执行。
实际上在老版本的Mysql的复制实现在Slave端并不是两个进程完成的,而是由一个进程完成。但是后来发现这样做存在较大的风险和性能问题,主要如下:
首先,一个进程就使复制bin-log日志和解析日志并在自身执行的过程成为一个串行的过程,性能受到了一定的限制,异步复制的延迟也会比较长。另外,Slave端从Master端获取bin-log过来之后,需要接着解析日志内容,然后在自身执行。在这个过程中,Master端可能又产生了大量变化并声称了大量的日志。如果在这个阶段Master端的存储出现了无法修复的错误,那么在这个阶段所产生的所有变更都将永远无法找回。如果在Slave端的压力比较大的时候,这个过程的时间可能会比较长。
所以,后面版本的Mysql为了解决这个风险并提高复制的性能,将Slave端的复制改为两个进程来完成。提出这个改进方案的人是Yahoo!的一位工程师“Jeremy Zawodny”。这样既解决了性能问题,又缩短了异步的延时时间,同时也减少了可能存在的数据丢失量。
当然,即使是换成了现在这样两个线程处理以后,同样也还是存在slave数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事物中,这些问题都是会存在的。
如果要完全避免这些问题,就只能用mysql的cluster来解决了。不过mysql的cluster是内存数据库的解决方案,需要将所有数据都load到内存中,这样就对内存的要求就非常大了,对于一般的应用来说可实施性不是太大。
2、复制实现级别Mysql的复制可以是基于一条语句(Statement level),也可以是基于一条记录(Row level),可以在Mysql的配置参数中设定这个复制级别,不同复制级别的设置会影响到Master端的bin-log记录成不同的形式。
Row Level:日志中会记录成每一行数据被修改的形式,然后在slave端再对相同的数据进行修改。优点:在row level模式下,bin-log中可以不记录执行的sql语句的上下文相关的信息,仅仅只需要记录那一条记录被修改了,修改成什么样了。所以row level的日志内容会非常清楚的记录下每一行数据修改的细节,非常容易理解。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题。
缺点:row level下,所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如有这样一条update语句:update product set owner_member_id = ‘b’ where owner_member_id = ‘a’,执行之后,日志中记录的不是这条update语句所对应额事件(mysql以事件的形式来记录bin-log日志),而是这条语句所更新的每一条记录的变化情况,这样就记录成很多条记录被更新的很多个事件。自然,bin-log日志的量就会很大。尤其是当执行alter table之类的语句的时候,产生的日志量是惊人的。因为Mysql对于alter table之类的表结构变更语句的处理方式是整个表的每一条记录都需要变动,实际上就是重建了整个表。那么该表的每一条记录都会被记录到日志中。
Statement Level:每一条会修改数据的sql都会记录到 master的bin-log中。slave在复制的时候sql进程会解析成和原来master端执行过的相同的sql来再次执行。优点:statement level下的优点首先就是解决了row level下的缺点,不需要记录每一行数据的变化,减少bin-log日志量,节约IO,提高性能。因为他只需要记录在Master上所执行的语句的细节,以及执行语句时候的上下文的信息。缺点:由于他是记录的执行语句,所以,为了让这些语句在slave端也能正确执行,那么他还必须记录每条语句在执行的时候的一些相关信息,也就是上下文信息,以保证所有语句在slave端杯执行的时候能够得到和在master端执行时候相同的结果。
另外就是,由于Mysql现在发展比较快,很多的新功能不断的加入,使mysql得复制遇到了不小的挑战,自然复制的时候涉及到越复杂的内容,bug也就越容易出现。在statement level下,目前已经发现的就有不少情况会造成mysql的复制出现问题,主要是修改数据的时候使用了某些特定的函数或者功能的时候会出现,比如:sleep()函数在有些版本中就不能真确复制,在存储过程中使用了last_insert_id()函数,可能会使slave和master上得到不一致的id等等。由于row level是基于每一行来记录的变化,所以不会出现类似的问题。从官方文档中看到,之前的Mysql一直都只有基于statement的复制模式,直到5.1.5版本的Mysql才开始支持row level的复制。
从5.0开始,Mysql的复制已经解决了大量老版本中出现的无法正确复制的问题。但是由于存储过程的出现,给Mysql的复制又带来了更大的新挑战。
另外,从5.1.8版本开始,Mysql提供了除Statement Level和Row Level之外的第三种复制模式:Mixed,实际上就是前两种模式的结合。在Mixed模式下,Mysql会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种。新版本中的Statment level还是和以前一样,仅仅记录执行的语句。而新版本的Mysql中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录,如果sql语句确实就是update或者delete等修改数据的语句,那么还是会记录所有行的变更。
3、复制常用架构
一个Master带多个slave的架构实施非常简单,多个slave和单个slave的实施并没有太大区别。在Master端并不care有多少个slave连上了master端,只要有slave进程通过了连接认证,向他请求binlog信息,他就会按照连接上来的io进程的要求,读取自己的binlog信息,返回给slave的IO进程。对于slave的配置细节,在Mysql的官方文档上面已经说的很清楚了,甚至介绍了多种实现slave的配置方法。
Mysql不支持一个Slave instance从属于多个Master的架构。就是说,一个slave instance只能接受一个master的同步源,听说有patch可以改进这样的功能,但没有实践过。Mysql AB之所以不实现这样的功能,主要是考虑到冲突解决的问题。
Mysql也可以搭建成dual master模式,也就是说两个Mysql instance互为对方的Master,也同时为对方的Slave。
不过一般这种架构也是只有一端提供服务,避免冲突问题。因为即使在两边执行的修改有先后顺序,由于复制的异步实现机制,同样会导致即使在晚做的修改也可能会被早做的修改所覆盖,就像如下情形:时间点 Mysql A Mysql B1 更新x表y记录为102 更新x表y记录为203 获取到A日志并应用,更新x表的y记录为10(不符合期望)4 获取B日志更新x表y记录为20(符合期望)这样,不仅在B库上面的数据不是用户所期望的结果,A和B两边的数据也出现了不一致的情况。除非能将写操作根据某种条件固定分开在A和B两端,保证不会交叉写入,才能够避免上面的问题。
三、一些相关的扩展和管理脚本
Google的SemiSyncReplication扩展
MySQL Community Replication Monitoring System
Maatkit的管理脚本MySQL Master-Master Replication Manager (Google Code)
MySQL Replication Manager (Google Code)
四、参考文档
官方文档--第6章:MySQL中的复制官方文档--Chapter 15. Replication
MySQL Replication(复制)基本原理--Sky.Jian
五、其他参考
Mysql Proxy简介
MySQL Community Replication Monitoring System
Mysql 管理工具集 maatkit
2008年10月10日星期五
SHELL水平测试OVERVIEW篇部分答案
原题目地址:http://bbs.chinaunix.net/viewthread.php?tid=476260
(2)C Shell是加州伯克利大学的Bill Joy为BSD Unix开发的,与sh不同,它的语法与C语言很相似。它提供了Bourne Shell所不能处理的用户交互特征,如命令补全、命令别名、历史命令替换等。但是,C Shell与BourneShell并不兼容。
(3)Korn Shell是AT&T Bell实验室的David Korn开发的,它集合了C Shell和Bourne Shell的优点,并且与Bourne Shell向下完全兼容。Korn Shell的效率很高,其命令交互界面和编程交互界面都很好。
(4)Bourne Again Shell (即bash)是自由软件基金会(GNU)开发的一个Shell,它是Linux系统中一个默认的Shell。Bash不但与Bourne Shell兼容,还继承了C Shell、Korn Shell等优点。
A: 在此我们主要讨论Bourne shell及其兼容shell。在许多情况下shell会在子shell中执行命令:
1.(...)结构
小括号内的命令会在一个子shell环境中执行,命令执行的结果不会影响当前的shell环境。需要注意是此时变量$$会显示当前shell的进程id,而不是子shell的进程id。
参考:
{...;}结构中的命令在当前shell中执行,(内部)命令执行的结果会影响当前的shell环境。
a.使用临时文件
...
#in subshell
a=100
echo "$a">tmpfile
...
#in parent
read b
b.使用命名管道
mkfifo pipef
(...
echo "$a" > pipef
...)
read b
c.使用coprocess(ksh)
( echo "$a" &)
read -p b
d.使用命令替换
b=`echo "$a"`
e.使用eval命令
eval `echo "b=$a"`
f.使用here document
read b <`echo "$a"`
END
g.使用here string(bash/pdksh)
read b <<<`echo "$a"`
shell
BLOCK
方法二:
if then fi 结构来屏蔽
以下题目暂无答案
Cacti的Mysql模板
Cacti是一款非常强大的系统监视工具,同样强大的还有它的可扩展性,在它的论坛里有上百种的各种设备、软件、服务的监视模板被发表、分享。这里给大家介绍一款专门用于查看Mysql各种状态的模板:mysql-cacti-templates ,它是Google Code的一个项目。
地址:http://code.google.com/p/mysql-cacti-templates/
监视图片的演示:http://www.xaprb.com/blog/2008/05/25/screenshots-of-improved-mysql-cacti-templates/
安装方式:
1.准备工作:下载和解压
2.在Mysql中创建有SUPER权限的用户,并设定密码和赋予相应的登录位置;
3.将ss_get_mysql_stats.php 放到 cacti/scripts/ 文件夹中;
4.在Cacti中导入cacti_host_template_x_db_server_ht.xml,再添加Mysql相关的图表即可。
注意:如需要监视多个Mysql服务器的话,尽量将每个的帐号及密码保持一直,否则需要自己需改模板。
一些MySQL Patches介绍
Google Code里面有一个google-mysql-tools项目,里面提供了一些MySQL的工具,以及提供了对MySQL 4和 MySQL 5做了大量功能扩展后的补丁。
其中对MySQL4系列的功能扩展详情请见:http://code.google.com/p/google-mysql-tools/wiki/Mysql4Patches
其中对MySQL5系列的功能扩展详情请见:http://code.google.com/p/google-mysql-tools/wiki/Mysql5Patches
整个项目的地址:http://code.google.com/p/google-mysql-tools/
ebay对MySQL做的扩展
地址:http://code.google.com/p/mysql-heap-dynamic-rows/
另外,还有一个专门从事MySQL的Team,其中包括了《High Performance MySQL Second Edition》的作者,他们在google和其他组织发布的补丁包上进行进一步的扩展MySQL。
他们的官方网址是:http://www.percona.com/
发布补丁的地址:http://www.percona.com/percona-lab.html
还可以参考:http://www.mysqlperformanceblog.com/mysql-patches/
2008年9月29日星期一
Mysql Proxy简介
Mysql Proxy运行于程序和数据库之间,可以将所有发给数据库的请求经过她的处理后转发给事先设定的数据库。它可以用来分析、监控和变换(transform)通信数据,它支持非常广泛的使用场景:
负载平衡和故障转移处理
查询分析和日志
SQL宏(SQL macros)
查询重写(query rewriting)
执行相关命令
读写分离
比较特别的是Mysql Proxy的脚本语言是Lua。
下载页面:http://dev.mysql.com/downloads/mysql-proxy/index.html
文档页面:http://dev.mysql.com/doc/refman/5.1/en/mysql-proxy.html
项目页面:http://forge.mysql.com/wiki/MySQL_Proxy
一个全是Mysql Proxy内容的blog:http://jan.kneschke.de/
2008年9月13日星期六
Mysql DBA tools--monolith
Monolith是一款类似于MySQL Enterprise Monitor的开源工具,使用PHP技术,在很大程度上可以作为替代的MySQL Enterprise Monitor的低成本解决方案。
官方地址:http://sourceforge.net/projects/monolith-mysql
MySQL Enterprise Monitor官方网址:http://www.mysql.com/products/enterprise/monitor.html
2008年9月12日星期五
Mysql集群安装脚本ndbinstaller
地址:http://www.jimdowling.info/ndbinstaller-trac
下载:wget http://www.jimdowling.info/ndbinstaller/trunk/ndbinstaller.sh
SVN地址:svn co http://www.jimdowling.info/ndbinstaller/trunk/ ndbinstaller
2008年9月11日星期四
MySQL Community Replication Monitoring System
官方主页:https://launchpad.net/mysql-replication-monitor
下载地址:https://launchpad.net/is-replication-status/+download
文档页面:http://forge.mysql.com/wiki/MySQL_Community_Replication_Monitoring_System
另外一篇介绍:Introducing the MySQL community-driven Replication Monitoring Tools
2008年9月10日星期三
Configuring Apache for Maximum Performance[转载]
点此阅读原文:原文地址。
Apache is an open-source HTTP server implementation. It is the most popular web server on the Internet. The December 2005 Web Server Survey conducted by Netcraft [1] shows that about 70% of the web sites on Internet are using Apache.
1. Apache server performance
Apache server performance can be improved by adding additional hardware resources such as RAM, faster CPU etc. But, most of the time, the same result can be achieved by custom configuration of the server. This article looks into getting maximum performance out of Apache with the existing hardware resources, specifically on the Linux systems. Of course, it is assumed that there is enough hardware resources, especially enough RAM that the server isn't swapping frequently. First two sections look into various Compile-Time and Run-Time configuration options. Run-Time section assumes that Apache is compiled with prefork MPM. HTTP compression and caching is discussed next. Finally, using separate servers for serving static and dynamic contents are being discussed. Basic knowledge of compiling and configuring Apache, and Linux are assumed.
2 Compile-Time Configuration Options
2.1 Load only the required modules:
The Apache HTTP Server is a modular program where the administrator can choose the functionality to include in the server by selecting a set of modules [2]. The modules can be either statically compiled to the httpd binary or else can be compiled as Dynamic Shared Objects (DSOs). DSO modules can be either compiled when the server is built or else can use the apxs utility to compile and add at a later date. The module mod_so must be statically compiled into the Apache core to enable DSO support.
Run apache with only the required modules. This reduces the memory footprint and hence the server performance. Statically compiling modules will save RAM that's used for supporting dynamically loaded modules, but one has to recompile Apache whenever a module is to be added or dropped. This is where the DSO mechanism comes handy. Once the mod_so module is statically compiled, any other module can be added or dropped using the LoadModule command in httpd.conf file - of course, you will have to compile the modules using apxs if it wasn't compiled when the server was built.
2.2 Choose appropriate MPM:
Apache server ships with a selection of Multi-Processing Modules (MPMs) which are responsible for binding to network ports on the machine, accepting requests, and dispatching children to handle the requests [3]. Only one MPM can be loaded into the server at any time.
Choosing an MPM depends on various factors such as whether the OS supports threads, how much memory is available, scalability versus stability, whether non-thread-safe third-party modules are used, etc.. Linux systems can choose to use a threaded MPM like worker or a non-threaded MPM like prefork:
Worker MPM uses multiple child processes. It's multi-threaded within each child and each thread handles a single connection. Worker is fast and highly scalable and the memory footprint is comparatively low. It's well suited for multiple processors. On the other hand, worker is less tolerant to faulty modules and faulty threads can affect all the threads in a child process.
Prefork MPM uses multiple child processes, each child handles one connection at a time. Prefork is well suited for single or double CPU systems, speed is comparable to that of worker and it's highly tolerant to faulty modules and crashing children. But the memory usage is high, more traffic leads to more memory usage.
2008年9月9日星期二
How To Repair MySQL Replication [转载]
原文点此阅读:原文地址。
其实文中的方法很简单,就是先确定复制出问题后,再利用 SET GLOBAL SQL_SLAVE_SKIP_COUNTER = number 语句来修复一下。
如果同步系统的一些状态参数有变化或长时间未同步后再次同步等情况,请参考我的这篇文章:Mysql Replication Tip。
Version 1.0
Author: Falko Timme <ft [at] falkotimme [dot] com>
Last edited 05/29/2008
If you have set up MySQL replication, you probably know this problem: sometimes there are invalid MySQL queries which cause the replication to not work anymore. In this short guide I explain how you can repair the replication on the MySQL slave without the need to set it up from scratch again.
I do not issue any guarantee that this will work for you!
1 Identifying The Problem
To find out whether replication is/is not working and what has caused to stop it, you can take a look at the logs. On Debian, for example, MySQL logs to /var/log/syslog:
grep mysql /var/log/syslog
server1:/home/admin# grep mysql /var/log/syslog
May 29 09:56:08 http2 mysqld[1380]: 080529 9:56:08 [ERROR] Slave: Error 'Table 'mydb.taggregate_temp_1212047760' doesn't exist' on query. Default database: 'mydb'. Query: 'UPDATE thread AS thread,taggregate_temp_1212047760 AS aggregate
May 29 09:56:08 http2 mysqld[1380]: ^ISET thread.views = thread.views + aggregate.views
May 29 09:56:08 http2 mysqld[1380]: ^IWHERE thread.threadid = aggregate.threadid', Error_code: 1146
May 29 09:56:08 http2 mysqld[1380]: 080529 9:56:08 [ERROR] Error running query, slave SQL thread aborted. Fix the problem, and restart the slave SQL thread with "SLAVE START". We stopped at log 'mysql-bin.001079' position 203015142
server1:/home/admin#
You can see what query caused the error, and at what log position the replication stopped.
To verify that the replication is really not working, log in to MySQL:
mysql -u root -p
On the MySQL shell, run:
mysql> SHOW SLAVE STATUS \G
If one of Slave_IO_Running or Slave_SQL_Running is set to No, then the replication is broken:
Mysql 管理工具集 maatkit
官方网站:http://www.maatkit.org/
文档地址:http://maatkit.sourceforge.net/doc/maatkit.html
Google Code 页面:http://code.google.com/p/maatkit/
下载地址:wget http://www.maatkit.org/get/script_name script_name 见下面的列表
SVN地址:http://maatkit.googlecode.com/svn/trunk
其中debian有maatkit的deb包了,地址:http://packages.debian.org/search?keywords=maatkit
Debian下安装deb包也极为方便,先安装 libterm-readkey-perl ( apt-get install libterm-readkey-perl ),再安装maatkit即可( dpkg -i maatkit.deb )。
Maatkit包含以下主要工具:
1、mk-table-checksum 检查主从表是否一致及有效的工具
2、mk-table-sync 使表一致的工具,不必重载从表而能够保证一致
3、mk-visual-explain exlpain解释工具
4、mk-heartbeat 主从同步的监视工具,能够给出从落后于主多少
5、mk-parallel-dump 多线程的mysqldump工具
6、mk-parallel-restore 多线程的表回复工具
7、mk-query-profiler 查询检测分析工具
8、mk-deadlock-logger 死锁的记录工具,支持innodb
9、mk-duplicate-key-checker key侦测工具
10、mk-show-grants 权限管理显示工具
11、mk-slave-restart slave的检测和重启工具
12、mk-slave-delay slave delay replication 的工具
13、mk-slave-prefetch This tool implements Paul Tuckfield’s famous “oracle” algorithm to read ahead of the slave SQL thread in the relay logs, rewriting queries as SELECT and executing them to warm the slave’s caches. This can help an I/O-bound slave SQL thread run faster under some conditions, because it doesn’t have to wait for as much I/O to complete.
2008年9月8日星期一
Mysql优化工具--MySQLTuner
最近发现一个优化Mysql时可以使用的小工具--MySQLTuner,这个工具是一个prel写的脚本,运行后会给出当前mysql的各种参数,对进一步优化起到很好的指示。
官方wiki:http://wiki.mysqltuner.com/MySQLTuner
下载地址:http://mysqltuner.com/mysqltuner.pl
SVN: svn co http://tools.assembla.com/svn/mysqltuner/
运行的结果:
server1:~# ./mysqltuner.pl
>> MySQLTuner 0.9.8 - Major Hayden <major@mhtx.net>
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: <-- root
Please enter your MySQL administrative password: <-- yourrootsqlpassword
-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[!!] Your MySQL version 4.1.11-Debian_etch1-log is EOL software! Upgrade soon!
[OK] Operating on 32-bit architecture with less than 2GB RAM
-------- Storage Engine Statistics -------------------------------------------
[--] Status: +Archive -BDB -Federated +InnoDB +ISAM -NDBCluster
[--] Data in MyISAM tables: 301M (Tables: 2074)
[--] Data in HEAP tables: 379K (Tables: 9)
[!!] InnoDB is enabled but isn't being used
[!!] ISAM is enabled but isn't being used
[!!] Total fragmented tables: 215
-------- Performance Metrics -------------------------------------------------
[--] Up for: 12d 18h 33m 30s (1B q [1K qps], 185K conn, TX: 3B, RX: 377M)
[--] Reads / Writes: 78% / 22%
[--] Total buffers: 2.6M per thread and 58.0M global
[OK] Maximum possible memory usage: 320.5M (20% of installed RAM)
[OK] Slow queries: 0% (17/1B)
[OK] Highest usage of available connections: 32% (32/100)
[OK] Key buffer size / total MyISAM indexes: 16.0M/72.3M
[OK] Key buffer hit rate: 99.9%
[OK] Query cache efficiency: 99.9%
[!!] Query cache prunes per day: 47549
[OK] Sorts requiring temporary tables: 0%
[!!] Temporary tables created on disk: 28%
[OK] Thread cache hit rate: 99%
[!!] Table cache hit rate: 0%
[OK] Open file limit used: 12%
[OK] Table locks acquired immediately: 99%
[!!] Connections aborted: 20%
-------- Recommendations -----------------------------------------------------
General recommendations:
Add skip-innodb to MySQL configuration to disable InnoDB
Add skip-isam to MySQL configuration to disable ISAM
Run OPTIMIZE TABLE to defragment tables for better performance
Enable the slow query log to troubleshoot bad queries
When making adjustments, make tmp_table_size/max_heap_table_size equal
Reduce your SELECT DISTINCT queries without LIMIT clauses
Increase table_cache gradually to avoid file descriptor limits
Your applications are not closing MySQL connections properly
Variables to adjust:
query_cache_size (> 16M)
tmp_table_size (> 32M)
max_heap_table_size (> 16M)
table_cache (> 64)
2008年8月29日星期五
《大实话》唱词
说天亲,天可不算亲,天有日月和星辰。日月穿梭催人老,带走世上多少的人。
说地亲,地也不算亲,地长万物似黄金。争名夺利有多少载,看罢新坟看旧坟。
说爹妈亲,爹妈可不算亲,爹妈不能永生存。满堂的儿女留也留不住,一捧黄土雨泪纷纷。
说儿子亲,不算个亲,人留后代草留根。八抬大轿把媳妇娶,儿子送给老丈人。
说亲戚亲,亲戚可不算亲,你有我富才算亲。有朝一日这日子过穷了,富者不登穷家的门。
说朋友亲,朋友可不算亲,朋友本是路遇的人。人心不足这蛇吞象,朋友翻脸就是仇人。
说哥们儿亲,哥们儿可不算亲,吵吵闹闹要把家分。兄如豺狼弟似猛虎,弟兄翻脸狠上家翻坟。
说丈夫亲,丈夫可不算亲,背着妻子外边找情人。沾花惹草得下了病,回家之后还得闹离婚。
说媳妇亲,媳妇可不算亲,背着丈夫外边找情人。她跟那个小白脸子俩人闷得儿蜜,全忘了张文顺的那么点子恩。
说小蜜亲,小蜜可不算亲,你拿出金银财宝她献了身。有朝马死黄金尽,她归置东西进了那张文顺的门。
要说亲,观众们亲,观众演员心连着心。曾记得早年间有那么句古话,没有君子不养艺人。
昨日里趟风冒雪来到塞北,今日里下江南桃杏争春。
我劝诸位,酒色财气君莫占,吃喝嫖赌也莫沾身,没事儿就把那相声大会进,听两段相声就散散心。
抱拳拱手尊列位,愿各位 ——招财进宝,日进斗金。
给我比较有印象的有三个版本:两个和张文顺老先生的全本,以及和于谦老师的删节版。
其中,和张老先生的两个版本是最具有观赏性的,特别是有个版本里由于张老先生的不断打岔,导致郭老师唱错,场面尤其搞笑。