Redhat上安装Perl DBD::mysql驱动

Redhat上安装Perl DBD::mysql驱动

打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库可以通过DBI模块和相应数据库的DBD驱动,上一篇记录了DBI模块的安装,这里记录下DBD::mysql驱动的安装。可以从CPAN下载相应DBD驱动

安装过程很简单,下载解压:

gzip -d DBD-mysql-4.006.tar.gz
tar xvf DBD-mysql-4.006.tar

然后进入DBD-mysql-4.006目录,执行:

perl Makefile.PL
make
make test
make install

检查已经安装的Perl模块:

# ./perl-module.pl
DBD::mysql
DBI
Perl

安装DBD::mysql需要mysql_config,包含在Headers and libraries安装包中(MySQL-devel-community-5.1.23-0.rhel4.i386.rpm),并且PATH环境变量中必须包含mysql_config所在的路径。否则在执行perl Makefile.PL生成makefile的时候会报错:

Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 76.

Cannot find the file ‘mysql_config’! Your execution PATH doesn’t seem
not contain the path to mysql_config. Resorting to guessed values!
Can’t exec “mysql_config”: No such file or directory at Makefile.PL line 466.

通过调用DBI->available_drivers()函数可以查看当前系统中已经安装好的所有驱动。安装好DBI和DBD::mysql后,就可以访问MySQL数据库啦,首先在test库中创建一个table:

create table test(id int,name varchar(30))

然后执行下面的Perl脚本插入一条数据并且查询得到结果:

#!/usr/bin/perl
use DBI;
my $dbh = DBI->connect("DBI:mysql:database=test;host=localhost","NinGoo","password", {'RaiseError' => 1});
my $rows = $dbh->do("INSERT INTO test (id, name) VALUES (1, 'NinGoo')");
my $query = $dbh->prepare("SELECT name FROM test");
$query->execute();
while(my $rs = $query->fetchrow_hashref()) {
    print "$rs->{'name'}\n";
}

Redhat Linux上Oracle如何启用AIO

从Oracle9iR2开始支持Linux上的异步IO,但是Oracle9iR2和Oracle10gR1中的AIO模块默认是disable的,如果要启用必须relink一下

cd $ORACLE_HOME/rdbms/lib
make -f ins_rdbms.mk async_on
make -f ins_rdbms.mk ioracle

当然,如果要关闭AIO支持,只需要使用async_off选项进行relink即可。在Oracle10gR2中AIO默认已经是开启的了。可以通过ldd或者nm来检查oracle是否已经启用了AIO支持,有输出代表已经启用

/usr/bin/ldd $ORACLE_HOME/bin/oracle | grep libaio
        libaio.so.1 => /usr/lib64/libaio.so.1 (0x0000003ca9800000)

/usr/bin/nm $ORACLE_HOME/bin/oracle | grep io_getevent
                 w io_getevents@@LIBAIO_0.4

当然,Linux也必须已经安装了AIO相关的package

rpm -qa | grep aio
libaio-0.3.105-2
libaio-devel-0.3.105-2

可以通过查看slabinfo统计信息查看操作系统中AIO是否运行,slab是Linux的内存分配器,AIO相关的内存结构已经分配的话(第二列和第三列非0)说明AIO已经启用

cat /proc/slabinfo | grep kio
kioctx 102 170 384 10 1 :tunables 54   27 8 : slabdata 17 17 0
kiocb 488 495 256 15 1 :tunables 120 60 8 : slabdata 33 33 120

最后,还需要在Oracle中设置相关的初始化参数来使用AIO

disk_asynch_io = true
filesystemio_options = asynch #文件系统才需要

Redhat上安装Perl DBI模块

打算熟悉下perl,自然主要用于数据库管理和监控方面的,所以需要连接数据库。Perl连接数据库需要安装DBI模块和相应数据库的DBD驱动,Linux上默认安装的Perl是没有该模块的。可以从CPAN下载DBI模块进行安装。

安装过程很简单,下载解压:

gzip -d DBI-1.604.tar.gz
tar xvf DBI-1.604.tar

然后进入DBI-1.604目录,执行:

perl Makefile.PL
make
make test
make install

以下脚本可以用来检测系统中已经安装的Perl模块:

#!/usr/bin/perl
use ExtUtils::Installed;

my $inst = ExtUtils::Installed->new();
print join "\n",$inst->modules();

安装完DBI后执行该脚本的结果如下:

# ./perl-module.pl
DBI
Perl

DBI的文档可以通过perldoc查看:

#perldoc DBI

解决xmanager无法启动AIX的CDE桌面一例

昨天在AIX上中安装oracle9i的时候,xmanager能连上服务器,也能登陆,但之后就一直停在starting CDE environment,桌面死活出不来。检查服务器,CDE是安装了的,执行/etc/rc.dt也能顺利启动,检查dtlogin也运行正常。

最后发现,问题出在/etc/hosts上,假设主机名为test,IP地址为192.168.168.1,/etc/hosts文件中存在如下记录

192.168.168.1 test1 test

也就是这个位于test之前的test1造成了问题,去掉后桌面正常出来了。还有一个小问题,在AIX上安装9i会要求指定JDK1.3.1的位置,大多数情况下,安装程序会在$ORACLE_BASE/jre上安装一个1.1.8和1.3.1的版本,但有时也可能碰到没有安装的情况,这时可以指定系统中其他版本的JDK,比如/usr/java14,系统中是否已经安装其他版本的jdk可以通过which java来查看。

记录一下备忘。