灌溉梦想,记录脚步

linux/centos cacti备份及恢复shell

备份及恢复Cacti
(1)cacti的文件目录的备份(rra目录除外)
(2)mysql备份
mysqldump -p cacti >/tmp/cacti.sql
(3)备份rra
dumprrd.sh

#!/bin/sh
rrddump=”/usr/local/bin/rrdtool dump”
xmldir=”/tmp/mysqlbackup/rraxml”
xmlbackup=”/tmp/mysqlbackup/rrabak”
mysqlbackupDIR=”/tmp/mysqlbackup”
rrdpath=”/usr/local/share/cacti/rra/”
DATE=`date +”%y-%m-%d”`
if [ ! -e {xmldir}
继续阅读 »

SQLite

  ★技术上的优点和特性
  SQLite是一个轻量级、跨平台的关系型数据库。既然号称关系型数据库,支持SQL92标准中常用的玩意儿(比如视图、事务、触发器等)就是理所当然的了,咱今天就不细说了。今天主要聊聊一些有点特色的玩意儿。

  ◇轻量级
  先说它的第一个特色:轻量级。想必SQLite的作者很看重这个特性,连它的Logo都是用的“羽毛”,来显摆它的轻飘飘。
  SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。

  ◇绿色软件
  SQLite的另外一个特点是绿色:它的核心引擎本身不依赖第三方的软件,使用它也不需要“安装”。所以在部署的时候能够省去不少麻烦。

  ◇单一文件
  所谓的“单一文件”,就是数据库中所有的信息(比如表、视图、触发器、等)都包含在一个文件内。这个文件可以copy到其它目录或其它机器上,也照用不误。

  ◇跨平台/可移植性
  如果光支持主流操作系统,那就没啥好吹嘘的了。除了主流操作系统,SQLite还支持了很多冷门的操作系统。我个人比较感兴趣的是它对很多嵌入式系统(比如Android、Windows Mobile、Symbin、Palm、VxWorks等)的支持。

  ◇内存数据库(in-memory database)
  这年头,内存越来越便宜,很多普通PC都开始以GB为单位来衡量内存(服务器就更甭提了)。这时候,SQLite的内存数据库特性就越发显得好用。
  SQLite的API不区分当前操作的数据库是在内存还是在文件(对于存储介质是透明的)。所以如果你觉得磁盘I/O有可能成为瓶颈的话,可以考虑切换为内存方式。切换的时候,操作SQLite的代码基本不用大改,只要在开始时把文件Load到内存,结束时把内存的数据库Dump回文件就OK了。在这种情况下,前面提到的“online backup API”就派上用场了,聪明的同学应该明白我为啥这么期待backup功能了吧?

  ★技术上的缺点和不足
  前面光聊了特性和优点,为了避免枪手写软文的嫌疑,再来说说SQLite的一些缺点。列位看官将来如果想用它,这些缺点要权衡一下。

  ◇并发访问的锁机制
  SQLite在并发(包括多进程和多线程)读写方面的性能一直不太理想。数据库可能会被写操作独占,从而导致其它读写操作阻塞或出错。

  ◇SQL标准支持不全
  在它的官方网站上,具体列举了不支持哪些SQL92标准。我个人感觉比较不爽的是不支持外键约束。

  ◇网络文件系统(以下简称NFS)
  有时候需要访问其它机器上的SQLite数据库文件,就会把数据库文件放置到网络共享目录上。这时候你就要小心了。当SQLite文件放置于NFS时,在并发读写的情况下可能会出问题(比如数据损坏)。原因据说是由于某些NFS的文件锁实现上有Bug。

  ★编程语言接口
  SQLite支持很多种语言的编程接口。这对于我这种喜欢混用多种编程语言的人来说,是很爽的。下面我大概介绍一下。

  ◇C/C++
  由于SQLite本身是C写的,它自带的API也是C接口的。所以C/C++用起来最直接了。假如你不喜欢面向过程的C API风格,可以另外找个C++的包装库。想重新发明轮子的同学,也可以自己包装一个。
  ◇Java
  如果要用Java访问SQLite,可以通过SQLite的JDBC驱动,或者通过专门的SQLite包装库。我个人建议走JDBC方式,万一将来要换数据库,代码就不用大改。
  ◇Python
  pysqlite是Python操作SQLite的首选。从Python 2.5开始,它已经被整合到Python的标准库中。看来Python社区还是蛮喜欢SQLite嘛。
  ◇dotNet
  对于喜欢dotNet的同学,可以通过SQLite的ADO.NET驱动来访问。
  ◇Ruby
  Ruby可以通过SQLite-Ruby操作SQLite数据库,不过我没用过。
  ◇Perl
  在CPAN上有DBD::SQLite,不过我也没用过。

  ★一些非技术的参考因素
  前面讲的都是技术层面的话题,如果你考虑在公司的商业软件项目中使用SQLite。还需要根据“如何选择开源项目”里面提到的几个参考因素,再评估一下。
  ◇授权协议(License)
  SQLite使用的是Public Domain协议,这是最爽一种,可以放心大胆地用。
  ◇用户的普及程度
  最近这几年,使用SQLite的人越来越多(从Google Trends可以反应出来)。包括一些大公司也开始把它整合到产品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。这说明它的健壮性、稳定性等方面不会有太大问题。
  ◇开发的活跃程度
  如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2个月都会有更新。说明开发的活跃度还是非常高的。
  从上述几个非技术因素来看,SQLite用于商业公司的软件项目还是非常靠谱的。

谈谈如何利用互联网学习英语

利用互联网学习英语,可以从下面几个方面进行:

1.国内有数量众多的免费英语学习网站,提供大量英语学习材料,包括阅读文章,听力材料,考题等。经常上去逛逛会有收获。

2.登录CRI、BBC、CNN等网站收听在线英语广播或者在线英语视频。这比听收音机强,不受时间限制,而且听不懂可以重复。

3.参加一些英语网站举办的网上英语角,英语聊天室等活动,最好跟外国人交朋友。

4.每天登录国外英文网站,如www.time.com,www.nationalgeographic.com,或国外知名大学网站等,阅读自己关心的新闻事物。

5. 在一些英语网站订阅email英语杂志,每天都能收到一些文章,词汇用法或句子等。

6.在网上搜寻和下载各类英语学习软件。

ORACLE客户端与服务器连接

  对于初学者,关于客户端工具与数据库服务器的连接总是会存在如下的疑问:
  我一定要在本地机器上面安装Oracle数据库吗?
  如果我在本地安装了Oracle数据库,为什么还要配置一个TNS来连接数据库呢,它怎么这么笨呢?
  如果本地可以不安装数据库,那又怎么弄呢?
  还有SQL*Plus,PL/SQL Developer和Oracle数据库有什么关系呢?
  要弄清楚上面的问题和这些名词之间的关系,我下面就以一个比较笨拙的比喻来说明:
  首先需要了解两个进程(Windows平台):Oracle数据库进程和Oracle数据库服务监听进程。如果按照这两个进程来划分安装阶段的话,我们可以将安装阶段分为数据库后台系统安装和创建数据库两个阶段,而数据库进程和数据库服务监听进程分别就是两个安装阶段创建的。
  而第一个阶段安装完成后,其实Oracle数据库并没有“真正数据库”的功能,因为它只是具备了管理数据库能力的一个基础系统,并不能存储数据。就像盖房子,需要先有块地皮,才能盖房子,但是光地皮它还不是房子。而如果Oracle数据库进程成功启动了,说明养?上面我们可以清楚,如果我需要操作数据库服务器,只要如下条件就可以了:
  知道TNS,即数据库地址相关的信息
  具备Oracle Net软件层
  客户端应用
  TNS的知识已经足够了,那怎么样才能使自己的系统中拥有Oracle Net软件层呢?有几种途径:
  专门安装Oracle Client软件,可以从Oracle网站下载
  安装Oracle开发工具,如Form、Report、Discoverer等等,因为这些软件也带了Oracle Net软件层
  安装Oracle数据库,它也带了Oracle Net软件层
  而我们需要的是一个客户端应用,以便我们来操作数据库,SQL*Plus就是Oracle很多产品中自带的一个应用工具,而PL/SQL Developer则是第三方公司开发的一个Oracle客户端工具。因此要使用SQL*Plus或者PL/SQL Developer操作数据库之前,我们一般要做的就是进行TNS配置,而要进行TNS配置就需要安装Oracle Net软件层。
  综上所述,要操作Oracle数据库,或者说在Oracle数据库环境下进行数据库应用开发,我们最常见的环境组合:
  开发机器上安装Oracle Client软件,让其具备Oracle Net软件层,进而配置TNS,标识出要连接的数据库信息;并安装PL/SQL Developer这样的Oracle客户端开发工具。而Oracle数据库服务器系统安装在公司的服务器或者“遥远的地方”,和开发人员没有关系,只要TNS配置好就行
  开发机器上安装Oracle数据库,同时也具备了Oracle Net软件层的功能,配置TNS,标识出连接本机上的数据库;同时安装Oracle客户端开发工具
  这样一来没有条件在自己机器上面安装一个Oracle数据库的同学就可以选择第一个方案,然后找一个有条件同学的数据库服务器或者公司的数据库服务器来进行学习,当然前提是要保证网络连接!

ubuntu 9.10下linuxqq经常挂掉的解决方案

ubuntu 9.10下linuxqq(官方的QQ,八百年不更新的那个了)

sudo vim /usr/bin/qq

增加

#!/bin/sh

export GDK_NATIVE_WINDOWS=true

cd /usr/share/tencent/qq/

./qq

经试验正确无误。。。linuxqq不再挂

Gearman for MySQL

  Gearman是一个开源的分布式调度框架,支持多种语言。在分布式环境中,如何管理大量的服务器,将某些任务分发到大量的机器上调度执行,是一个比较大的挑战,Gearman为该类任务提供了一个不错的思路。在未来的MySQL集群环境中,Gearman这类工具应当大有用武之地,所以它也提供了MySQL UDF的支持。

  一个Gearman请求的处理过程涉及三个角色:Client -> Job -> Worker。
  Client:请求的发起者,可以是 C,PHP,Perl,MySQL UDF 等等。
  Job:请求的调度者,用来负责协调把 Client 发出的请求转发给合适的 Worker。
  Worker:请求的处理者,可以是 C,PHP,Perl 等等。
  因为 Client,Worker 并不限制用一样的语言,所以有利于多语言多系统之间的集成。

SQL语句优化注意

1.尽量不要对列名进行函数处理.而是针对后面的值进行处理
例如where col1 = -5的效率比where -col1=5的效率要高
因为后面的条件对列值进行了计算.这样的条件下优化器无法使用索引
而是要针对所有值进行计算之后才能再比较

2.尽量使用和数剧列一样的值进行操作
如果col1是数值型
那么例如where col1 = 2和where col1= ‘2′
则前者效率更高
因为比较字符和数值型的时候
引擎需要把两者都转化成双精度然后进行比较
这样col1上的索引就失去作用了

3.减少函数的使用
例如where col1 >= ‘2009-10-26′ and col1 <= ‘2009-10-27′ 和where datediff(day,col1,getdate())=0 后者因为用到函数处理.所以col1上的索引又无法使用了 4.尽量不要用OR 一般对于OR的条件 优化器一般会使用全表扫描